sql >> Database >  >> RDS >> Sqlserver

E-mails verzenden vanuit SQL Server (T-SQL)

SQL Server biedt de mogelijkheid om e-mails te verzenden via de Database Mail-oplossing.

De daadwerkelijke handeling van het verzenden van e-mail wordt gedaan met de sp_send_dbmail opgeslagen procedure. Maar voordat u e-mails gaat verzenden vanuit SQL Server, moet u Database Mail inschakelen en configureren.

U kunt dit doen met de SSMS GUI of met T-SQL.

Dit artikel laat zien hoe u dit kunt doen met T-SQL. Het gaat ervan uit dat Database Mail nooit is ingeschakeld op uw systeem, en daarom doorloopt het de stappen die nodig zijn om het in te schakelen.

Als u liever de SSMS GUI gebruikt, raadpleegt u Databasemail instellen in SQL Server (SSMS).

Stap 1:Database Mail XP's inschakelen

Het eerste dat u moet doen voordat u e-mail vanuit SQL Server verzendt, is de uitgebreide opgeslagen procedures voor Database Mail (Database Mail XP's) inschakelen. Deze staan ​​in de msdb systeemdatabase.

Dit vereist ook dat "toon geavanceerde opties" zijn ingeschakeld.

Deze zijn standaard uitgeschakeld. Dus als je Database Mail nog nooit eerder op je systeem hebt gebruikt, moet je ze inschakelen.

Hier leest u hoe u geavanceerde opties en de Database Mail XP's inschakelt:

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

Het is niet nodig om SQL Server opnieuw te starten. De Database Mail XP's zouden nu beschikbaar moeten zijn voor gebruik.

Microsoft raadt eigenlijk aan dat geavanceerde opties zoals deze alleen worden gewijzigd door een ervaren databasebeheerder of gecertificeerde SQL Server-technicus, maar voor het doel van dit artikel ga ik ervan uit dat u een ervaren databasebeheerder bent die uw geheugen opfrist 😉

In ieder geval, om sp_configure . uit te voeren met beide parameters om een ​​configuratieoptie te wijzigen of om de RECONFIGURE . uit te voeren statement, moet u de ALTER SETTINGS . krijgen toestemming op serverniveau. De ALTER SETTINGS toestemming is impliciet in het bezit van de sysadmin en serveradmin vaste serverrollen.

Stap 2:maak een e-mailaccount en profiel aan

Database Mail wordt verzonden via een profiel, in plaats van rechtstreeks via een gebruikersaccount.

Om e-mail te verzenden met Database Mail, moet u een Database Mail-account en een Database Mail-profiel maken, het account aan het profiel toevoegen en vervolgens een gebruiker toegang verlenen tot dat profiel. De gebruiker moet zich op de msdb . bevinden database.

De T-SQL-code om dit te doen kan er ongeveer zo uitzien:

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

U moet de verschillende details vervangen door uw eigen details. Dit veronderstelt ook dat je een mailserver specificeert die werkt, en dat je de juiste poort gebruikt.

Merk op dat ik al een login had met de naam Marge op mijn server. Hier heb ik een gebruiker gemaakt op de msdb database voor die login. In het laatste deel heb ik die gebruiker toegang verleend tot het profiel dat ik zojuist heb gemaakt.

In dit voorbeeld heb ik één Database Mail-account gemaakt en aan het profiel toegevoegd. U kunt desgewenst meerdere accounts aan een profiel toevoegen. Dit kan handig zijn als een failover bij het verzenden van e-mail. Als het eerste account faalt, zal het het volgende proberen, en het volgende, enzovoort.

Zodra je de bovenstaande code hebt (met je eigen gegevens), zou je e-mail moeten kunnen verzenden.

Stap 3:E-mail verzenden

Zoals vermeld, wordt het daadwerkelijke verzenden van e-mail gedaan met de sp_send_dbmail opgeslagen procedure.

Hier is een voorbeeld:

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

Dit is een eenvoudige e-mail met de basisprincipes, zoals de ontvanger, de onderwerpregel, de hoofdtekst van de e-mail, enz.

Als u geen profiel opgeeft, gebruikt de procedure het standaard privéprofiel voor de huidige gebruiker. Als er geen standaard privéprofiel voor de gebruiker is, gebruikt deze het standaard openbare profiel voor de msdb databank. Als er geen standaard openbaar profiel is, krijg je een foutmelding.

Meer opties

De sp_send_dbmail procedure accepteert nogal wat meer argumenten dan wat ik in dit voorbeeld heb gebruikt.

Dit is de officiële syntaxis voor de 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 ]

Zie de documentatie van Microsoft voor een gedetailleerde uitleg van elk argument.

Database-e-mailreferentie

Zie Database Mail Tutorials voor een uitgebreide lijst met Database Mail Tutorials. Dit kan een goede referentie zijn, omdat elke tutorial een specifiek onderdeel van Database Mail behandelt.


  1. Hoe REGEXP werkt in MariaDB

  2. Reguliere expressie in PostgreSQL LIKE-clausule

  3. 6 functies om de dag, maand en jaar van een datum in SQL Server te krijgen

  4. PostgreSQL:Wijzig OWNER op alle tafels tegelijk in PostgreSQL