Slanje mailova korišćenjem Database Mail komponente

Objavljeno: 26-03-2014 | Autor: Miloš Milenković | Kategorija: Administracija, Alati, Management Studio, T-SQL

Ознаке:

0

Database Mail je SQL Server komponenta koja omogućava developerima i administratorima slanje e-mail poruka iz SQL Server Database Engine-a. Primarna upotreba ove komponente bi trebalo da bude slanje raznih obaveštenja administratorima (u slučaju da dođe do neke greške, opterećenja ili zagušenja na serveru i sl.), ali se može koristiti i za slanje rezultata upita, obaveštavanje developera da se izvršio neki triger itd.

Ostvaruje se korišćenjem sistemske stored procedure sp_send_dbmail. Pre poziva stored procedure, potrebno je napraviti Database Mail nalog i profil koji se kasnije koriste za slanje maila. Oni sadrži podatke kao što su naziv mail servera i email adresa sa koje se šalje mail.

Kreiramo ih sledećim skriptom:

-- dodavanje naloga
EXECUTE msdb.dbo.sysmail_add_account_sp
    @account_name = 'KefaloNalog',
    @email_address = 'DBMail@sql-kefalo.net',
    @display_name = 'Kefalo DBMail',
    @mailserver_name = 'mail.sql-kefalo.net';

-- dodavanje profila
EXECUTE msdb.dbo.sysmail_add_profile_sp
    @profile_name = 'KefaloProfile' ;

-- povezivanje naloga i profila
EXECUTE msdb.dbo.sysmail_add_profileaccount_sp
    @profile_name = 'KefaloProfile',
    @account_name = 'KefaloAccount',
    @sequence_number = 1 ;

Da bi se slanje mailova omogućilo, osim kreiranja naloga i profila, neophodno je uključiti Database Mail komponentu.

To postižemo izvršavanjem skripta:

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

Sada smo spremni da pošaljemo email. Ovo je najjednostavniji poziv pomenute stored procedure:

EXEC msdb.dbo.sp_send_dbmail  @profile_name = 'KefaloProfile',
                                  @recipients = 'redakcija@sql-kefalo.net',
                                  @body = 'Zdravo Strumpfovi!',
                                  @body_format = 'HTML',
                                  @subject = 'Strumpfovski pozdrav'

Parametri koje smo iskoristili su prilično jasni:

  • @profile_name je profil koji smo kreirali i koji koristimo za slanje poruke
  • @recipients je lista primalaca poruke i može se navesti jedna ili više mail adresa koje odvajamo tačkom zarez
  • @body je sadržaj tela email poruke
  • @body_format je tip formata tela email poruke i može biti ‘HTML’ ili ‘TEXT’ (ukoliko se kao vrednost parametra stavi ‘HTML’, @body parametar može da sadrži i HTML tagove pored običnog teksta)@subject je tekst koji se prikazuje u subject liniji email poruke

Prilikom slanja email poruke mogu se proslediti brojni parametri koje nismo spomenuli, a neki od najčešće korišćenih su:

  • @copy_recipients – lista primalaca koji će se naći u CC liniji email poruke
  • @blind_copy_recipients – lista primalaca koji će dobiti poruku ali drugi primaoci to neće videti (BCC)
  • @file_attachments – lista dokumenta koji se šalju kao prilog uz poruku (navodi se putanja dokumenta na disku)
  • @importance – označava važnost poruke (može imati vrednosti: ‘low’, ‘normal’ ili ‘high’)

Na kraju, evo jednog skripta kojim se može proveriti koji su mailovi poslati sa nekog profila i koji im je status:

SELECT sent_date, recipients, subject, body, sent_status
FROM msdb..sysmail_allitems sai
INNER JOIN msdb..sysmail_profile sp ON sai.profile_id = sp.profile_id
WHERE sp.name = 'KefaloProfile'