xp_sendmail (Transact-SQL)

Bir sorgu sonuç kümesi ek, belirtilen alıcılara içerebilen bir e-posta iletisi gönderir.Bu genişletilmiş saklı yordam SQL Mail iletiyi göndermek için kullanır.

Not

Bu özellik Microsoft SQL Server'ın ilerideki bir sürümünde kaldırılacaktır. Yeni geliştirme işlerinde bu özelliği kullanmaktan kaçının ve bu özelliği kullanmakta olan uygulamalarda değişiklik yapmayı planlayın.Posta göndermek için SQL Serverkullanın Veritabanı posta.

Konu bağlantısı simgesiTransact-SQL sözdizimi kuralları

Sözdizimi

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] '
    Posta alıcıları noktalı virgülle ayrılmış listesi verilmiştir.

  • [ @ Message = ] 'message'
    Gönderilecek ileti gövdesi olur.messageen çok 8.000 bayt olabilir.

  • [ @ Sorgu =] 'query'
    Geçerli bir SQL Server sorgu, sonucu gönderilen posta.xp_sendmail ilişkili bir bağlantı için kullandığı query parametresi.query SQL Mail tarafından yapılan bağlantı veren istemci tarafından tutulan kilitlerin tarafından engellenen değil xp_sendmail isteği.Bu xp_sendmail Tetikleyicileri içinde kullanmak daha kolay.querydeyim, ancak için başvuramaz eklenen ve Silinmiş mantıksal bu tablolar yalnızca tetikleyici içinde olduğu için tabloları.query* *en çok 8.000 bayt olabilir.

  • [ @attachments= ' attachments ;... n] '
    Posta iletisine eklemek için dosyaları noktalı virgülle ayrılmış bir listesi verilmiştir.Kullanırsanız, @ sorgu parametresi, @ attach_results true, @ ekleri parametresi, posta iletisine eklemek için tek bir dosya belirtebilirsiniz.Bu durumda, birden fazla dosya göndermek için çalıştırmalısınız xp_sendmail bağlı her dosya için ayrı ayrı.

  • [ @ copy_recipients = ' copy_recipients ;... n] '
    Noktalı virgülle ayrılmış listesi bir kopyasını posta alıcıları tanımlamak için kullanılır.

  • [ @ blind_copy_recipients = 'blind_copy_recipients;... n] '
    İsteğe bağlı bir noktalı virgülle ayrılmış listesi posta kör bir kopyasını alıcılarını tanımlamak için kullanılır.

  • [ Konu = ] 'subject'
    Postanın konusu belirten bir parametre.subject belirtilmezse,SQL Server ileti" varsayılandır.

  • [ @type = ] 'type'
    ileti türü giriş MAPI posta tanımını temel alır:

    IP[ M|C ].Vendorname.subclass

    type , null, xp_sendmail ileti türü kullanır IPM.İleti türleri ile başlayan IPM posta istemci Gelen Kutusu'nda görünür ve bulunamadı veya okuma tarafından xp_findnextmsg.İleti türleri ile başlayan IPC istemci posta gelen kutusunda görüntülenmez ve gerekir bulundu ve ayarlayarak okuma yapılabilir type parametresi.Varsayılan değer null olur.SQL Posta iletisi türlerini destekleyen IPM ve IPC.

  • [ @ attach_results =] 'attach_value'
    Olan sonuç kümesi , bir sorgu belirten isteğe bağlı bir parametre Mail'e eklenen yerine ekli dosya olarak posta ile gönderilmelidir.@ Ekleri boş değil ve @ attach_results true, ilk dosya adı olan attachments sonuçlardosya adı olarak kullanılır.@ Ekleri NULL, .txt uzantılı bir dosya adı oluşturulur.Başka bir deyişle sonuç kümesi iletiye eklenir false varsayılan değerdir.

  • [ @ no_output =] 'output_value'
    Posta gönderir, ancak herhangi bir çıktı posta gönderilen istemci oturum döndürmez, isteğe bağlı bir parametre olduğu.Varsayılan istemci oturum anlamına gelir, yanlış SQL Server aldığı çıktı.

  • [ @ no_header =] 'header_value'
    Sorgu sonuçlar posta ile gönderir, ancak sorgu sonuçlarile sütun başlık bilgilerini göndermez, isteğe bağlı bir parametre olduğu.sütun başlık bilgilerini sorgu sonuçlargönderilir yani false varsayılan değerdir.

  • [ @ width =] width
    İsteğe bağlı bir parametre sorgu çıktı metninde Satır genişliğini ayarlıyor.Bu parametre olan aynı /w parametresi ISQL yardımcı programı.Uzun çıkış satır üretir sorguları için width ile attach_results Çıkış satır sonları çıktı satırları ortada olmadan göndermek içinVarsayılan genişliği 80 karakter olabilir.

  • [ ayırıcı =] 'separator'
    sütun- sonuç kümesiher sütun için ayırıcı dize .Varsayılan olarak, sütun-ayırıcı boş bir yer.sütun ayırıcı kullanımını daha kolay sonuç kümesi elektronik tablolar ve diğer uygulamalarda çözümlenmesi sağlar.Örneğin, separator ile attach_results Dosya virgülle ayrılmış değerler.

  • [ @ echo_error =] 'echo_value'
    DOĞRU olduğunda, neden olan sunucu iletileri yakalamak için SQL Mail veya DB-kitaplık hataların while sorguyu çalıştıran ve bunları bunları hata günlüğüyazma yerine, posta iletisi eklemek.Ayrıca, döndürülen/etkilenen satırların posta iletisine eklenen satır sayısı.

    Not

    Zaman echo_error true, xp_sendmail başarıyla gönderilen posta, 0 (başarılı) durumunu verir bile DB-kitaplık hataları veya iletileri karşılaştı veya sorgu sonuçlardöndürür.

  • [ @ set_user =] 'user'
    Sorgunun çalıştırılması gereken güvenlik bağlamını olur.Kullanıcı belirtilmezse, çalıştıran kullanıcı, varsayılan güvenlik bağlamını xp_sendmail.

  • [ @ dbuse =] 'database'
    Sorgunun çalıştırılması gereken veritabanı bağlamdır.Varsayılan kullanıcı ' % s'veritabanı varsayılan veritabanıiçinde yerleştirilir yani null ' dır.

Dönüş Kodu Değerleri

0 (başarılı) veya 1 (hata)

Sonuç Kümeleri

Başarılı olduğunda, xp_sendmail bir ileti verir.

Açıklamalar

SQL Mail oturum önce başlatılmış olması gerekir xp_sendmail çalıştırılır.Oturumları otomatik olarak veya ile başlatılabilir xp_startmail.küme SQL hakkında daha fazla bilgi için oturum otomatik olarak posta, bkz: Genişletilmiş MAPI posta profillerini yapılandırma.Destekleyen tüm kullanıcılar için bir SQL posta oturum SQL Server örnek, ancak yalnızca tek bir kullanıcı belirli bir saat gönderebilirsiniz bir ileti.Posta iletilerini otomatik olarak gönderen diğer kullanıcıların kendi açar ilk kullanıcının ileti gönderilinceye kadar bekleyin.

query Belirlendiğinde, xp_sendmail için oturum SQL Server bir istemci olarak çalıştırır belirtilen sorgu.SQL Posta için ayrı bir bağlantı yapar SQL Server; özgün istemci bağlantı veren olarak aynı bağlantıyı paylaşmak değil xp_sendmail.

Not

queryverilen istemci bağlantısı tarafından tutulan kilit tarafından engellenen xp_sendmail.Örneğin, tablo bir hareket içinde Güncelleştirmekte olduğunuz ve için bir tetikleyici oluşturursanız Seç-aynı girişiminde update satır olarak güncelleştirilmiş bilgileri query parametre, SQL Mail bağlantı özel kullanım kilidi tutulan ilk istemci bağlantısı satırda engellenir

xp_sendmail güvenlik bağlamında çalışan SQL Server.Geçerli bir kullanıcı xp_sendmail bir yöneticinin güvenlik bağlamında bir posta iletisi eki dosyalara erişebilirsiniz.Sistem yöneticileri dışındaki kullanıcıların erişmesi gereken, xp_sendmail ve güvenli olmayan ek dosyalara erişim dökülmelere istiyor, Sistem Yöneticisi çağıran bir saklı yordam oluşturabilirsiniz xp_sendmail ve gerekli işlevi, ancak hangi değil göstermek sağlar attachments parametresi.Bu saklı yordam tanımlanmalıdır ana veritabanı.Sistem Yöneticisi daha sonra saklı yordam üzerinde yürütmek izni gerekli kullanıcılara temel izni vermeden verir xp_sendmail yordam.

xp_sendmail bir ileti gönderir ve bir sorgu sonuç kümesi veya eki belirtilen alıcılar ve ilişkili bir bağlantı için kullandığı query parametresi.Sorgu SQL Mail tarafından yapılan bağlantı veren istemci tarafından tutulan kilitlerin tarafından engellenen değil xp_sendmail isteği.Bu xp_sendmail Tetikleyicileri içinde kullanmak daha kolay.querydeyim, ancak yalnızca bir tetikleyici içinde bulunan mantıksal eklenen ve silinen tablolar için başvuramaz.

Not

Çalıştırma girişimi erişim ihlaline neden olabilir xp_sendmail posta ve adres defteri olduğunda dosya paylaşımında MSSQLServer hizmet , yetersiz izinler nedeniyle erişilemiyor.

xp_sendmail tam olarak desteklemediği xml veri türü.Kullanan sorgular xml veri türü biçimlendirilmiş olmalıdır yanlış.Use Veritabanı posta e-posta içeren göndermek xml veri.

İzinler

Üyelik gerektiren sysadmin sabit sunucu rolüancak yürütme izinleri diğer kullanıcılara verilir.Ancak, güvenlik nedenleriyle, bu saklı yordam izinlerini üyelerine sınırlı öneririz sysadmin sabit sunucu rolü.

Örnekler

A.Tek bir kullanıcıya ileti gönderme

Aşağıdaki örnek, Dan Wilson kullanıcıya bir ileti gönderir (e-posta danw), master veritabanı 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ılara Dan Wilson ve Ashvini Sharma ileti gönderir (e-posta ashvinis), Peter Connelly gönderilen kopya (e-posta peterc).Bu örnek ayrıca 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çlargönderme

Aşağıdaki örnek sonuçlar gönderir sp_configure için Ramiz Wilson.

EXEC master.dbo.xp_sendmail 
    @recipients=N'danw@Adventure-Works.com',
    @query = N'EXEC sp_configure' ;
GO

D.sonuçlar eklenmiş dosya gönderme

Aşağıdaki örnek sorgu sonuçlar gönderir SELECT * FROM INFORMATION_SCHEMA.TABLES metin dosya eki için Ramiz Wilson.Örnek mektup ve eki önce görüntülenecek bir ileti için bir konu satırı içerir.@width Parametresi, çıktı satırları satır sonları önlemek için kullanılır

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 uzun ileti göndermek nasıl gösterir.Çünkü message uzunluğu için sınırlı bir VARCHAR (tüm saklı yordam parametreleri gibi daha az satır yükü,), bu örnek, bir tek metin sütunyapılan genel geçici tablo uzun bir ileti yazar.Bu geçici tablo içeriğini sonra posta kullanılarak gönderilen @query parametresi.

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 ;