sql >> Databáze >  >> RDS >> Sqlserver

Jak odesílat e-maily ze serveru SQL (T-SQL)

SQL Server poskytuje možnost odesílat e-maily prostřednictvím řešení Database Mail.

Vlastní akt odesílání pošty se provádí pomocí sp_send_dbmail uložené procedury. Než však začnete odesílat e-maily ze serveru SQL Server, musíte povolit a nakonfigurovat Database Mail.

Můžete to udělat pomocí GUI SSMS nebo T-SQL.

Tento článek ukazuje, jak to udělat s T-SQL. Předpokládá, že Database Mail nebyla ve vašem systému nikdy povolena, a proto prochází kroky, které jsou součástí jejího povolení.

Pokud dáváte přednost použití GUI SSMS, přečtěte si část Jak nastavit databázovou poštu na serveru SQL Server (SSMS).

Krok 1:Povolte databázová pošta XP

První věc, kterou musíte udělat před odesláním jakékoli pošty ze serveru SQL Server, je povolit rozšířené uložené procedury Database Mail (Database Mail XPs). Ty jsou v msdb systémové databáze.

To také vyžaduje, aby bylo povoleno „zobrazit pokročilé možnosti“.

Tyto jsou ve výchozím nastavení zakázány. Pokud jste tedy databázovou poštu ve svém systému nikdy nepoužili, budete je muset povolit.

Zde je návod, jak povolit pokročilé možnosti a databázová pošta XP:

EXEC sp_configure 'show advanced options', '1';
RECONFIGURE
GO
EXEC sp_configure 'Database Mail XPs', 1;
RECONFIGURE
GO

Není potřeba restartovat SQL Server. Databázová pošta XP by nyní měla být dostupná k použití.

Společnost Microsoft ve skutečnosti doporučuje, aby pokročilé možnosti, jako je tato, měnil pouze zkušený správce databáze nebo certifikovaný technik SQL Server, ale pro účely tohoto článku předpokládám, že jste zkušený správce DB, který vám osvěžuje paměť 😉

V každém případě za účelem provedení sp_configure s oběma parametry ke změně možnosti konfigurace nebo ke spuštění RECONFIGURE musíte mít povoleno ALTER SETTINGS oprávnění na úrovni serveru. ALTER SETTINGS oprávnění je implicitně drženo sysadminem a serveradmin pevné role serveru.

Krok 2:Vytvořte e-mailový účet a profil

Databázová pošta je odesílána prostřednictvím profilu, nikoli přímo prostřednictvím uživatelského účtu.

Chcete-li odesílat e-maily pomocí Database Mail, musíte vytvořit účet Database Mail, profil Database Mail, přidat účet do profilu a poté udělit uživateli přístup k tomuto profilu. Uživatel musí být na msdb databáze.

Kód T-SQL k tomu by mohl vypadat nějak takto:

-- Switch to the msdb database
USE msdb;

-- Create a user on the msdb database
CREATE USER Marge FOR LOGIN Marge;

-- Create a Database Mail account  
EXECUTE msdb.dbo.sysmail_add_account_sp  
    @account_name = 'DB Admin',  
    @description = 'Mail account for admin emails.',  
    @email_address = '[email protected]',  
    @replyto_address = '[email protected]',  
    @display_name = 'DB Automated Mailer',  
    @mailserver_name = 'smtp.example.com',
    @port = 25;  
  
-- Create a Database Mail profile  
EXECUTE msdb.dbo.sysmail_add_profile_sp  
    @profile_name = 'DB Admin Profile',  
    @description = 'Profile for admin emails.';  
  
-- Add the account to the profile  
EXECUTE msdb.dbo.sysmail_add_profileaccount_sp  
    @profile_name = 'DB Admin Profile',  
    @account_name = 'DB Admin',  
    @sequence_number = 1;
  
-- Grant the msdb user access to the Database Mail profile
EXECUTE msdb.dbo.sysmail_add_principalprofile_sp
    @profile_name = 'DB Admin Profile',
    @principal_name = 'Marge',
    @is_default = 1;

Budete muset nahradit různé detaily svými vlastními. To také předpokládá, že zadáte poštovní server, který funguje, a že používáte správný port.

Všimněte si, že už jsem měl na svém serveru přihlašovací jméno s názvem Marge. Zde jsem vytvořil uživatele na msdb databáze pro toto přihlášení. V poslední části jsem tomuto uživateli udělil přístup k profilu, který jsem právě vytvořil.

V tomto příkladu jsem vytvořil jeden účet Database Mail a přidal jej do profilu. Pokud chcete, můžete do profilu přidat více účtů. To může být užitečné jako převzetí služeb při selhání při odesílání pošty. Pokud selže první účet, zkusí další a další atd.

Jakmile budete mít výše uvedený kód (s vlastními údaji), měli byste být schopni odesílat poštu.

Krok 3:Odeslání pošty

Jak již bylo zmíněno, skutečné odesílání pošty se provádí pomocí sp_send_dbmail uložené procedury.

Zde je příklad:

EXEC msdb.dbo.sp_send_dbmail  
    @profile_name = 'DB Admin Profile',  
    @recipients = '[email protected]',  
    @body = 'Your favorite SQL Server Agent job just failed',  
    @subject = 'SQL Server Agent Job: FAILED';

Jedná se o jednoduchý e-mail s úplnými základy, jako je příjemce, předmět, tělo e-mailu atd.

Pokud neurčíte profil, postup použije výchozí soukromý profil pro aktuálního uživatele. Pokud pro uživatele neexistuje žádný výchozí soukromý profil, použije výchozí veřejný profil pro msdb databáze. Pokud neexistuje žádný výchozí veřejný profil, zobrazí se chyba.

Další možnosti

sp_send_dbmail procedura přijímá mnohem více argumentů, než jaké jsem použil v tomto příkladu.

Zde je oficiální syntaxe sp_send_dbmail postup:

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 ]

Podrobné vysvětlení každého argumentu naleznete v dokumentaci společnosti Microsoft.

Databázová adresa pošty

Úplný seznam výukových programů pro poštu databáze najdete v části Výukové programy pro poštu databáze. To může být skvělá reference, protože každý výukový program se zabývá specifickou částí Database Mail.


  1. SQL Server Interní:Plán Caching Pt. II – Plány překompilování

  2. Zkopírujte data ze Salesforce na SQL Server pomocí Spectral Core

  3. Chyba SSMS 2016 při importu Azure SQL v12 bacpac:hlavní klíče bez hesla nejsou podporovány

  4. Jak mohu číst data ze šifrované databáze pomocí SQLiteAssetHelper?