sp_send_dbmail (Transact-SQL)
E-posta iletisine belirtilen alıcılara gönderir.İleti, bir sorgu sonuç kümesi, dosya eklerini veya her ikisini de içerebilir.Posta başarıyla veritabanı posta sıraya yerleştirildiğinde sp_send_dbmail verir mailitem_id ileti.Bu saklı yordam bulunduğu msdb veritabanı.
Sözdizimi
sp_send_dbmail [ [ @profile_name = ] 'profile_name' ]
[ , [ @recipients = ] 'recipients [ ; ...n ]' ]
[ , [ @copy_recipients = ] 'copy_recipient [ ; ...n ]' ]
[ , [ @blind_copy_recipients = ] 'blind_copy_recipient [ ; ...n ]' ]
[ , [ @from_address = ] 'from_address' ]
[ , [ @reply_to = ] 'reply_to' ] [ , [ @subject = ] 'subject' ]
[ , [ @body = ] 'body' ]
[ , [ @body_format = ] 'body_format' ]
[ , [ @importance = ] 'importance' ]
[ , [ @sensitivity = ] 'sensitivity' ]
[ , [ @file_attachments = ] 'attachment [ ; ...n ]' ]
[ , [ @query = ] 'query' ]
[ , [ @execute_query_database = ] 'execute_query_database' ]
[ , [ @attach_query_result_as_file = ] attach_query_result_as_file ]
[ , [ @query_attachment_filename = ] query_attachment_filename ]
[ , [ @query_result_header = ] query_result_header ]
[ , [ @query_result_width = ] query_result_width ]
[ , [ @query_result_separator = ] 'query_result_separator' ]
[ , [ @exclude_query_output = ] exclude_query_output ]
[ , [ @append_query_error = ] append_query_error ]
[ , [ @query_no_truncate = ] query_no_truncate ]
[ , [ @query_result_no_padding = ] @query_result_no_padding ]
[ , [ @mailitem_id = ] mailitem_id ] [ OUTPUT ]
Bağımsız değişkenler
[ @profile_name= ] 'profile_name'
Gelen iletiyi göndermek için profilinin adıdır.profile_name Türü olan sysname, varsayılan değer null.profile_name Olması gereken adını bir varolan veritabanı posta profili.Hayır, profile_name belirlendiğinde, sp_send_dbmail geçerli kullanıcı için varsayılan özel profili kullanır.Kullanıcı varsayılan özel profil yoksa sp_send_dbmail için varsayılan genel profil kullanır msdb veritabanı.Kullanıcının varsayılan özel bir profil yok ve veritabanı için varsayılan genel profil varsa @ Profil_adı belirtilmelidir.[ @recipients= ] 'recipients'
İleti göndermek için e-posta adreslerini noktalı virgülle ayrılmış bir listesi verilmiştir.Alıcılar listesi türüdür varchar(max).Bu parametre isteğe bağlıdır, ancak en az bir @ Alıcılar, @ copy_recipients, veya @ blind_copy_recipients belirtilmesi gerekir veya sp_send_dbmail bir hata döndürür.[ @ copy_recipients= ] 'copy_recipients'
Noktalı virgülle ayrılmış listesini e-posta iletisine karbon kopya adresleri olur.Kopya alıcılar listesi türüdür varchar(max).Bu parametre isteğe bağlıdır, ancak en az bir @ Alıcılar, @ copy_recipients, veya @ blind_copy_recipients belirtilmesi gerekir veya sp_send_dbmail bir hata döndürür.[ @ blind_copy_recipients= ] 'blind_copy_recipients'
İletiyi gizli için noktalı virgülle ayrılmış listesini e-posta adresleri olur.Görünmeyen kopya alıcılar listesi türüdür varchar(max).Bu parametre isteğe bağlıdır, ancak en az bir @ Alıcılar, @ copy_recipients, veya @ blind_copy_recipients belirtilmesi gerekir veya sp_send_dbmail bir hata döndürür.[ @from_address= ] 'from_address'
Değeri 'Kimden 'adresi e-posta ileti.Bu, posta profili ayarları geçersiz kılmak için kullanılan isteğe bağlı bir parametredir.Bu parametre türü olan varchar(MAX).SMTP güvenlik ayarları, bu geçersiz kılmalar kabul edilip edilmediğini belirler.Hiçbir parametre belirtilmezse, varsayılan değer null olur.[ @reply_to= ] 'reply_to'
Değeri 'Yanıtla adresi' e-posta ileti.Tek bir e-posta adresi geçerli bir değer kabul eder.Bu, posta profili ayarları geçersiz kılmak için kullanılan isteğe bağlı bir parametredir.Bu parametre türü olan varchar(MAX).SMTP güvenlik ayarları, bu geçersiz kılmalar kabul edilip edilmediğini belirler.Hiçbir parametre belirtilmezse, varsayılan değer null olur.[ @subject= ] 'subject'
E-posta iletisi konusudur.Konu türüdür nvarchar(255).Hiçbir konu belirtilirse,SQL Server Message' varsayılandır.[ @body= ] 'body'
E-posta iletisinin gövdesi olur.İleti gövdesi türüdür nvarchar(max), varsayılan değer null.[ @body_format= ] 'body_format'
İleti gövdesinin biçimidir.Parametre türü: varchar(20), varsayılan değer null.kümeParametre aşağıdaki değerlerden birini içerebilir:TEXT
HTML
Varsayılan olarak metin.
[ @importance= ] 'importance'
İletinin önemini olur.Parametre türü: varchar(6).Parametre aşağıdaki değerlerden birini içerebilir:Low
Normal
High
Varsayılan olarak Normal.
[ @sensitivity= ] 'sensitivity'
İletinin duyarlılığı olur.Parametre türü: varchar(12).Parametre aşağıdaki değerlerden birini içerebilir:Normal
Kişisel
Özel
Gizli
Varsayılan olarak Normal.
[ @ file_attachments= ] 'file_attachments'
E-posta iletisine eklemek için dosya adlarını noktalı virgülle ayrılmış bir listesi verilmiştir.Listedeki dosyalar mutlak yollar olarak belirtilmelidir.Eklerin listesi türüdür nvarchar(max).Varsayılan olarak, veritabanı posta 1 mb dosya ekleri dosya başına sınırlar.Daha fazla bilgi için, bkz. Veritabanı posta Yapılandırma Sihirbazı.[ @query= ] 'query'
yürütmekbir sorgudur.Sorgu sonuçlar ekli dosya veya e-posta iletisinin gövdesinde yer.Sorgu türü olan nvarchar(max)ve herhangi bir geçerli Transact-SQL ifadeleri.Ayrı oturum, bu nedenle yerel değişkenleri komut dosyası arama sorgusu yürütülür Not sp_send_dbmail sorgu için kullanılabilir değil.[ @ execute_query_database= ] 'execute_query_database'
İçinde saklı yordam sorguyu çalıştırır veritabanı bağlamdır.Parametre türü: sysname, varsayılan değer geçerli veritabanına al.Bu parametre yalnızca geçerlidir, @ sorgu belirtilir.[ @ attach_query_result_as_file= ] attach_query_result_as_file
sonuç kümesi , sorgu eklenmiş dosya döndürülen olup olmadığını belirtir.attach_query_result_as_filetür bit, varsayılan olarak 0.Değer 0 olduğunda, sorgu sonuçlar dahil edilir e-posta iletisinin gövdesinde sonra içeriğini @ gövde parametresi.Değer 1 olduğunda, ek olarak sonuçlar döndürülür.Bu parametre yalnızca geçerlidir, @ sorgu belirtilir.
[ @ query_attachment_filename= ] query_attachment_filename
sonuç kümesi sorgu ekin için kullanılacak dosya adını belirtir.query_attachment_filenametür nvarchar(255), varsayılan değer null.Bu parametre dikkate alınmaz, attach_query_result 0.Zaman attach_query_result 1'dir ve bu parametresi null, Database Mail oluşturur rasgele bir dosya adı.[ @ query_result_header= ] query_result_header
Sorgu sonuçlar sütun başlıkları dahil olup olmadığını belirtir.Query_result_header değer türüdür bit.Değer 1 olduğunda, sorgu sonuçlar sütun başlıkları içerir.Değer 0 olduğunda, sorgu sonuçlar ekleme sütun başlıkları.Bu parametre için varsayılan 1.Bu parametre yalnızca geçerlidir, @ sorgu belirtilir.[ @ query_result_width =] query_result_width
Sorgu sonuçlar biçimlendirmek için kullanılacak karakter, çizgi kalınlığı olduğu.query_result_width Türü olan int, varsayılan 256.Sağlanan değer, 10 ile 32767 arasında olmalıdır.Bu parametre yalnızca geçerlidir, @ sorgu belirtilir.[ @ query_result_separator= ] 'query_result_separator'
Karakter, sorgu çıktısında sütunları ayırmak için kullanılır.Ayırıcı türüdür char(1).Varsayılan olarak ' ' (boşluk).[ @ exclude_query_output= ] exclude_query_output
E-posta iletisinde sorgu yürütme çıktı dönmek etkinleştirilip etkinleştirilmeyeceğini belirtir.exclude_query_output , varsayılan değeri 0 bit.Bu parametre 0, yürütülmesini olduğunda sp_send_dbmail saklı yordam konsolda sorgu yürütmesi sonucu olarak döndürülen iletiyi yazdırır.Bu parametre 1, yürütülmesini olduğunda sp_send_dbmail saklı yordam yazdırma sorgu yürütme iletilerini konsolda.[ @ append_query_error= ] append_query_error
Belirtilen sorgu hata verir, e-posta gönderilip gönderilmeyeceğini belirtir @ sorgu bağımsız değişkeni.append_query_error olan bit, varsayılan olarak 0.Bu parametre 1 olduğunda, Database Mail e-posta iletisi gönderir ve e-posta iletisinin gövdesinde sorgu hata iletisini içerir.Bu parametre 0 olduğunda, Database Mail e-posta ileti göndermez ve sp_send_dbmail başarısız olduğunu dönüş koduyla 1, sona erer.[ @ query_no_truncate= ] query_no_truncate
Sorgu seçeneğiyle yürütmek , büyük değişken uzunluklu veri türleri kesilmesi kaçınır olup olmadığını belirtir (varchar(max), nvarchar(max), varbinary(max), xml, text, ntext, imageve kullanıcı tanımlı veri türleri).Zaman küme, sorgu sonuçlar sütun üstbilgilerini içermiyor.query_no_truncate Değerdir türü bit.Değer 0 veya belirtilmemiş olduğunda, sütunların sorgudaki 256 karakterle kesecek.Değer 1 olduğunda, sütunların sorgudaki kesilmiş değil.Bu parametrenin varsayılan olarak 0 olur.Not
Veri, büyük miktarlarda kullanıldığında @query_no_truncate seçeneği ek kaynaklarını tüketir ve sunucu performansını yavaşlatır.
[ @ query_result_no_padding ] @query_result_no_padding
Türü bit.Varsayılan değer 0'dir.Ne zaman, küme 1, sorgu sonuçlar değil azsa, büyük olasılıkla dosya boyutunu küçültme.@ Query_result_width parametresi, küme @ query_result_no_padding 1 ve küme @ query_result_width parametresi @ query_result_no_padding parametresi için geçersiz kılar.Bu durum da hata oluşmaz.
@ Query_result_no_padding 1 küme ve küme @ query_no_truncate parametresi, bir hata ortaya çıkar.
[ @mailitem_id= mailitem_id [ OUTPUT ]
İsteğe bağlı çıkış parametresi mailitem_id ileti.mailitem_id Türü olan int.
Dönüş Kodu Değerleri
Bir dönüş kodu 0 Başarı anlamına gelir.Başka bir değer başarısızlığı anlamına gelir.Bir deyim başarısız oldu Hata kodu @@ error değişkende saklanır.
Sonuç Kümeleri
Başarı, "Posta sıraya." iletisini döndürür.
Açıklamalar
Veritabanı posta Yapılandırma Sihirbazı'nı kullanarak veritabanı posta kullanılmadan önce etkinleştirilmelidir veya sp_configure.
sysmail_stop_sp veritabanı posta dış program kullanan Hizmet Aracısı nesneleri durdurulmasıyla durdurulur.sp_send_dbmail Database Mail'i kullanarak durdurulduğunda hala posta kabul sysmail_stop_sp.Veritabanı posta başlatmak için sysmail_start_sp.
Zaman @ Profil belirtilmezse, sp_send_dbmail bir varsayılan profili kullanır.Database Mail, e-posta iletisi gönderen kullanıcı özel bir varsayılan profil varsa, bu profili kullanır.Kullanıcının varsayılan özel profil, varsa sp_send_dbmail varsayılan genel profil kullanır.Kullanıcı için varsayılan özel profil ve hiçbir varsayılan genel profil ise sp_send_dbmail bir hata döndürür.
sp_send_dbmail hiç bir içeriğe sahip e-posta iletileri desteklemez.Bir e-posta iletisi göndermek için en az birini belirtmeniz gerekir @ gövde, @ sorgu, @ file_attachments, veya @ Konu.Aksi takdirde, sp_send_dbmail bir hata döndürür.
Veritabanı posta kullanımları Microsoft Geçerli kullanıcının erişimi denetlemek için Windows güvenlik içeriğinidosyaları.Bu nedenle, sahip kimliği doğrulanmış kullanıcılar SQL Server kimlik doğrulaması kullanarak dosyaları eklemek @ file_attachments.Windows izin vermez SQL Server sağlamaya yönelik kimlik bilgileri uzak bir bilgisayardan başka bir uzak bilgisayar.Bu nedenle, Database Mail durumlarda burada komut çalıştırıldığında bilgisayar dışındaki bir bilgisayardan ağ paylaşımından dosya eklemek mümkün olmayabilir, SQL Server üzerinde çalıştığı.
Her iki @ sorgu ve @ file_attachments belirtilir ve dosya bulunamıyor, sorgu hala yürütülür ancak e-posta gönderilemedi.
Bir sorgu belirtilirse, sonuç kümesi satır içi metin olarak biçimlendirilir.Sonuç ikili veri, onaltılık biçimde gönderilir.
Parametreleri @ Alıcılar, @ copy_recipients, ve @ blind_copy_recipients olan e-posta adreslerini noktalı virgülle ayrılmış listesi.Bu parametrelerden en az birinin sağlanması gerekir, ya da sp_send_dbmail bir hata döndürür.
Yürütürken sp_send_dbmail bir işlem bağlamı olmadan, Database Mail'i başlatır ve bir örtük işlemtamamlar.Yürütürken sp_send_dbmail karşı varolan bir hareket içinde veritabanı posta kullanıcıya yürütme veya geri almak değişiklikleri dayanır.Bir iç işlem başlatılmaz.
İzinler
Yürütme izinleri için sp_send_dbmail tüm üyeleri için varsayılan DatabaseMailUser veritabanı rolü msdb veritabanı.Ancak, ne zaman ileti gönderen kullanıcı isteği profilini kullanmak için izni yok sp_send_dbmail hata verir ve ileti göndermez.
Örnekler
A.Bir e-posta iletisi gönderme
Bu örnekte e-posta adresini kullanarak e-posta iletisine Dan Wilson gönderir danw@Adventure-Works.com.İletinin konu olan Automated Success Message.İletisinin gövdesi aşağıdaki cümle yer almaktadır 'The stored procedure finished successfully'.
EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'AdventureWorks2008R2 Administrator',
@recipients = 'danw@Adventure-Works.com',
@body = 'The stored procedure finished successfully.',
@subject = 'Automated Success Message' ;
B.Sorgu sonuçlar içeren bir e-posta iletisi gönderme
Bu örnekte e-posta adresini kullanarak e-posta iletisine Dan Wilson gönderir danw@Adventure-Works.com.İletinin konu olan Work Order Countve çalışma siparişlerin sayısını gösteren bir sorgu yürütür bir DueDate iki günden az bir süre sonra 30 Nisan 2004.Veritabanı posta sonuç metin dosyası olarak ekler.
EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'AdventureWorks2008R2 Administrator',
@recipients = 'danw@Adventure-Works.com',
@query = 'SELECT COUNT(*) FROM AdventureWorks2008R2.Production.WorkOrder
WHERE DueDate > ''2006-04-30''
AND DATEDIFF(dd, ''2006-04-30'', DueDate) < 2' ,
@subject = 'Work Order Count',
@attach_query_result_as_file = 1 ;
C.HTML e-posta iletisi gönderme
Bu örnekte e-posta adresini kullanarak e-posta iletisine Dan Wilson gönderir danw@Adventure-Works.com.İletinin konu olan Work Order Listve iş siparişleri gösteren bir HTML belgede bir DueDate iki günden az bir süre sonra 30 Nisan 2004.Database Mail iletiyi HTML biçiminde gönderir.
DECLARE @tableHTML NVARCHAR(MAX) ;
SET @tableHTML =
N'<H1>Work Order Report</H1>' +
N'<table border="1">' +
N'<tr><th>Work Order ID</th><th>Product ID</th>' +
N'<th>Name</th><th>Order Qty</th><th>Due Date</th>' +
N'<th>Expected Revenue</th></tr>' +
CAST ( ( SELECT td = wo.WorkOrderID, '',
td = p.ProductID, '',
td = p.Name, '',
td = wo.OrderQty, '',
td = wo.DueDate, '',
td = (p.ListPrice - p.StandardCost) * wo.OrderQty
FROM AdventureWorks2008R2.Production.WorkOrder as wo
JOIN AdventureWorks2008R2.Production.Product AS p
ON wo.ProductID = p.ProductID
WHERE DueDate > '2006-04-30'
AND DATEDIFF(dd, '2006-04-30', DueDate) < 2
ORDER BY DueDate ASC,
(p.ListPrice - p.StandardCost) * wo.OrderQty DESC
FOR XML PATH('tr'), TYPE
) AS NVARCHAR(MAX) ) +
N'</table>' ;
EXEC msdb.dbo.sp_send_dbmail @recipients='danw@Adventure-Works.com',
@subject = 'Work Order List',
@body = @tableHTML,
@body_format = 'HTML' ;
Ayrıca bkz.