sql >> Database >  >> RDS >> Sqlserver

Databasemail inschakelen in SQL Server (T-SQL)

SQL Server heeft een database-mailoptie die u kunt gebruiken om e-mail te verzenden vanaf de databaseserver.

U kunt bijvoorbeeld meldingen ontvangen wanneer SQL Server Agent-taken worden uitgevoerd of mislukken, of wanneer er een zeer ernstige fout is, enz.

Als Database Mail niet is geconfigureerd

In SQL Server wordt e-mail verzonden door het uitvoeren van de sp_send_dbmail opgeslagen procedure in de msdb database.

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 veronderstelt echter dat SQL Server is geconfigureerd om e-mail te verzenden.

Als u e-mail probeert te verzenden vanaf SQL Server, maar u krijgt een foutmelding zoals de volgende, betekent dit dat u momenteel geen Database Mail hebt ingeschakeld.

Msg 15281, Level 16, State 1, Procedure msdb.dbo.sp_send_dbmail, Line 0
SQL Server blocked access to procedure 'dbo.sp_send_dbmail' of component 'Database Mail XPs' because this component is turned off as part of the security configuration for this server. A system administrator can enable the use of 'Database Mail XPs' by using sp_configure. For more information about enabling 'Database Mail XPs', search for 'Database Mail XPs' in SQL Server Books Online.

Schakel Database Mail XP's in

Voordat u begint met het verzenden van e-mail vanaf de server, moet u ervoor zorgen dat Database Mail XP's is ingeschakeld.

Dit is vrij eenvoudig te doen (hoewel Microsoft aanbeveelt dat geavanceerde opties zoals deze alleen door een ervaren databasebeheerder of gecertificeerde SQL Server-technicus mogen worden gewijzigd).

Zo schakelt u Database Mail XP's in:

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

Resultaat:

Configuration option 'show advanced options' changed from 0 to 1. Run the RECONFIGURE statement to install.
Commands completed successfully.
Commands completed successfully.

Maak een e-mailaccount, profiel, enz.

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.

Als je dat eenmaal hebt gedaan, zou je e-mail moeten kunnen verzenden met de msdb.dbo.sp_send_dbmail opgeslagen procedure.


  1. Correct volgehouden berekende kolommen

  2. Sjabloonpatronen en -modificaties voor numerieke opmaak in PostgreSQL

  3. Top 10 methoden om ETL-prestaties te verbeteren met behulp van SSIS

  4. Hoe het n-de woord extraheren en woordexemplaren tellen in een MySQL-tekenreeks?