xp_sendmail (Transact-SQL)
Belirtilen alıcı için bir sorgu sonuç kümesi ek içeren bir e-posta iletisi gönderir.Bu genişletilmiş saklı yordam SQL Mail iletiyi göndermek için kullanılır.
Not
This feature will be removed in a future version of Microsoft SQL Server. Avoid using this feature in new development work, and plan to modify applications that currently use this feature.Posta göndermek içinSQL ServerkullanınVeritabanı posta.
xp_sendmail { [ @recipients= ] 'recipients [ ;...n ]' }
[ ,[ @message= ] 'message' ]
[ ,[ @query= ] 'query' ]
[ ,[ @attachments= ] 'attachments [ ;...n ]' ]
[ ,[ @copy_recipients= ] 'copy_recipients [ ;...n ]'
[ ,[ @blind_copy_recipients= ] 'blind_copy_recipients [ ;...n ]'
[ ,[ @subject= ] 'subject' ]
[ ,[ @type= ] 'type' ]
[ ,[ @attach_results= ] 'attach_value' ]
[ ,[ @no_output= ] 'output_value' ]
[ ,[ @no_header= ] 'header_value' ]
[ ,[ @width= ] width ]
[ ,[ @separator= ] 'separator' ]
[ ,[ @echo_error= ] 'echo_value' ]
[ ,[ @set_user= ] 'user' ]
[ ,[ @dbuse= ] 'database' ]
Bağımsız değişkenler
[ @recipients=] **'**recipients [ ;... n] '
Noktalı virgüllerle ayrılmış posta alıcıları listesidir.[ @message=] 'message'
Is the message body to be sent.messagecan be up to 8,000 bytes.[ @query=] 'query'
Is a valid SQL Server query, the result of which is sent in mail.xp_sendmail uses a bound connection for the query parameter.The query connection made by SQL Mail is not blocked by locks held by the client that issues the xp_sendmail request.Buxp_sendmail tetikler. içinde kullanmak daha kolay The query statement, however, cannot refer to the inserted and deleted logical tables, because these tables are only available within a trigger.querycan be up to 8,000 bytes.[ @attachments=] 'attachments [ ;... n] '
Noktalı virgülle ayrılmış bir posta iletisine eklemek için dosyaların listesi belirtilir.Kullanıyorsanız,@ sorgu parametre, @ attach_results@ ekleri TRUE, ise parametre eklemek posta iletisini. için yalnızca bir dosya belirtebilirsiniz Bu durumda, birden fazla dosya göndermek için çalıştırmalısınızxp_sendmail bağlı dosya her biri için ayrı ayrı[ @copy_recipients=] **'**copy_recipients [ ;... n] '
Noktalı virgülle ayrılmış listesi postanın bir kopyasını alıcılarını tanımlayan iş.[ @blind_copy_recipients=] **'**blind_copy_recipients[ ;... n] '
İsteğe bağlı bir noktalı virgülle ayrılmış listesini görme kopyasını posta alıcıları tanımlayan iş.[ @subject=] 'subject'
Bir parametre posta konusunu belirleme iş.If subjectis not specified, "SQL Server Message" is the default.[ @type=] 'type'
Giriş ileti türü MAPI adres tanımını temel alan:IP[ M|C ].Vendorname.subclass
Iftypeolan NULL,xp_sendmail ileti türünü kullanan IPM.İleti türü ile başlatmakIPMposta gelen kutusunda görünen istemci ve bulunan veya okunanxp_findnextmsg.İleti türü ile başlatmakIPCposta istemcisinin gelen kutusunda görüntülenir ve olmalı bulunamadı veya ayarlayarak okumatypeparametre.Varsayılan değer NULL olur.SQL Mail ileti türünü desteklerIPMveIPC.
[ @attach_results=] 'attach_value'
İş sonucu belirleyen isteğe bağlı parametre küme sorguda postanın eklenmiş yerine, ekli dosya olarak posta ile gönderilmelidir.If**@ ekleri** NULL ve @ attach_results değil ise TRUE, attachmentsDosya adı olarak kullanılır, ilk dosya adı sonuçlar. If**@ ekleri** NULL ise, bir dosya adı oluşturulur bir .txt uzantısı. ile Başka bir deyişle, sonuç yanlış varsayılandır küme iletiye eklenir.[ @no_output=] 'output_value'
Posta gönderir, ancak herhangi bir çıktı gönderilen posta istemci oturumuna dönmek isteğe bağlı parametre belirtilir.Varsayılan değer olan yanlış olduğu anlamına gelir, istemci oturumSQL Serveralan çıktı.[ @no_header=] 'header_value'
Sorgu sonuçlar posta ile gönderir, ancak sorgu sonuçlar ile sütun başlık bilgilerini gönderme isteğe bağlı parametre belirtilir.Sütun başlık bilgilerini sorgu sonuçlar gönderilir; yanlış varsayılandır.[ @width=] width
İsteğe bağlı parametre sorgusu için çıkış metnin çizgi genişliği ayarı iş.Bu parametre olan aynı**/wisql** yardımcı programı. biçiminde parametre Üretim sorguları için çıkış satır uzun, kullanınwidthileattach_resultsortadaki çıkış satırlarını. satır sonu olmayan çıkış göndermek içinVarsayılan genişliği 80 karakter olabilir.[ @separator=] 'separator'
Sonuç, her sütun için sütun ayırıcı dize küme.Varsayılan olarak, sütun ayırıcı boş bir alandır.Sütun ayırıcı kullanımı, elektronik tablolar ve diğer uygulamalar sonuç daha kolay çözümleme sağlar.Örneğin kullanınseparatorileattach_resultsvirgülle ayrılmış değerler. dosya gönderme[ @echo_error=] 'echo_value'
TRUE olduğunda, tüm sunucu iletileri veya sorgu çalışırken DB-Library hataların ve hata günlüğü için bunları yazmak yerine posta iletisine eklemek, SQL Mail neden olur.Ayrıca, verilen/etkilenen satırların posta iletisine eklenen satır sayısı.Not
Zamanecho_errorise, TRUExp_sendmail posta başarıyla, DB-Library hataları veya iletileri karşılaşılan veya sorgu hiçbir sonuçlar. verir bile gönderilirse 0 (başarılı) durumunu verir.
[ @set_user=] 'user'
Sorgunun çalıştırılması gereken güvenlik bağlamını belirtilir.Ifkullanıcı belirtilmezse, varsayılan güvenlik bağlamını kullanıcısının çalışan xp_sendmail kullanır.[ @dbuse=] 'database'
Sorgunun çalıştırılması gereken veritabanı içeriği belirtilir.Başka bir deyişle varsayılan veritabanı kullanıcı yerleştirilir, NULL, varsayılandır.
Dönüş Kodu Değerleri
0 (başarılı) veya 1 (hatası)
Sonuç Kümeleri
Zaman başarılıxp_sendmail bir iletiyi. verir
Remarks
The SQL Mail oturum gerekir başladı öncexp_sendmail is run.Oturumları otomatik olarak veya ile başlatılabilirxp_startmail.Hakkında daha fazla bilgi için küme otomatik olarak bir SQL Mail oturum Bkz:Genişletilmiş MAPI posta profillerini yapılandırma.Destekleyen tüm kullanıcılar için bir SQL Mail oturumSQL Serverörneğin, ancak bir seferde yalnızca bir kullanıcı gönderebilirsiniz bir ileti.Diğer kullanıcılar posta iletilerini otomatik olarak gönderme, açar ilk kullanıcının ileti gönderilinceye kadar bekleyin.
Ifquerybelirtilmişse,xp_sendmail oturumu için SQL Serveristemcisi ve belirtilen sorgu.SQL Mail için ayrı bir bağlantı sağlarSQL Serverbunu paylaştırma olarak özgün istemci bağlantı verme aynı bağlantı;xp_sendmail.
Not
queryengellenmiş tarafından verilen istemci bağlantısı tarafından tutulan kilitxp_sendmail.Tablo bir hareket içinde Güncelleştirmekte olduğunuz ve satır bilgileri olarak aynı seçmeye yönelik bir güncelleştirme güncelleştirilmiş için tetikleyici oluşturmak, örneğin,queryparametresi, bağlantının özel kullanım kilidi engellendi SQL Mail tutulan satırdaki ilk istemci bağlantısı.
xp_sendmail güvenlik bağlamında çalışır SQL Server.Geçerli bir kullanıcıxp_sendmail dosyalar için ek bir posta iletisi, bir yöneticinin güvenlik bağlamında. erişebilirsiniz Kullanıcılar sistem yöneticileri dışında gereken erişimxp_sendmail ve ek dosyaları güvenli olmayan erişime karşı korumak istiyorsanız, Sistem Yöneticisi, xp_sendmail arar ve gerekli işlevleri sağlar; ancak, attachmentsparametre. göstermiyor bir saklı yordam oluşturabilirsiniz. Bu saklı yordam tanımlanmalıdırana veritabanı. Daha sonra Sistem Yöneticisi verir izni olmadan temel izni verilmesi gereken kullanıcılara saklı yordam Çalıştırxp_sendmail yordamı.
xp_sendmail ileti, bir sorgunun sonuç kümesi ve belirli alıcılar eki gönderir ve queryparametre. ilişkili bir bağlantı kullanır The query connection made by SQL Mail is not blocked by locks held by the client that issues the xp_sendmail request.Buxp_sendmail tetikler. içinde kullanmak daha kolay The query statement, however, cannot refer to the logical inserted and deleted tables that are only available within a trigger.
Not
Erişim ihlali çalıştırılacak bir girişimden sonuçxp_sendmail Adres Defteri ve posta ofisi MSSQLServer hizmet erişemeyeceği yetersiz izin. nedeniyle dosya paylaşımında olduğunda
xp_sendmail tam xml. veri türünü desteklemiyor. Kullanan sorgularxmlveri türü biçimlendirilmiş yanlış.KullanımıVeritabanı postaiçeren elektronik posta göndermek içinXML data.
İzinler
Üyelik gerektirenSistem Yöneticisi sabit sunucu rolü, ancak yürütmek izinleri verilebilir diğer kullanıcıların. için Ancak güvenlik nedenleriyle, bu saklı yordam için izinleri üyelerine sınırlı olmasını öneririzSistem Yöneticisi sunucu sabit rolü.
Örnekler
C.Tek bir kullanıcıya ileti gönderme
Aşağıdaki örnek, Dan Wilson kullanıcıya bir ileti gönderir (e-posta danw),masterveritabanı olan tam.
EXEC master.dbo.xp_sendmail
@recipients=N'danw@Adventure-Works.com',
@message=N'The master database is full.' ;
B.Birden çok alıcıya ileti gönderme
Aşağıdaki örnek, kullanıcıların Dan Wilson ve Ashvini Sharma iletiyi gönderir (e-posta ashvinis), Peter Connelly için gönderilen kopya (e-posta peterc).Bu örnek ayrıca bir iletinin konu satırı belirtir.
EXEC master.dbo.xp_sendmail
@recipients=N'danw@Adventure-Works.com;ashvinis@Adventure-Works.com',
@message=N'The master database is full.',
@copy_recipients=N'peterc@Adventure-Works.com',
@subject=N'Master database status' ;
GO
C.sonuçlar gönderme
Aşağıdaki örnekte, sonuçlar gönderirsp_configureiçin çalışan Dan Wilson.
EXEC master.dbo.xp_sendmail
@recipients=N'danw@Adventure-Works.com',
@query = N'EXEC sp_configure' ;
GO
D.sonuçlar eklenmiş bir dosyayı gönderme
Aşağıdaki örnek sorgu sonuçlarını gönderirSELECT * FROM INFORMATION_SCHEMA.TABLESbir metin dosyası eki için çalışan Dan Wilson.Örneğin, posta ve ek önce görüntülenecek bir ileti için bir satır içerir.The @width parameter is used to prevent line breaks in the output lines.
EXEC master.dbo.xp_sendmail
@recipients = N'danw@Adventure-Works.com',
@query = N'SELECT * FROM INFORMATION_SCHEMA.TABLES',
@subject = N'SQL Server Report',
@message = N'The contents of INFORMATION_SCHEMA.TABLES:',
@attach_results = 'TRUE',
@width = 250 ;
E.7,990 Bayt karakterden uzun ileti gönderme
Aşağıdaki örnek, 7,990 bayt karakterden daha uzun bir ileti göndermek gösterilmiştir.Çünkümessageuzunluğu, sınırlı birVARCHAR(less Row overhead, AS are all saklı yordam Parameters), bu örnek yazar uzun ileti, bir tek metin sütun. açılan genel geçici tabloyaBu geçici tablo içeriğini kullanarak posta sonra gönderilen@queryparametre.
CREATE TABLE ##mail_body(c1 NVARCHAR(4000)) ;
DECLARE @cmd VARCHAR(56) ;
INSERT ##mail_body(c1)
VALUES ('Put your long message here.') ;
SET @cmd = 'SELECT c1 FROM ##mail_body' ;
EXEC master.dbo.xp_sendmail
@recipients = 'danw@Adventure-Works.com',
@query = @cmd,
@no_header= 'TRUE' ;
DROP TABLE ##mail_body ;