Πώς στέλνουμε email μέσα από τον SQL Server
- Πώς συλλέγουμε to actual execution plan από τα queries με χρήση Extended Event και πως διαβάζουμε τα δεδομένα του - 2 Δεκέμβριος 2024
- Πώς βρίσκουμε τι δικαιώματα έχει ένας χρήστης σε βάση δεδομένων της Oracle - 1 Νοέμβριος 2024
- Πώς ενεργοποιούμε το Unified Auditing σε Oracle Database - 7 Οκτώβριος 2024
Μέσα από τον Microsoft SQL Server έχουμε τη δυνατότητα να στέλνουμε email είτε για κάποιο alerting είτε ώστε να μπορούμε να στέλνουμε αναφορές.
Σε αυτό το άρθρο θα δούμε βήμα βήμα πως λειτουργεί και πως ενεργοποιούμε to Database Mail στον SQL Server.
Όταν ένας χρήστης εκτελεί την συστημική 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 θα πρέπει να έχουμε πάει στην σελίδα του και να ενεργοποιήσουμε να επιτρέπετε η πρόσβαση σε λιγότερο ασφαλείς εφαρμογές από εδώ .
Επιλέγουμε κάτω από το instance μας, Management, Database Mail, δεξί κλικ Configure Database Mail.
Στη συνέχεια επιλέγουμε το Set up αφού θέλουμε να φτιάξουμε καινούργιο Database Mail.
Έπειτα θα μας ζητήσει να δώσουμε ένα όνομα στο Profile μας και επιλέγουμε Add.
Σε αυτό το σημείο θα πρέπει να συμπληρώσουμε όλα τα στοιχεία του SMTP παρόχου όπως:
- Την διεύθυνση e-mail
- Το όνομα που θα φαίνεται σαν αποστολέας
- Το όνομα του SMTP server, στην περίπτωση μας είναι ο smtp.gmail.com που ακούει στην πόρτα 587
- Επιλέγουμε SSL secure connection (απαιτείται για gmail)
- Και στο basic authentication τα credentials του gmail μας
Στο επόμενο βήμα το επιλέγουμε σαν public και default ώστε να μπορεί να το κάνει χρήση οποιοσδήποτε.
Κατά το finish ζητάει να στείλει ένα δοκιμαστικό email σε όποια διεύθυνση επιθημούμε. Έγραψα το προσωπικό μου gmail και άμεσα έλαβα το παρακάτω:
Εναλλακτικά μπορούμε να κάνουμε όλη τη παραπάνω διαδικασία με 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;