Forum

sp_send_dbmail @fil...
 
Bildirimler
Hepsini Temizle

sp_send_dbmail @file_attachments dosya uzantısı izin hatası

13 Yazılar
3 Üyeler
4 Reactions
3,167 Görüntüleme
Gökhan Erdoğdu
(@adaliadam)
Gönderiler: 40
Trusted Member
Konu başlatıcı
 

Merhabalar,

Aşağıdaki kod ile bir excel dosyasını mail eki olarak göndermek istiyorum. Fakat hata alıyorum. Yardımlarınızı rica ederim.

@file attachments hata
EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'AutoMail',
@recipients = '[email protected]',
@subject = 'TÜM DEPOLAR TAHMİNİ SAHA STOK DAĞILIMI RAPORU',
@body = '<p>Merhabalar,</p>
<p>&nbsp;</p>
<p>Ektedir bilginize.</p>
<p><span style="text-decoration: underline; color: #ff0000;"><em>Not: Bu mail sunucudan otomatik gönderilmiştir. Bazı bilgisayarlarda yenileme yapmayabilir.</em></span></p>' ,
@body_format = 'HTML',
@file_attachments = 'D:\LOGO\TIGER3\AMBARLAR\TÜM DEPOLAR TAHMİNİ SAHA STOKLAR.xlsm'

HATA KODU

Msg 14630, Level 16, State 1, Procedure sp_GetAttachmentData, Line 59 [Batch Start Line 7]
Database Mail is not permitted to send files with the file extension D:\LOGO\TIGER3\AMBARLAR\TÜM DEPOLAR TAHMİNİ SAHA STOKLAR.xlsm.

Botek Otomasyon
Raporlama ve Analiz Uzmanı

 
Gönderildi : 27/12/2019 12:31

(@mehmetsucu)
Gönderiler: 85
Estimable Member
 

Merhaba @adaliadam

@file_attachments=@ekdosya gibi parametre vermeniz gerekiyor.

Örnek:

DECLARE @dosya VARCHAR (MAX) ;
DECLARE @body1 VARCHAR (MAX) = '' ;
DECLARE @yol NVARCHAR (100) ;

SET @yol = N'c:\TEMP' ;

DECLARE @DosyaTablosu TABLE
(DosyaAdi NVARCHAR (500) ,
boyut INT ,
IsDosya INT) ;

INSERT INTO @DosyaTablosu
EXEC xp_dirtree
@yol ,
1 ,
1 ;

IF EXISTS
( SELECT
1
FROM @DosyaTablosu
WHERE IsDosya = 1)
BEGIN
SELECT
@dosya = STUFF(
( SELECT
';' + @yol + '\' + DosyaAdi
FROM @DosyaTablosu
WHERE IsDosya = 1
FOR XML PATH( '' )) ,
1 ,
1 ,
'' ) ;

--print @dosya
EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'AutoMail' ,
@recipients = '[email protected]' ,
@subject = 'TÜM DEPOLAR TAHMİNİ SAHA STOK DAĞILIMI RAPORU' ,
@body = @body1 ,
@file_attachments = @dosya ;
END ;

Mehmet SUCU
HBYS Yazılım Uzmanı
[email protected]
****************************************************************
Probleminiz Çözüldüğünde Sonucu Burada Paylaşırsanız.
Sizde Aynı Problemi Yaşayanlar İçin Yardım Etmiş Olursunuz.
Eğer sorununuz çözüldü ise lütfen "çözüldü" olarak işaretlerseniz diğer üyeler için çok büyük kolaylık sağlayacaktır.
*****************************************************************

 
Gönderildi : 27/12/2019 13:08

Gökhan Erdoğdu
(@adaliadam)
Gönderiler: 40
Trusted Member
Konu başlatıcı
 

@mehmetsucu

Merhaba Mehmet Bey, attığınız kodu yapıştırıp aşağıdaki değişiklikleri yaptım sorgu döndü ama mail gelmedi. Benim pc ayrı server ayrı bu etkiler mi?

DECLARE @body1 VARCHAR (MAX) = 'deneme' ;

SET @yol = N'D:\LOGO\TIGER3\AMBARLAR\' ; ';' + @yol + '\' + 'TÜM DEPOLAR TAHMİNİ SAHA STOKLAR.xlsm'

Botek Otomasyon
Raporlama ve Analiz Uzmanı

 
Gönderildi : 27/12/2019 13:23

(@mehmetsucu)
Gönderiler: 85
Estimable Member
 

Olabilir, dosyayı sunucudan yükleyip denemekte fayda var.

Mehmet SUCU
HBYS Yazılım Uzmanı
[email protected]
****************************************************************
Probleminiz Çözüldüğünde Sonucu Burada Paylaşırsanız.
Sizde Aynı Problemi Yaşayanlar İçin Yardım Etmiş Olursunuz.
Eğer sorununuz çözüldü ise lütfen "çözüldü" olarak işaretlerseniz diğer üyeler için çok büyük kolaylık sağlayacaktır.
*****************************************************************

 
Gönderildi : 27/12/2019 13:24

Gökhan Erdoğdu
(@adaliadam)
Gönderiler: 40
Trusted Member
Konu başlatıcı
 

@mehmetsucu

kendi pc'deki yolu gösterdim.  (13 rows affected)  dedi ama mail gelmedi. Kodda yaptığım değişiklikler uygun mu?

image

Botek Otomasyon
Raporlama ve Analiz Uzmanı

 
Gönderildi : 27/12/2019 13:30

(@cankaya)
Gönderiler: 119
Üye
 

Bunu neden SQL Server ile yapmaya çalışıyorsunuz 2 3 satır PowerShell ile çok kolaylıkla kotarılacak birşey değil mi ?

 
Gönderildi : 28/12/2019 13:21

Gökhan Erdoğdu
(@adaliadam)
Gönderiler: 40
Trusted Member
Konu başlatıcı
 

@cankaya

Haklısınız. Ben sendmail prosedürü ile sorgu sonuçlarını mail olarak gönderme üzerine çalışıyordum. O işi çözdüm. Ama o sıra prosedürde bu parametreyi gördüm. Eğer mümkünse dedim güzel bir özellik kullanayım. Ama gel gör ki böyle bir hata aldım.

Botek Otomasyon
Raporlama ve Analiz Uzmanı

 
Gönderildi : 28/12/2019 13:24

(@cankaya)
Gönderiler: 119
Üye
 

@adaliadam

xpdirtree SQL Server sistemlerinde kapalı olmasını istediğimiz bir özellik. SQL Server in ntfs file sistem üzerinden dosyaları okuyup yazıp yada listelemesini istemeyiz güvenlik kaygılarından dolayı. 

 

Sorguyu çalıştırdığınızda o sorgu veri tabanı makinasında çalışır. Dolayısıyla siz sadece istemcisinizdir. Path veri tabanı sunucusundaki path olmalı.

Önce tek bir excel için deneyip ntfs pathte karar kılıp sonra programatik yola geçmenizi öneririm. Mesela aşağıdaki gibi bir yöntemle.

EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'AutoMail' ,
@recipients = '[email protected]' ,
@subject = 'TÜM DEPOLAR TAHMİNİ SAHA STOK DAĞILIMI RAPORU' ,
@body = @body1 ,
@file_attachments = N'C:\\sample.xlsx';
END ;

 

 

Şu yöntemle de önce directory yapısını temp bir tabloya basıp sonra sırayla dönüp mail atabilirsiniz.

IF OBJECT_ID(‘tempdb..#DirectoryTree’)IS NOT NULL
      DROP TABLE#DirectoryTree;
 
CREATE TABLE #DirectoryTree (
       id int IDENTITY(1,1)
      ,subdirectory nvarchar(512)
      ,depth int
      ,isfile bit);
 
INSERT#DirectoryTree (subdirectory,depth,isfile)
EXEC master.sys.xp_dirtree ‘D:BackupTRON4TEST2MyDb1’,1,1;
 
SELECT * FROM #DirectoryTree
WHERE isfile = 1 AND RIGHT(subdirectory,4) = ‘.BAK’
ORDER BYid;
GO

 

 
Gönderildi : 28/12/2019 13:32

Gökhan Erdoğdu
(@adaliadam)
Gönderiler: 40
Trusted Member
Konu başlatıcı
 

@cankaya

P.tesi deneyip bilgi vereceğim. Teşekkürler

Botek Otomasyon
Raporlama ve Analiz Uzmanı

 
Gönderildi : 28/12/2019 14:33
Can Kaya and Can Kaya reacted

Gökhan Erdoğdu
(@adaliadam)
Gönderiler: 40
Trusted Member
Konu başlatıcı
 

@cankaya

EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'AutoMail' ,
@recipients = '[email protected]' ,
@subject = 'TÜM DEPOLAR TAHMİNİ SAHA STOK DAĞILIMI RAPORU' ,
@body = 'DENEME' ,
@file_attachments = N'L:\AMBARLAR\TÜM DEPOLAR TAHMİNİ SAHA STOKLAR.xlsm'

 

Bu kod "Database Mail is not permitted to send files with the file extension L:\AMBARLAR\TÜM DEPOLAR TAHMİNİ SAHA STOKLAR.xlsm." hatası verdi.

IF OBJECT_ID(‘tempdb..#DirectoryTree’)IS NOT NULL
      DROP TABLE#DirectoryTree;
CREATE TABLE #DirectoryTree (
       id int IDENTITY(1,1)
      ,subdirectory nvarchar(512)
      ,depth int
      ,isfile bit);
INSERT#DirectoryTree (subdirectory,depth,isfile)
EXEC master.sys.xp_dirtree ‘D:BackupTRON4TEST2MyDb1’,1,1;
SELECT * FROM #DirectoryTree
WHERE isfile = 1 AND RIGHT(subdirectory,4) = ‘.BAK’
ORDER BYid;
GO

 

bu kodlar ise bu hatayı verdi. Tam hakim olmadığım için bir şeyi değiştirmeden execute ettim belki ondan ama neyi değiştireceğimi bilemedim.

Msg 102, Level 15, State 1, Line 1
Incorrect syntax near '‘'.
Msg 343, Level 15, State 1, Line 2
Unknown object type 'TABLE#DirectoryTree' used in a CREATE, DROP, or ALTER statement.
Msg 102, Level 15, State 1, Line 10
Incorrect syntax near 'INSERT#DirectoryTree'.
Msg 102, Level 15, State 1, Line 11
Incorrect syntax near '‘'.
Msg 102, Level 15, State 1, Line 14
Incorrect syntax near '‘'.

 

Botek Otomasyon
Raporlama ve Analiz Uzmanı

 
Gönderildi : 30/12/2019 14:18

Gökhan Erdoğdu
(@adaliadam)
Gönderiler: 40
Trusted Member
Konu başlatıcı
 

@cankaya

image

 

biraz düzenledim sorgu döndü fakat sonrasında ne yapacağım?

Botek Otomasyon
Raporlama ve Analiz Uzmanı

 
Gönderildi : 30/12/2019 14:22

(@cankaya)
Gönderiler: 119
Üye
 

hocam böyle yol alamayız 🙂 teknik eksiklikler konusunda yardımcı olabiliriz ancak forum şartlarında. Bu şekilde sonsuza giden threadler olur. Sadece önerdiğimiz yöntemleri ve tecrübelerimizi aktarabiliriz sadece bu platformda. :S 

 
Gönderildi : 02/01/2020 19:42

Gökhan Erdoğdu
(@adaliadam)
Gönderiler: 40
Trusted Member
Konu başlatıcı
 

@cankaya

Peki sorun değil teşekkür ederim.

Botek Otomasyon
Raporlama ve Analiz Uzmanı

 
Gönderildi : 02/01/2020 19:47
Can Kaya and Can Kaya reacted

Paylaş: