sp_send_dbmail @fil...
 
Bildirimler
Hepsini Temizle

sp_send_dbmail @file_attachments dosya uzantısı izin hatası  

  RSS
Gökhan Erdoğdu
(@adaliadam)
Üye

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 = 'gokhanerdogdu@safikatiyakit.com.tr',
@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.
Alıntı
Gönderildi : 27/12/2019 12:31
Mehmet Sucu
(@mehmetsucu)
Üye

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 = 'gokhanerdogdu@safikatiyakit.com.tr' ,
@subject = 'TÜM DEPOLAR TAHMİNİ SAHA STOK DAĞILIMI RAPORU' ,
@body = @body1 ,
@file_attachments = @dosya ;
END ;

Mehmet SUCU
HBYS Yazılım Uzmanı
mehmetsucu_44@hotmail.com

CevapAlıntı
Gönderildi : 27/12/2019 13:08
Gökhan Erdoğdu
(@adaliadam)
Üye

@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'
CevapAlıntı
Gönderildi : 27/12/2019 13:23
Mehmet Sucu
(@mehmetsucu)
Üye

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

Mehmet SUCU
HBYS Yazılım Uzmanı
mehmetsucu_44@hotmail.com

CevapAlıntı
Gönderildi : 27/12/2019 13:24
Gökhan Erdoğdu
(@adaliadam)
Üye

@mehmetsucu

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

image
CevapAlıntı
Gönderildi : 27/12/2019 13:30
Can Kaya
(@cankaya)
Üye Forum Yöneticisi

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

CevapAlıntı
Gönderildi : 28/12/2019 13:21
Gökhan Erdoğdu
(@adaliadam)
Üye

@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.

CevapAlıntı
Gönderildi : 28/12/2019 13:24
Can Kaya
(@cankaya)
Üye Forum Yöneticisi

@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 = 'gokhanerdogdu@safikatiyakit.com.tr' ,
@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

 

CevapAlıntı
Gönderildi : 28/12/2019 13:32
Gökhan Erdoğdu
(@adaliadam)
Üye

@cankaya

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

CevapAlıntı
Gönderildi : 28/12/2019 14:33
Can Kaya beğendi
Gökhan Erdoğdu
(@adaliadam)
Üye

@cankaya

EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'AutoMail' ,
@recipients = 'gokhanerdogdu@safikatiyakit.com.tr' ,
@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 '‘'.

 

CevapAlıntı
Gönderildi : 30/12/2019 14:18
Gökhan Erdoğdu
(@adaliadam)
Üye

@cankaya

image

 

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

CevapAlıntı
Gönderildi : 30/12/2019 14:22
Can Kaya
(@cankaya)
Üye Forum Yöneticisi

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 

CevapAlıntı
Gönderildi : 02/01/2020 19:42
Gökhan Erdoğdu
(@adaliadam)
Üye

@cankaya

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

CevapAlıntı
Gönderildi : 02/01/2020 19:47
Can Kaya beğendi
Paylaş: