L'invio di email con SQL Server è da sempre una delle funzionalità più gettonate dagli utenti. Le precedenti versioni di SQL Server avevano un servizio dedicato allo scopo denominato SQLMail che
non ha mai riscosso grande successo data la complessità di configurazione. Al contrario SQL Server 2005 offre un nuovo servizio integrato dal nome "Database Mail" in grado di aggiungere in modo semplice e intuitivo le funzionalità di posta elettronica al motore di database. In questo articolo scopriremo come configurarlo e utilizzarlo.
Database Mail "step by step"
Ecco una lista delle principali caratteristiche del servizio:
- L'invio dei messaggi è delegato ad un processo esterno (un eseguibile situato nella directory "MSSQLBin" dal nome "DatabaseMail90.exe") allo scopo di ridurre il decremento delle performance del database durante gli invii.
- Il servizio è configurabile con profili e account multipli, i quali possono appoggiarsi a più server SMTP per l'invio dei messaggi. In caso di indisponibilità di un server SMTP SQL Server passerà a quello successivo e così via. Questo incrementa la disponibilità di Database Mail.
- I messaggi sono gestiti tramite code. Questo implica che se il processo esterno che si occupa dell'invio fallisce, SQL Server continuerà ad accodare i messaggi di posta, inviandoli non appena il processo sarà ripristinato.
- L'attività del servizio è tracciata sui files di log di SQL Server, in questo modo il DBA può monitorare ogni
aspetto del mailing.
A differenza del predecessore SQL Mail, Database Mail non usa client MAPI/OUTLOOK per inviare i messaggi di posta elettronica.
Abilitare Database mail
Per motivi di sicurezza Database Mail in SQL Server 2005 è inizialmente disabilitato. Il DBA deve quindi prendersi carico dell'attività di abilitazione che può essere svolta con strumenti differenti: SQL Server Management Studio (SSMS), SQL Server Surface Area Configuration (SSSAC) oppure T-SQL. Negli screenshots sottostanti sono mostrati i possibili percorsi:
Listato 1. Abilitare Database Mail via T-SQL
sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
sp_configure 'Database Mail XPs', 1; -- 0 disabilito , 1 abilito il servizio
GO
RECONFIGURE
GO
Configurare Database mail
Una volta abilitato il servizio, dobbiamo configurarlo. Questa attività può essere svolta tramite wizards oppure via T-SQL. Seguendo la prima strada è sufficiente aprire SSMS, sfogliare il nodo Gestione>Posta Elettronica e Database, quindi premere il tasto destro del mouse e cliccare sulla voce di menu: Configura Posta Elettronica e Database (vedi figura 1). Fatto questo si aprirà un menu con diverse opzioni, utili sia nella configurazione, sia nella gestione della Posta Elettronica e Database. Qui sotto gli screenshots relativi all'installazione della Posta Elettronica e Database, cioè la prima opzione della figura 3.
Dopo aver svolto queste operazioni è possibile testare l'invio di email di prova, per farlo è sufficiente cliccare sulla voce di menu "Invio email di prova" come mostrato in figura 1.
Tutte le operazioni guidate di configurazione possono essere svolte via T-SQL con l'ausilio di procedure di sistema che risiedono nel database msdb. Con sysmail_add_account_sp creiamo un nuovo account di posta elettronica con relativo server SMTP:
Listato 2. Creazione un account email con sysmail_add_account_sp
EXECUTE msdb.dbo.sysmail_add_account_sp
@account_name = 'Html.it',
@description = 'Html.it Mail.',
@email_address = 'l.milan@Html.it',
@display_name = 'Luca Milan',
@mailserver_name = 'smtp.html.it'
Con la procedura sysmail_add_profile_sp creiamo un nuovo profilo Database Mail:
Listato 3. Creazione di un nuovo profilo con sysmail_add_profile_sp
EXECUTE msdb.dbo.sysmail_add_profile_sp
@profile_name = 'Html.it',
@description = 'Profilo Html.it'
Con la procedura sysmail_add_profileaccount_sp abbiniamo il profilo appena creato con l'account Html.it:
Listato 4. Associazione tra profilo e account con sysmail_add_profileaccount_sp
EXECUTE msdb.dbo.sysmail_add_profileaccount_sp
@profile_name = 'Html.it',
@account_name = 'Html.it',
@sequence_number = 1;
Infine non rimane che utilizzare sysmail_add_principalprofile_sp per impostare il profilo Html.it
come profilo pubblico predefinito per gli utenti del database msdb.
Listato 5. Impostazione del profilo Html.it come profilo pubblico predefinito per gli utenti di msdb
EXECUTE msdb.dbo.sysmail_add_principalprofile_sp
@profile_name = 'Html.it',
@principal_name = 'public',
@is_default = 1 ;
Usare Database mail
Una volta configurato Database Mail, possiamo utilizzarlo per inviare messaggi di posta elettronica attraverso la procedura di sistema sp_send_dbmail che risiede nel database msdb (a patto di essere membri del ruolo DatabaseMailUserRole di msdb). Ecco qui sotto alcuni semplici esempi:
Listato 6. Invio di una semplice email in formato testuale.
EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'Amministratore',
@recipients = 'l.milan@html.it',
@body = 'Messaggio di prova in puro testo!',
@subject = 'Messaggio di prova';
GO
Listato 7. Invio di una semplice email in formato html.
EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'Amministratore',
@recipients = 'l.milan@html.it',
@body = '<h1>Messaggio di prova in HTML!</h1>',
@subject = 'Messaggio di prova',
@body_format = 'HTML';
GO
Listato 8. Invio di una email con allegato un file contente il risultato di una query.
EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'Amministratore',
@recipients = 'l.milan@html.it',
@subject = 'Invio di una query',
@query = 'select recipients,subject from msdb.dbo.sysmail_sentitems',
@attach_query_result_as_file = 1 ;
Per avere tutti i dettagli sulla procedura sp_send_dbmail potete consultare questo link. Database Mail mantiene le informazioni sul suo stato di servizio in tabelle di sistema, che possono essere interrogate tramite viste quali: sysmail_allitems
, sysmail_sentitems
, sysmail_unsentitems
e sysmail_faileditems
. Ognuna di queste offre informazioni utili sullo stato di ogni singolo messaggio processato dal servizio.
Conclusione
Database mail offre agli sviluppatori e agli amministratori di sistema un valido e robusto strumento per l'invio di email. Per chi volesse approfondire l'argomento segnalo il link su Database Mail sui BOL di SQL Server 2005.