Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A következőkre vonatkozik:SQL Server
Azure SQL Managed Instance
E-mailt küld a megadott címzetteknek. Az üzenet tartalmazhat lekérdezési eredményhalmazt, fájlmellékleteket vagy mindkettőt. Ha a levelek sikeresen bekerülnek az Adatbázisposta üzenetsorba, sp_send_dbmail az üzenet visszaadja az mailitem_id üzenetet. Ez a tárolt eljárás az msdb adatbázisban található.
Transact-SQL szintaxis konvenciók
Szemantika
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 = ] N'subject' ]
[ , [ @body = ] N'body' ]
[ , [ @body_format = ] 'body_format' ]
[ , [ @importance = ] 'importance' ]
[ , [ @sensitivity = ] 'sensitivity' ]
[ , [ @file_attachments = ] N'attachment [ ; ...n ]' ]
[ , [ @query = ] N'query' ]
[ , [ @execute_query_database = ] 'execute_query_database' ]
[ , [ @attach_query_result_as_file = ] attach_query_result_as_file ]
[ , [ @query_attachment_filename = ] N'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 ]
[ ; ]
Arguments
[ @profile_name = ] 'profile_name'
Annak a profilnak a neve, amelyből az üzenetet el szeretné küldeni. A @profile_namesysname típusú, alapértelmezés szerint NULL. A @profile_name egy meglévő adatbázis-levelezési profil nevének kell lennie. Ha nincs megadva @profile_name , sp_send_dbmail az aktuális felhasználó alapértelmezett privát profilját használja. Ha a felhasználó nem rendelkezik alapértelmezett privát profillal, sp_send_dbmail az adatbázis alapértelmezett nyilvános profilját msdb használja. Ha a felhasználó nem rendelkezik alapértelmezett privát profillal, és nincs alapértelmezett nyilvános profil az adatbázishoz, @profile_name kell megadni.
[ @recipients = ] "címzettek"
Pontosvesszővel tagolt e-mail-címek listája az üzenet elküldéséhez. A címzettek listája varchar(max) típusú. Bár ez a paraméter nem kötelező, a @recipients, @copy_recipients vagy @blind_copy_recipients legalább egyikét meg kell adni, vagy sp_send_dbmail hibát ad vissza.
[ @copy_recipients = ] 'copy_recipients'
Pontosvesszővel tagolt e-mail-címek listája, amelybe az üzenetet bemásolhatja. A másolási címzettek listája varchar(max) típusú. Bár ez a paraméter nem kötelező, a @recipients, @copy_recipients vagy @blind_copy_recipients legalább egyikét meg kell adni, vagy sp_send_dbmail hibát ad vissza.
[ @blind_copy_recipients = ] 'blind_copy_recipients'
Pontosvesszővel tagolt lista az e-mail címekről, hogy vak szén-dioxid másolja az üzenetet. A vakmásolat címzettjeinek listája varchar(max) típusú. Bár ez a paraméter nem kötelező, a @recipients, @copy_recipients vagy @blind_copy_recipients legalább egyikét meg kell adni, vagy sp_send_dbmail hibát ad vissza.
[ @from_address = ] 'from_address'
Az e-mail "feladójának" értéke. Ez egy választható paraméter a levelezési profil beállításainak felülbírálásához. Ez a paraméter varchar(max) típusú. Az SMTP biztonsági beállításai határozzák meg, hogy elfogadják-e ezeket a felülbírálásokat. Ha nincs megadva paraméter, az alapértelmezett érték a következő NULL.
[ @reply_to = ] 'reply_to'
Az e-mail "válasz a címre" értéke. Érvényes értékként csak egy e-mail-címet fogad el. Ez egy választható paraméter a levelezési profil beállításainak felülbírálásához. Ez a paraméter varchar(max) típusú. Az SMTP biztonsági beállításai határozzák meg, hogy elfogadják-e ezeket a felülbírálásokat. Ha nincs megadva paraméter, az alapértelmezett érték a következő NULL.
[ @subject = ] N'subject'
Az e-mail tárgya. A tárgy típusa nvarchar(255). Ha nincs megadva tárgy, az alapértelmezett érték az "SQL Server-üzenet".
[ @body = ] N'body'
Az e-mail törzse. Az üzenet törzse nvarchar(max) típusú, alapértelmezett értéke NULL: .
[ @body_format = ] 'body_format'
Az üzenet törzsének formátuma. A paraméter varchar(20) típusú, alapértelmezés szerint NULL. Ha meg van adva, a kimenő üzenet fejlécei úgy vannak beállítva, hogy az üzenet törzse a megadott formátumot tartalmazza. A paraméter a következő értékek egyikét tartalmazhatja:
- SZÖVEG (alapértelmezett)
- HTML
[ @importance = ] "fontosság"
Az üzenet fontossága. A paraméter varchar(6) típusú. A paraméter a következő értékek egyikét tartalmazhatja:
Low-
Normal(alapértelmezett) High
[ @sensitivity = ] "bizalmasság"
Az üzenet bizalmassága. A paraméter varchar(12) típusú. A paraméter a következő értékek egyikét tartalmazhatja:
-
Normal(alapértelmezett) PersonalPrivateConfidential
[ @file_attachments = ] N'file_attachments'
Az e-mailhez csatolandó fájlnevek pontosvesszővel tagolt listája. A listában szereplő fájlokat abszolút elérési útként kell megadni. A mellékletek listája nvarchar(max) típusú. Alapértelmezés szerint a Database Mail fájlonként 1 MB-ra korlátozza a fájlmellékleteket.
Fontos
Ez a paraméter nem érhető el a felügyelt Azure SQL-példányban, mert nem fér hozzá a helyi fájlrendszerhez.
[ @query = ] N'query'
Végrehajtandó lekérdezés. A lekérdezés eredményei fájlként csatolhatók, vagy belefoglalhatók az e-mail törzsébe. A lekérdezés nvarchar(max) típusú, és bármilyen érvényes Transact-SQL utasítást tartalmazhat. A lekérdezés végrehajtása külön munkamenetben történik, így a szkripthívás sp_send_dbmail helyi változói nem érhetők el a lekérdezés számára.
A @query paraméter használatakor a végrehajtást végrehajtó sp_send_dbmail tagnak egyéniként kell kapcsolódnia, nem csoport részeként, függetlenül attól, hogy a Microsoft Entra-azonosító (korábbi nevén Azure Active Directory) vagy a Windows Active Directory-csoport. Az SQL Server-bejelentkezések, a Windows-identitások és a Microsoft Entra-identitások végrehajthatják a lekérdezést, de a csoporttagok az Azure SQL Managed Instance megszemélyesítése és az EXECUTE AS korlátozásai miatt nem tudják végrehajtani.
[ @execute_query_database = ] 'execute_query_database'
Az az adatbázis-környezet, amelyen belül a tárolt eljárás futtatja a lekérdezést. A paraméter sysname típusú, az aktuális adatbázis alapértelmezett értékével. Ez a paraméter csak akkor alkalmazható, ha @query van megadva.
[ @attach_query_result_as_file = ] attach_query_result_as_file
Megadja, hogy a lekérdezés eredményhalmaza csatolt fájlként legyen-e visszaadva.
@attach_query_result_as_filebit típusú, alapértelmezés szerint 0.
Ha az érték az 0, a lekérdezési eredmények az e-mail törzsébe kerülnek, a @body paraméter tartalma után. Ha az érték az 1, a rendszer mellékletként adja vissza az eredményeket. Ez a paraméter csak akkor alkalmazható, ha @query van megadva.
[ @query_attachment_filename = ] N'query_attachment_filename'
Megadja a lekérdezés mellékletének eredményhalmazához használandó fájlnevet.
@query_attachment_filenamenvarchar(255) típusú, alapértelmezett értéke NULL. Ezt a paramétert a rendszer figyelmen kívül hagyja, ha @attach_query_result_as_file.0 Ha @attach_query_result_as_file van 1 , és ez a paraméter, a NULLDatabase Mail tetszőleges fájlnevet hoz létre.
[ @query_result_header = ] query_result_header
Megadja, hogy a lekérdezés eredményei tartalmaznak-e oszlopfejléceket. A query_result_header érték bit típusú. Ha az érték az, a 1lekérdezés eredményei oszlopfejléceket tartalmaznak. Ha az érték az 0, a lekérdezés eredményei nem tartalmaznak oszlopfejléceket. Ez a paraméter alapértelmezés szerint a .1 Ez a paraméter csak akkor alkalmazható, ha @query van megadva.
A @query_result_header beállításakor0 és a @query_no_truncate1beállításakor a következő hiba fordulhat elő:
Msg 22050, Level 16, State 1, Line 12: Failed to initialize sqlcmd library with error number -2147024809.
[ @query_result_width = ] query_result_width
A lekérdezés eredményeinek formázásához használt vonalszélesség karakterekben. A @query_result_widthint típusú, alapértelmezés szerint 256. A megadott értéknek az és a 32767közötti 10 értéknek kell lennie. Ez a paraméter csak akkor alkalmazható, ha @query van megadva.
[ @query_result_separator = ] 'query_result_separator'
A lekérdezés kimenetében lévő oszlopok elválasztásához használt karakter. Az elválasztó karakter(1) típusú. Alapértelmezés szerint a (szóköz) értékre van kapcsolva ' ' .
[ @exclude_query_output = ] exclude_query_output
Megadja, hogy a lekérdezés végrehajtásának kimenetét adja-e vissza az e-mailben.
@exclude_query_outputbit, alapértelmezés szerint 0. Ha ez a paraméter, 0a sp_send_dbmail tárolt eljárás végrehajtása kinyomtatja a lekérdezés végrehajtásának eredményeként visszaadott üzenetet a konzolon. Ha ez a paraméter, 1a sp_send_dbmail tárolt eljárás végrehajtása nem nyomtatja ki a lekérdezésvégrehajtási üzeneteket a konzolon.
[ @append_query_error = ] append_query_error
Megadja, hogy az e-mailt akkor küldi-e el, amikor hiba jelenik meg a @query argumentumban megadott lekérdezésből.
@append_query_errorbit, alapértelmezés szerint 0. Ha ez a paraméter, 1a Database Mail elküldi az e-mailt, és tartalmazza a lekérdezési hibaüzenetet az e-mail törzsében. Ha ez a paraméter, a 0Database Mail nem küldi el az e-mailt, és sp_send_dbmail a sikertelenséget jelző visszatérési kóddal 1végződik.
[ @query_no_truncate = ] query_no_truncate
Megadja, hogy a lekérdezést olyan beállítással kell-e végrehajtani, amely megakadályozza a nagy változóhosszúságú adattípusok (varchar(max), nvarchar(max), varbinary(max), xml, text, ntext, image és felhasználó által definiált adattípusok csonkolását. Ha be van állítva, a lekérdezés eredményei nem tartalmaznak oszlopfejléceket. A @query_no_truncateérték bit típusú. Ha az érték meg van 0 adva, vagy nincs megadva, a lekérdezés oszlopai 256 karakterre csonkulnak. Ha az érték az 1, a lekérdezés oszlopai nem csonkulnak. Ez a paraméter alapértelmezés szerint a .0
Megjegyzés:
Nagy mennyiségű adat használata esetén a @query_no_truncate beállítás további erőforrásokat használ fel, és lelassíthatja a kiszolgáló teljesítményét.
[ @query_result_no_padding = ] query_result_no_padding
A típus bit. Az alapértelmezett érték a 0. Ha be 1van állítva, a lekérdezés eredményei nem lesznek kipárnázva, ami csökkentheti a fájlméretet. Ha a @query_result_width paramétert 1 állítja @query_result_no_padding be, a @query_result_no_padding paraméter felülírja a @query_result_width paramétert.
Ebben az esetben nem történik hiba.
A @query_no_truncate @query_result_no_padding1 paraméterének beállításakor és megadásakor a következő hiba léphet fel:
Msg 22050, Level 16, State 1, Line 0: Failed to execute the query because the @query_result_no_append and @query_no_truncate options are mutually exclusive.
Ha beállítja a @query_result_no_padding1, és beállítja a @query_no_truncate paramétert, hibaüzenet jelenik meg.
[ @mailitem_id = ] mailitem_id [ OUTPUT ]
Az opcionális kimeneti paraméter az mailitem_id üzenet értékét adja vissza.
@mailitem_idint típusú.
Kódértékek visszaadása
A sikerességet jelző visszatérési 0 kód. Bármely más érték hibát jelent. A sikertelen utasítás hibakódja a @@ERROR változóban van tárolva.
Eredményhalmaz
A sikeresség esetén a "Levelek üzenetsorba kerül" üzenetet adja vissza.
Megjegyzések
Használat előtt engedélyezni kell az Adatbázisposta szolgáltatást az Adatbázisposta konfigurációs varázslóval vagy sp_configure.
sysmail_stop_sp leállítja a Database Mail szolgáltatást a külső program által használt Service Broker-objektumok leállításával.
sp_send_dbmail továbbra is fogadja a leveleket, ha a Database Mail használata sysmail_stop_spleáll. A Database Mail elindításához használja a következőt sysmail_start_sp: .
Ha nincs megadva @profile, sp_send_dbmail egy alapértelmezett profilt használ. Ha az e-mailt küldő felhasználó alapértelmezett privát profillal rendelkezik, a Database Mail ezt a profilt használja. Ha a felhasználó nem rendelkezik alapértelmezett privát profillal, sp_send_dbmail az alapértelmezett nyilvános profilt használja. Ha a felhasználónak nincs alapértelmezett privát profilja, és nincs alapértelmezett nyilvános profilja, sp_send_dbmail hibát ad vissza.
sp_send_dbmail nem támogatja a tartalom nélküli e-mail üzeneteket. E-mail küldéséhez meg kell adnia legalább egy @body, @query, @file_attachments vagy @subject.
sp_send_dbmail Ellenkező esetben hibát ad vissza.
A Database Mail az SQL Server szolgáltatásfiókjának biztonsági környezetében fut. Ezért az SQL Server-hitelesítéssel hitelesített felhasználók nem csatolhatnak fájlokat @file_attachments használatával. A Windows nem teszi lehetővé, hogy az SQL Server hitelesítő adatokat adjon meg egy távoli számítógépről egy másik távoli számítógépre. Ezért előfordulhat, hogy a Database Mail nem tud fájlokat csatolni egy hálózati megosztásból olyan esetekben, amikor a parancs az SQL Server által futtatott számítógéptől eltérő számítógépről fut.
Ha @query és @file_attachments is meg van adva, és a fájl nem található, a lekérdezés továbbra is végrehajtásra kerül, de a rendszer nem küldi el az e-mailt.
Ha egy lekérdezés meg van adva, az eredményhalmaz beágyazott szövegként lesz formázva. Az eredmény bináris adatai hexadecimális formátumban lesznek elküldve.
A @recipients, @copy_recipients és @blind_copy_recipients paraméterek pontosvesszőkkel tagolt e-mail-címek. Legalább egy paramétert meg kell adni, vagy sp_send_dbmail hibát ad vissza.
Tranzakciókörnyezet nélkül történő sp_send_dbmail végrehajtáskor a Database Mail elindítja és véglegesíti az implicit tranzakciót. Ha egy meglévő tranzakcióból hajt végre sp_send_dbmail , a Database Mail a felhasználóra támaszkodik a módosítások véglegesítésére vagy visszaállítására. Nem indít el belső tranzakciót.
Permissions
Hajtsa végre az sp_send_dbmail alapértelmezett engedélyeket az adatbázis DatabaseMailUserRole adatbázisszerepkörének minden tagjára msdb . Ha azonban az üzenetet küldő felhasználó nem rendelkezik engedéllyel a profil használatára a kéréshez, hibaüzenetet ad vissza, sp_send_dbmail és nem küldi el az üzenetet.
Példák
A. E-mail küldése
Ez a példa egy e-mail üzenetet küld a barátjának az e-mail cím használatával myfriend@adventure-works.com. Az üzenet tárgya Automated Success Message. Az üzenet törzse tartalmazza a mondatot The stored procedure finished successfully.
EXECUTE msdb.dbo.sp_send_dbmail
@profile_name = 'Adventure Works Administrator',
@recipients = 'yourfriend@adventure-works.com',
@body = 'The stored procedure finished successfully.',
@subject = 'Automated Success Message';
B. E-mail küldése lekérdezés eredményeivel
Ez a példa egy e-mail üzenetet küld a barátjának az e-mail cím használatával yourfriend@adventure-works.com. Az üzenet tárgya Work Order Count, és végrehajt egy lekérdezést, amely a 2022. április 30-a után kevesebb mint két nappal rendelkező munkarendelések DueDate számát jeleníti meg. A Database Mail szövegfájlként csatolja az eredményt.
EXECUTE msdb.dbo.sp_send_dbmail
@profile_name = 'Adventure Works Administrator',
@recipients = 'yourfriend@adventure-works.com',
@query = 'SELECT COUNT(*) FROM AdventureWorks2022.Production.WorkOrder
WHERE DueDate > ''2022-04-30''
AND DATEDIFF(dd, ''2022-04-30'', DueDate) < 2', @subject = 'Work Order Count', @attach_query_result_as_file = 1;
C. HTML-alapú e-mail küldése
Ez a példa egy e-mail üzenetet küld a barátjának az e-mail cím használatával yourfriend@adventure-works.com. Az üzenet tárgya Work Order Listegy HTML-dokumentum, amely 2022. április 30-tól kevesebb mint két nappal a munkarendeléseket DueDate jeleníti meg. A Database Mail HTML formátumban küldi el az üzenetet.
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 AdventureWorks.Production.WorkOrder AS wo
INNER JOIN AdventureWorks.Production.Product AS p
ON wo.ProductID = p.ProductID
WHERE DueDate > '2022-04-30'
AND DATEDIFF(dd, '2022-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>';
EXECUTE msdb.dbo.sp_send_dbmail
@recipients = 'yourfriend@adventure-works.com',
@subject = 'Work Order List',
@body = @tableHTML,
@body_format = 'HTML';