Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Cara Mengirim Email dari SQL Server (T-SQL)

SQL Server menyediakan kemampuan untuk mengirim email melalui solusi Database Mail-nya.

Tindakan sebenarnya mengirim email dilakukan dengan sp_send_dbmail prosedur tersimpan. Tetapi sebelum Anda mulai mengirim email dari SQL Server, Anda harus mengaktifkan dan mengkonfigurasi Database Mail.

Anda dapat melakukannya dengan GUI SSMS, atau dengan T-SQL.

Artikel ini menunjukkan bagaimana melakukannya dengan T-SQL. Diasumsikan bahwa Database Mail tidak pernah diaktifkan pada sistem Anda, dan oleh karena itu melalui langkah-langkah yang terlibat dalam mengaktifkannya.

Jika Anda lebih suka menggunakan SSMS GUI, lihat Cara Mengatur Database Mail di SQL Server (SSMS).

Langkah 1:Aktifkan Database Mail XPs

Hal pertama yang perlu Anda lakukan sebelum mengirim email apa pun dari SQL Server adalah mengaktifkan prosedur penyimpanan diperpanjang Database Mail (Database Mail XPs). Ini ada di msdb basis data sistem.

Ini juga mengharuskan "tampilkan opsi lanjutan" diaktifkan.

Ini dinonaktifkan secara default. Jadi, jika Anda belum pernah menggunakan Database Mail di sistem Anda sebelumnya, Anda harus mengaktifkannya.

Berikut cara mengaktifkan opsi lanjutan dan Database Mail XPs:

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

Tidak perlu memulai ulang SQL Server. Database Mail XPs sekarang akan tersedia untuk digunakan.

Microsoft sebenarnya merekomendasikan bahwa opsi lanjutan seperti ini harus diubah hanya oleh administrator database berpengalaman atau teknisi SQL Server bersertifikat, tetapi untuk tujuan artikel ini, saya akan menganggap Anda adalah administrator DB berpengalaman yang menyegarkan ingatan Anda

Bagaimanapun, untuk menjalankan sp_configure dengan kedua parameter untuk mengubah opsi konfigurasi atau menjalankan RECONFIGURE pernyataan, Anda harus diberikan ALTER SETTINGS izin tingkat server. ALTER SETTINGS izin secara implisit dipegang oleh sysadmin dan admin server peran server tetap.

Langkah 2:Buat Akun &Profil Email

Database Mail dikirim melalui profil, bukan akun pengguna secara langsung.

Untuk mengirim email dengan Database Mail, Anda perlu membuat akun Database Mail, profil Database Mail, menambahkan akun ke profil, lalu memberikan akses pengguna ke profil tersebut. Pengguna harus berada di msdb basis data.

Kode T-SQL untuk melakukan ini dapat terlihat seperti ini:

-- 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;

Anda harus mengganti berbagai detail dengan milik Anda sendiri. Ini juga mengasumsikan bahwa Anda menentukan server email yang berfungsi, dan Anda menggunakan port yang benar.

Perhatikan bahwa saya sudah memiliki login bernama Marge di server saya. Di sini, saya membuat pengguna di msdb database untuk login itu. Kemudian di bagian terakhir, saya memberikan akses kepada pengguna tersebut ke profil yang baru saja saya buat.

Dalam contoh ini, saya membuat satu akun Database Mail dan menambahkannya ke profil. Anda dapat menambahkan beberapa akun ke profil jika Anda mau. Ini dapat berguna sebagai failover saat mengirim email. Jika akun pertama gagal, itu akan mencoba yang berikutnya, dan yang berikutnya, dan seterusnya.

Setelah Anda memiliki kode di atas (dengan detail Anda sendiri), Anda seharusnya dapat mengirim email.

Langkah 3:Kirim Email

Seperti disebutkan, pengiriman email yang sebenarnya dilakukan dengan sp_send_dbmail prosedur tersimpan.

Ini contohnya:

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';

Ini adalah email sederhana dengan dasar-dasar seperti penerima, baris subjek, isi email, dll.

Jika Anda tidak menentukan profil, prosedur akan menggunakan profil pribadi default untuk pengguna saat ini. Jika tidak ada profil pribadi default untuk pengguna, itu akan menggunakan profil publik default untuk msdb basis data. Jika tidak ada profil publik default, Anda akan mendapatkan pesan kesalahan.

Opsi Lainnya

sp_send_dbmail procedure menerima beberapa argumen lebih banyak daripada yang saya gunakan dalam contoh ini.

Berikut sintaks resmi untuk sp_send_dbmail prosedur:

sp_send_dbmail [ [ @profile_name = ] 'profile_name' ]  
    [ , [ @recipients = ] 'recipients [ ; ...n ]' ]  
    [ , [ @copy_recipients = ] 'copy_recipient [ ; ...n ]' ]  
    [ , [ @blind_copy_recipients = ] 'blind_copy_recipient [ ; ...n ]' ]  
    [ , [ @from_address = ] 'from_address' ]  
    [ , [ @reply_to = ] 'reply_to' ]   
    [ , [ @subject = ] 'subject' ]   
    [ , [ @body = ] 'body' ]   
    [ , [ @body_format = ] 'body_format' ]  
    [ , [ @importance = ] 'importance' ]  
    [ , [ @sensitivity = ] 'sensitivity' ]  
    [ , [ @file_attachments = ] 'attachment [ ; ...n ]' ]  
    [ , [ @query = ] 'query' ]  
    [ , [ @execute_query_database = ] 'execute_query_database' ]  
    [ , [ @attach_query_result_as_file = ] attach_query_result_as_file ]  
    [ , [ @query_attachment_filename = ] query_attachment_filename ]  
    [ , [ @query_result_header = ] query_result_header ]  
    [ , [ @query_result_width = ] query_result_width ]  
    [ , [ @query_result_separator = ] 'query_result_separator' ]  
    [ , [ @exclude_query_output = ] exclude_query_output ]  
    [ , [ @append_query_error = ] append_query_error ]  
    [ , [ @query_no_truncate = ] query_no_truncate ]   
    [ , [ @query_result_no_padding = ] @query_result_no_padding ]   
    [ , [ @mailitem_id = ] mailitem_id ] [ OUTPUT ]

Lihat dokumentasi Microsoft untuk penjelasan mendetail tentang setiap argumen.

Referensi Email Database

Lihat Tutorial Database Mail untuk daftar lengkap tutorial Database Mail. Ini bisa menjadi referensi yang bagus, karena setiap tutorial membahas bagian tertentu dari Database Mail.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara Memulihkan Database SQL Server di Mac menggunakan Azure Data Studio

  2. Konversi gagal saat mengonversi nilai varchar 'sederhana,' ke tipe data menjadi

  3. Sisipan massal lambat untuk tabel dengan banyak indeks

  4. Mengembalikan Daftar Profil Email Database di SQL Server (T-SQL)

  5. TSQL PIVOT GANDA KOLOM