Forum
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.
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> </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ı
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.
*****************************************************************
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ı
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.
*****************************************************************
kendi pc'deki yolu gösterdim. (13 rows affected) dedi ama mail gelmedi. Kodda yaptığım değişiklikler uygun mu?
Botek Otomasyon
Raporlama ve Analiz Uzmanı
Bunu neden SQL Server ile yapmaya çalışıyorsunuz 2 3 satır PowerShell ile çok kolaylıkla kotarılacak birşey değil mi ?
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ı
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.
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ı
biraz düzenledim sorgu döndü fakat sonrasında ne yapacağım?
Botek Otomasyon
Raporlama ve Analiz Uzmanı
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