Πώς στέλνουμε email μέσα από τον SQL Server

Πώς στέλνουμε email μέσα από τον SQL Server
Πώς στέλνουμε email μέσα από τον SQL Server

Μέσα από τον Microsoft SQL Server έχουμε τη δυνατότητα να στέλνουμε email είτε για κάποιο alerting είτε ώστε να μπορούμε να στέλνουμε αναφορές.

Σε αυτό το άρθρο θα δούμε βήμα βήμα πως λειτουργεί και πως ενεργοποιούμε to Database Mail στον SQL Server.

Πώς στέλνουμε email μέσα από τον SQL Server
01 (docs.microsoft.com)

Όταν ένας χρήστης εκτελεί την συστημική procedure msdb.dbo.sp_send_dbmail με το email που θέλει να στείλει, ο SQL Server το προωθεί στον SMTP mail server του εκάστοτε παρόχου όπως outlook, exchange, gmail και αυτό μετά αποστέλνετε στον τελικό χρήστη. Η διαδικασία αυτή μπορεί να ενεργοποιηθεί είτε adhoc όποτε καλούμε την procedure εμείς, είτε μέσω schedule στον SQL Server Agent, είτε με την δημιουργία alerting Operators στον SQL Server Agent.

Ας δούμε τώρα τα βήματα που θα πρέπει να ακολουθήσουμε και τις ρυθμίσεις που θα πρέπει να κάνουμε ώστε να έχουμε αυτή τη δυνατότητα.

Το παράδειγμα

Για αρχή το παράδειγμα θα κάνω χρήση ένα account στο gmail . Το gmail για να επιτρέψει την πρόσβαση από τον SQL Server θα πρέπει να έχουμε πάει στην σελίδα του και να ενεργοποιήσουμε να επιτρέπετε η πρόσβαση σε λιγότερο ασφαλείς εφαρμογές από εδώ .

Πώς στέλνουμε email μέσα από τον SQL Server
02

Επιλέγουμε κάτω από το instance μας, Management, Database Mail, δεξί κλικ Configure Database Mail.

Πώς στέλνουμε email μέσα από τον SQL Server
03

Στη συνέχεια επιλέγουμε το Set up αφού θέλουμε να φτιάξουμε καινούργιο Database Mail.

Πώς στέλνουμε email μέσα από τον SQL Server
04

Έπειτα θα μας ζητήσει να δώσουμε ένα όνομα στο Profile μας και επιλέγουμε Add.

Πώς στέλνουμε email μέσα από τον SQL Server
05

Σε αυτό το σημείο θα πρέπει να συμπληρώσουμε όλα τα στοιχεία του SMTP παρόχου όπως:

  • Την διεύθυνση e-mail
  • Το όνομα που θα φαίνεται σαν αποστολέας
  • Το όνομα του SMTP server, στην περίπτωση μας είναι ο smtp.gmail.com που ακούει στην πόρτα 587
  • Επιλέγουμε SSL secure connection (απαιτείται για gmail)
  • Και στο basic authentication τα credentials του gmail μας

Πώς στέλνουμε email μέσα από τον SQL Server
06

Στο επόμενο βήμα το επιλέγουμε σαν public και default ώστε να μπορεί να το κάνει χρήση οποιοσδήποτε.

Πώς στέλνουμε email μέσα από τον SQL Server
07

Κατά το finish ζητάει να στείλει ένα δοκιμαστικό email σε όποια διεύθυνση επιθημούμε. Έγραψα το προσωπικό μου gmail και άμεσα έλαβα το παρακάτω:

Πώς στέλνουμε email μέσα από τον SQL Server
08

Εναλλακτικά μπορούμε να κάνουμε όλη τη παραπάνω διαδικασία με T-SQL με τον παρακάτω κώδικα:

DECLARE @profile_name sysname,
        @account_name sysname,
        @SMTP_servername sysname,
        @email_address NVARCHAR(128),
	    @display_name NVARCHAR(128),
		@username nvarchar(128),
		@password nvarchar(128),
		@enable_ssl int,
		@port INT;

        SET @profile_name = 'gmail';
		SET @account_name = 'gmail';
		SET @SMTP_servername = 'smtp.gmail.com';
		SET @port = 587 --default 25
		SET @enable_ssl = 1
		SET @email_address = 'dataplatform.gr@gmail.com';
        SET @display_name = 'info@dataplatform.gr';
		SET @username = 'dataplatform.gr@gmail.com';
		SET @password= 'password';


IF EXISTS (SELECT * FROM msdb.dbo.sysmail_profile WHERE name = @profile_name)
BEGIN
  RAISERROR('The specified Database Mail profile (gmail) already exists.', 16, 1);
  GOTO done;
END;

IF EXISTS (SELECT * FROM msdb.dbo.sysmail_account WHERE name = @account_name )
BEGIN
 RAISERROR('The specified Database Mail account (gmail) already exists.', 16, 1) ;
 GOTO done;
END;

BEGIN TRANSACTION ;

DECLARE @rv INT;

EXECUTE @rv=msdb.dbo.sysmail_add_account_sp
    @account_name = @account_name,
    @email_address = @email_address,
    @display_name = @display_name,
    @mailserver_name = @SMTP_servername,
	@username=@username,
	@password=@password,
	@enable_ssl=@enable_ssl,
	@port=@port;
	

IF @rv<>0
BEGIN
    RAISERROR('Failed to create the specified Database Mail account (gmail).', 16, 1) ;
    GOTO done;
END

EXECUTE @rv=msdb.dbo.sysmail_add_profile_sp
    @profile_name = @profile_name ;

IF @rv<>0
BEGIN
    RAISERROR('Failed to create the specified Database Mail profile (gmail).', 16, 1);
	ROLLBACK TRANSACTION;
    GOTO done;
END;

EXECUTE @rv=msdb.dbo.sysmail_add_profileaccount_sp
    @profile_name = @profile_name,
    @account_name = @account_name,
    @sequence_number = 1 ;

IF @rv<>0
BEGIN
    RAISERROR('Failed to associate the specified profile with the specified account (gmail).', 16, 1) ;
	ROLLBACK TRANSACTION;
    GOTO done;
END;

COMMIT TRANSACTION;

done:

GO

sp_configure "show advanced options",1
go
sp_configure "Database Mail XPs",1
go
reconfigure
go
sp_configure "show advanced options",0
go

USE [msdb]
GO
EXEC msdb.dbo.sp_set_sqlagent_properties @email_save_in_sent_folder=1, 
		@databasemail_profile=N'gmail', 
		@use_databasemail=1
GO

Αφού ολοκληρωθεί η εγκατάσταση του Database Mail πως στέλνουμε καινούργια On Demand;

Όπως αναφέραμε στην αρχή με την χρήση της συστημικής procedure msdb.dbo.sp_send_dbmail μπορούμε να στείλουμε email.

Οι παράμετροι που χρειάζονται είναι:

  • Το profile_name που φτιάξαμε κατά το σετάρισμα
  • Τα email που θα αποσταλέι
  • Ο τίτλος του email
  • Και το κείμενο του email
  • Έχουμε και την δυνατότητα να προστέσουμε file_attachments (αρκεί φυσικά το account που σηκώνει το service να έχει δικαιώμα να δει τα αρχεία)

EXEC msdb.dbo.sp_send_dbmail  
@profile_name = 'gmail',  
@recipients = 'info@dataplatform.gr', 
--@file_attachments = 'C:\file.txt', 
@subject = 'Titlos',  
@body = 'Keimeno';

Πώς μπορούμε να δούμε την εξέλιξη της αποστολής των email

Με τα παρακάτω queries μπορούμε να δούμε αντίστοιχα:

  • Ποια email στάλθηκαν επιτυχώς
  • Ποια είναι στην διαδικασία αποστολής
  • Και σε ποια η αποστολή τους απέτυχε

select * from msdb.dbo.sysmail_sentitems;
select * from msdb.dbo.sysmail_unsentitems;
select * from msdb.dbo.sysmail_faileditems;

Πηγές:

Μοιράσου το

Αφήστε μία απάντηση