sql >> Database teknologi >  >> RDS >> Sqlserver

Sådan sender du e-mails fra SQL Server (T-SQL)

SQL Server giver mulighed for at sende e-mails via sin Database Mail-løsning.

Selve handlingen med at sende mail udføres med sp_send_dbmail gemt procedure. Men før du begynder at sende e-mails fra SQL Server, skal du aktivere og konfigurere Database Mail.

Du kan gøre dette med SSMS GUI eller med T-SQL.

Denne artikel viser, hvordan man gør det med T-SQL. Den antager, at Database Mail aldrig er blevet aktiveret på dit system, og derfor gennemgår den de trin, der er involveret i at aktivere den.

Hvis du foretrækker at bruge SSMS GUI'et, se Sådan konfigurerer du databasemail i SQL Server (SSMS).

Trin 1:Aktiver Database Mail XPs

Den første ting, du skal gøre, før du sender nogen e-mail fra SQL Server, er at aktivere Database Mails udvidede lagrede procedurer (Database Mail XP'er). Disse er i msdb systemdatabase.

Dette kræver også, at "vis avancerede indstillinger" er aktiveret.

Disse er deaktiveret som standard. Så hvis du aldrig har brugt Database Mail på dit system før, så bliver du nødt til at aktivere dem.

Sådan aktiverer du avancerede muligheder og Database Mail XPs:

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

Der er ingen grund til at genstarte SQL Server. Database Mail XP'erne skulle nu være tilgængelige til brug.

Microsoft anbefaler faktisk, at avancerede muligheder som denne kun bør ændres af en erfaren databaseadministrator eller certificeret SQL Server-tekniker, men i forbindelse med denne artikel antager jeg, at du er en erfaren DB-administrator, som genopfrisker din hukommelse 😉

Under alle omstændigheder for at udføre sp_configure med begge parametre for at ændre en konfigurationsmulighed eller for at køre RECONFIGURE erklæring, skal du have tildelt ALTER SETTINGS tilladelse på serverniveau. ALTER SETTINGS tilladelse er implicit i besiddelse af sysadmin og serveradmin faste serverroller.

Trin 2:Opret en mailkonto og profil

Databasemail sendes via en profil i stedet for en brugerkonto direkte.

For at sende e-mail med Database Mail skal du oprette en Database Mail-konto, en Database Mail-profil, tilføje kontoen til profilen og derefter give en bruger adgang til denne profil. Brugeren skal være på msdb database.

T-SQL-koden til at gøre dette kunne se sådan ud:

-- 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;

Du bliver nødt til at erstatte de forskellige detaljer med dine egne. Dette forudsætter også, at du angiver en mailserver, der virker, og at du bruger den korrekte port.

Bemærk, at jeg allerede havde et login kaldet Marge på min server. Her oprettede jeg en bruger på msdb database for det pågældende login. Så i den sidste del gav jeg brugeren adgang til den profil, jeg lige har oprettet.

I dette eksempel oprettede jeg en Database Mail-konto og føjede den til profilen. Du kan tilføje flere konti til en profil, hvis du vil. Dette kan være nyttigt som en failover, når du sender mail. Hvis den første konto fejler, vil den prøve den næste, og den næste, og så videre.

Når du har fået ovenstående kode (med dine egne detaljer), bør du være i stand til at sende mail.

Trin 3:Send mail

Som nævnt sker selve afsendelsen af ​​mail med sp_send_dbmail gemt procedure.

Her er et eksempel:

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';

Dette er en simpel e-mail med de nøgne basale funktioner såsom modtageren, emnelinjen, e-mailens brødtekst osv.

Hvis du ikke angiver en profil, vil proceduren bruge den private standardprofil for den aktuelle bruger. Hvis der ikke er nogen privat standardprofil for brugeren, vil den bruge den offentlige standardprofil for msdb database. Hvis der ikke er nogen offentlig standardprofil, får du en fejl.

Flere muligheder

sp_send_dbmail procedure accepterer en del flere argumenter end det, jeg har brugt i dette eksempel.

Her er den officielle syntaks for sp_send_dbmail procedure:

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 ]

Se Microsofts dokumentation for en detaljeret forklaring af hvert argument.

Database-mailreference

Se Database Mail Selvstudier for en omfattende liste over Database Mail Selvstudier. Dette kan være en god reference, fordi hver tutorial omhandler en specifik del af Database Mail.


  1. MySQL JOIN med LIMIT 1 på sammenføjet bord

  2. Formater et tal som en procentdel i Oracle

  3. Split funktion i oracle til kommaseparerede værdier med automatisk sekvens

  4. Postgres:Distinkt, men kun for én kolonne