Menggunakan Database Mail di Amazon RDS for SQL Server - Layanan Basis Data Relasional Amazon

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Menggunakan Database Mail di Amazon RDS for SQL Server

Anda dapat menggunakan Database Mail untuk mengirim pesan email ke pengguna dari instans basis data Amazon RDS di SQL Server. Pesan dapat berisi file dan hasil kueri. Database Mail mencakup komponen berikut:

  • Objek konfigurasi dan keamanan – Objek-objek ini membuat profil dan akun, dan disimpan di basis data msdb.

  • Objek pesan – Objek-objek ini mencakup sp_send_dbmail prosedur tersimpan yang digunakan untuk mengirim pesan, dan struktur data yang menyimpan informasi tentang pesan. Semuanya disimpan di basis data msdb.

  • Pembuatan log dan audit objek – Database Mail menulis informasi log ke basis data msdb dan log peristiwa aplikasi Microsoft Windows.

  • Database Mail dapat executableDatabaseMail.exe membaca dari antrean di basis data msdb dan mengirim pesan email.

RDS mendukung Database Mail untuk semua versi SQL Server di Edisi Web, Standar, dan Perusahaan.

Batasan

Batasan berikut berlaku untuk menggunakan Database Mail di instans DB SQL Server Anda:

  • Pesan basis data tidak mendukung Edisi Ekspres SQL Server.

  • Mengubah parameter konfigurasi Database Mail tidak didukung. Untuk melihat nilai preset (default), gunakan prosedur tersimpan sysmail_help_configure_sp.

  • Lampiran file tidak sepenuhnya didukung. Untuk informasi selengkapnya, lihat Bekerja dengan lampiran file.

  • Ukuran lampiran file maksimum adalah 1 MB.

  • Database Mail memerlukan konfigurasi tambahan pada instans DB Multi-AZ. Untuk informasi selengkapnya, lihat Pertimbangan untuk deployment multi-AZ.

  • Mengonfigurasikan Agen SQL Server untuk mengirim pesan email ke operator yang sudah ditentukan tidak didukung.

Mengaktifkan Database Mail

Gunakan proses berikut untuk mengaktifkan Database Mail untuk instans DB Anda:

  1. Buat grup parameter baru.

  2. Ubah grup parameter untuk mengatur parameter database mail xps ke 1.

  3. Hubungkan grup parameter baru dengan instans DB.

Membuat grup parameter untuk Database Mail

Buat grup parameter untuk parameter database mail xps yang sesuai dengan edisi SQL Server dan versi instans DB Anda.

catatan

Anda juga dapat mengubah grup parameter yang ada. Ikuti prosedur di Mengubah grup parameter untuk Database Mail.

Contoh berikut membuat grup parameter untuk Edisi Standar SQL Server 2016.

Untuk membuat grup parameter
  1. Masuk ke AWS Management Console dan buka konsol Amazon RDS di https://console.aws.amazon.com/rds/.

  2. Di panel navigasi, pilih Grup parameter.

  3. Pilih Buat grup parameter.

  4. Di panel Buat grup parameter, lakukan hal berikut:

    1. Untuk Rangkaian grup parameter, pilih sqlserver-se-13.0.

    2. Untuk Nama grup, masukkan pengidentifikasi grup parameter, seperti dbmail-sqlserver-se-13.

    3. Untuk Deskripsi, masukkan Database Mail XPs.

  5. Pilih Buat.

Contoh berikut membuat grup parameter untuk Edisi Standar SQL Server 2016.

Untuk membuat grup parameter
  • Gunakan salah satu perintah berikut.

    Untuk Linux, macOS, atau Unix:

    aws rds create-db-parameter-group \ --db-parameter-group-name dbmail-sqlserver-se-13 \ --db-parameter-group-family "sqlserver-se-13.0" \ --description "Database Mail XPs"

    Untuk Windows:

    aws rds create-db-parameter-group ^ --db-parameter-group-name dbmail-sqlserver-se-13 ^ --db-parameter-group-family "sqlserver-se-13.0" ^ --description "Database Mail XPs"

Mengubah grup parameter untuk Database Mail

Ubah parameter database mail xps di grup parameter yang sesuai dengan edisi SQL Server dan versi instans DB Anda.

Untuk mengaktifkan Database Mail, atur parameter database mail xps ke 1.

Contoh berikut akan mengubah grup parameter yang telah Anda buat untuk Edisi Standar SQL Server 2016.

Untuk mengubah grup parameter
  1. Masuk ke AWS Management Console dan buka konsol Amazon RDS di https://console.aws.amazon.com/rds/.

  2. Di panel navigasi, pilih Grup parameter.

  3. Pilih grup parameter, seperti dbmail-sqlserver-se-13.

  4. Di bagian Parameter, filter daftar parameter untuk mail.

  5. Pilih Database Mail xps.

  6. Pilih Edit parameter.

  7. Masukkan 1.

  8. Pilih Smpan Perubahan.

Contoh berikut akan mengubah grup parameter yang telah Anda buat untuk Edisi Standar SQL Server 2016.

Untuk mengubah grup parameter
  • Gunakan salah satu perintah berikut ini.

    Untuk Linux, macOS, atau Unix:

    aws rds modify-db-parameter-group \ --db-parameter-group-name dbmail-sqlserver-se-13 \ --parameters "ParameterName='database mail xps',ParameterValue=1,ApplyMethod=immediate"

    Untuk Windows:

    aws rds modify-db-parameter-group ^ --db-parameter-group-name dbmail-sqlserver-se-13 ^ --parameters "ParameterName='database mail xps',ParameterValue=1,ApplyMethod=immediate"

Kaitkan grup parameter dengan instans DB

Anda dapat menggunakan AWS Management Console atau AWS CLI untuk mengaitkan grup parameter Database Mail dengan instans DB.

Anda dapat mengaitkan grup parameter Database Mail dengan instans DB baru atau yang sudah ada.

Anda dapat mengaitkan grup parameter Database Mail dengan instans DB baru atau yang sudah ada.

Untuk membuat instans DB dengan grup parameter Database Mail
  • Tentukan jenis mesin DB dan versi utama yang sama seperti yang Anda gunakan saat membuat grup parameter.

    Untuk Linux, macOS, atau Unix:

    aws rds create-db-instance \ --db-instance-identifier mydbinstance \ --db-instance-class db.m5.2xlarge \ --engine sqlserver-se \ --engine-version 13.00.5426.0.v1 \ --allocated-storage 100 \ --manage-master-user-password \ --master-username admin \ --storage-type gp2 \ --license-model li --db-parameter-group-name dbmail-sqlserver-se-13

    Untuk Windows:

    aws rds create-db-instance ^ --db-instance-identifier mydbinstance ^ --db-instance-class db.m5.2xlarge ^ --engine sqlserver-se ^ --engine-version 13.00.5426.0.v1 ^ --allocated-storage 100 ^ --manage-master-user-password ^ --master-username admin ^ --storage-type gp2 ^ --license-model li ^ --db-parameter-group-name dbmail-sqlserver-se-13
Untuk mengubah instans DB dan mengaitkan grup parameter Database Mail
  • Gunakan salah satu perintah berikut ini.

    Untuk Linux, macOS, atau Unix:

    aws rds modify-db-instance \ --db-instance-identifier mydbinstance \ --db-parameter-group-name dbmail-sqlserver-se-13 \ --apply-immediately

    Untuk Windows:

    aws rds modify-db-instance ^ --db-instance-identifier mydbinstance ^ --db-parameter-group-name dbmail-sqlserver-se-13 ^ --apply-immediately

Mengonfigurasi Database Mail

Anda melakukan tugas berikut untuk mengonfigurasikan Database Mail:

  1. Buat profil Database Mail.

  2. Buat akun Database Mail.

  3. Tambahkan akun Database Mail ke profil Database Mail.

  4. Tambahkan pengguna ke profil Database Mail.

catatan

Untuk mengonfigurasi Database Mail, pastikan bahwa Anda memiliki izin execute pada prosedur yang disimpan dalam basis data msdb.

Membuat profil Database Mail

Untuk membuat profil Database Mail, Anda menggunakan prosedur tersimpan sysmail_add_profile_sp. Contoh berikut membuat profil dengan nama Notifications.

Untuk membuat profil
  • Gunakan pernyataan SQL berikut.

    USE msdb GO EXECUTE msdb.dbo.sysmail_add_profile_sp @profile_name = 'Notifications', @description = 'Profile used for sending outgoing notifications using Amazon SES.'; GO

Membuat akun Database Mail

Untuk membuat akun Database Mail, Anda menggunakan prosedur tersimpan sysmail_add_account_sp. Contoh berikut membuat akun dengan nama SES di RDS untuk instans DB SQL Server di VPC pribadi, menggunakan Layanan Email Sederhana Amazon.

Menggunakan Amazon SES memerlukan parameter berikut:

Untuk membuat akun
  • Gunakan pernyataan SQL berikut.

    USE msdb GO EXECUTE msdb.dbo.sysmail_add_account_sp @account_name = 'SES', @description = 'Mail account for sending outgoing notifications.', @email_address = 'nobody@example.com', @display_name = 'Automated Mailer', @mailserver_name = 'vpce-0a1b2c3d4e5f-01234567.email-smtp.us-west-2.vpce.amazonaws.com', @port = 587, @enable_ssl = 1, @username = 'Smtp_Username', @password = 'Smtp_Password'; GO
    catatan

    Tentukan kredensial selain prompt yang ditampilkan di sini sebagai praktik terbaik keamanan.

Menambahkan akun Database Mail ke profil Database Mail

Untuk menambahkan akun Database Mail ke profil Database Mail, gunakan prosedur tersimpan sysmail_add_profileaccount_sp. Contoh berikut menambahkan akun SES ke profil Notifications.

Menambahkan akun ke profil
  • Gunakan pernyataan SQL berikut.

    USE msdb GO EXECUTE msdb.dbo.sysmail_add_profileaccount_sp @profile_name = 'Notifications', @account_name = 'SES', @sequence_number = 1; GO

Menambahkan pengguna ke profil Database Mail

Untuk memberikan izin bagi pengguna utama basis data msdb untuk menggunakan profil Database Mail, Anda menggunakan prosedur sysmail_add_principalprofile_sp tersimpan. Pengguna utama adalah entitas yang dapat meminta sumber daya SQL Server. Pengguna utama basis data harus dipetakan ke pengguna autentikasi SQL Server, pengguna Autentikasi Windows, atau grup Autentikasi Windows.

Contoh berikut memberikan akses publik ke profil Notifications.

Untuk menambahkan pengguna ke profil
  • Gunakan pernyataan SQL berikut.

    USE msdb GO EXECUTE msdb.dbo.sysmail_add_principalprofile_sp @profile_name = 'Notifications', @principal_name = 'public', @is_default = 1; GO

Prosedur dan fungsi yang disimpan Amazon RDS untuk Database Mail

Microsoft menyediakan prosedur tersimpan untuk menggunakan Database Mail, seperti membuat, mencantumkan, memperbarui, dan menghapus akun dan profil. Selain itu, RDS menyediakan prosedur dan fungsi yang disimpan untuk Database Mail yang ditampilkan dalam tabel berikut.

Prosedur/Fungsi Deskripsi
rds_fn_sysmail_allitems Menampilkan pesan terkirim, termasuk yang dikirim oleh pengguna lain.
rds_fn_sysmail_event_log Menampilkan acara, termasuk acara untuk pesan yang dikirimkan oleh pengguna lain.
rds_fn_sysmail_mailattachments Menampilkan lampiran terkirim, termasuk yang dikirim oleh pengguna lain.
rds_sysmail_control Memulai dan menghentikan antrian email (DatabaseMailproses.exe).
rds_sysmail_delete_mailitems_sp Menghapus pesan email yang dikirim oleh semua pengguna dari tabel internal Database Mail.

Mengirim pesan email menggunakan Database Mail

Anda menggunakan prosedur sp_send_dbmail tersimpan untuk mengirim pesan email menggunakan Database Mail.

Penggunaan

EXEC msdb.dbo.sp_send_dbmail @profile_name = 'profile_name', @recipients = 'recipient1@example.com[; recipient2; ... recipientn]', @subject = 'subject', @body = 'message_body', [@body_format = 'HTML'], [@file_attachments = 'file_path1; file_path2; ... file_pathn'], [@query = 'SQL_query'], [@attach_query_result_as_file = 0|1]';

Parameter berikut diperlukan:

  • @profile_name – Nama profil Database Mail yang akan digunakan untuk mengirim pesan.

  • @recipients – Daftar alamat email tujuan pengiriman pesan yang dipisahkan titik koma.

  • @subject – Subjek pesan.

  • @body – Konten pesan. Anda juga dapat menggunakan variabel yang dinyatakan sebagai isi.

Parameter berikut ini bersifat opsional:

  • @body_format – Parameter ini digunakan dengan variabel yang dinyatakan untuk mengirim email dalam format HTML.

  • @file_attachments – Daftar lampiran pesan yang disusun dengan titik koma. Path file harus berupa path absolut.

  • @query – Kueri SQL untuk dijalankan. Hasil kueri dapat dilampirkan sebagai file atau disertakan dalam konten pesan.

  • @attach_query_result_as_file – Apakah melampirkan hasil kueri sebagai file. Atur ke 0 untuk tidak, 1 untuk ya. Default-nya adalah 0.

Contoh

Contoh-contoh berikut ini mendemonstrasikan cara mengirim pesan email.

contoh mengirimkan pesan ke satu penerima
USE msdb GO EXEC msdb.dbo.sp_send_dbmail @profile_name = 'Notifications', @recipients = 'nobody@example.com', @subject = 'Automated DBMail message - 1', @body = 'Database Mail configuration was successful.'; GO
contoh mengirimkan pesan ke beberapa penerima
USE msdb GO EXEC msdb.dbo.sp_send_dbmail @profile_name = 'Notifications', @recipients = 'recipient1@example.com;recipient2@example.com', @subject = 'Automated DBMail message - 2', @body = 'This is a message.'; GO
contoh mengirimkan hasil kueri SQL sebagai lampiran file
USE msdb GO EXEC msdb.dbo.sp_send_dbmail @profile_name = 'Notifications', @recipients = 'nobody@example.com', @subject = 'Test SQL query', @body = 'This is a SQL query test.', @query = 'SELECT * FROM abc.dbo.test', @attach_query_result_as_file = 1; GO
contoh mengirimkan pesan dalam format HTML
USE msdb GO DECLARE @HTML_Body as NVARCHAR(500) = 'Hi, <h4> Heading </h4> </br> See the report. <b> Regards </b>'; EXEC msdb.dbo.sp_send_dbmail @profile_name = 'Notifications', @recipients = 'nobody@example.com', @subject = 'Test HTML message', @body = @HTML_Body, @body_format = 'HTML'; GO
contoh mengirimkan pesan menggunakan pemicu saat peristiwa tertentu terjadi di basis data
USE AdventureWorks2017 GO IF OBJECT_ID ('Production.iProductNotification', 'TR') IS NOT NULL DROP TRIGGER Purchasing.iProductNotification GO CREATE TRIGGER iProductNotification ON Production.Product FOR INSERT AS DECLARE @ProductInformation nvarchar(255); SELECT @ProductInformation = 'A new product, ' + Name + ', is now available for $' + CAST(StandardCost AS nvarchar(20)) + '!' FROM INSERTED i; EXEC msdb.dbo.sp_send_dbmail @profile_name = 'Notifications', @recipients = 'nobody@example.com', @subject = 'New product information', @body = @ProductInformation; GO

Melihat pesan, log, dan lampiran

Anda menggunakan prosedur yang disimpan RDS untuk melihat pesan, log event, dan lampiran.

Untuk melihat semua pesan email
  • Gunakan kueri SQL berikut.

    SELECT * FROM msdb.dbo.rds_fn_sysmail_allitems(); --WHERE sent_status='sent' or 'failed' or 'unsent'
Untuk melihat semua log peristiwa email
  • Gunakan kueri SQL berikut.

    SELECT * FROM msdb.dbo.rds_fn_sysmail_event_log();
Untuk melihat semua lampiran email
  • Gunakan kueri SQL berikut.

    SELECT * FROM msdb.dbo.rds_fn_sysmail_mailattachments();

Menghapus pesan

Anda menggunakan prosedur rds_sysmail_delete_mailitems_sp yang disimpan untuk menghapus pesan.

catatan

RDS secara otomatis menghapus item tabel mail saat data riwayat DBMail mencapai ukuran 1 GB, dengan jangka waktu penyimpanan setidaknya 24 jam.

Jika Anda ingin menyimpan mail untuk periode yang lebih lama, Anda dapat mengarsipkannya. Untuk informasi selengkapnya, lihat Create a SQL Server Agent job to archive Database Mail messages and event logs di dokumentasi Microsoft.

Untuk menghapus semua pesan email
  • Gunakan pernyataan SQL berikut.

    DECLARE @GETDATE datetime SET @GETDATE = GETDATE(); EXECUTE msdb.dbo.rds_sysmail_delete_mailitems_sp @sent_before = @GETDATE; GO
Untuk menghapus semua pesan email dengan status tertentu
  • Gunakan laporan SQL berikut untuk menghapus semua pesan yang gagal.

    DECLARE @GETDATE datetime SET @GETDATE = GETDATE(); EXECUTE msdb.dbo.rds_sysmail_delete_mailitems_sp @sent_status = 'failed'; GO

Memulai antrean email

Anda menggunakan prosedur rds_sysmail_control yang disimpan untuk memulai proses Database Mail.

catatan

Mengaktifkan Database Mail secara otomatis memulai antrean email.

Untuk memulai antrean email
  • Gunakan pernyataan SQL berikut.

    EXECUTE msdb.dbo.rds_sysmail_control start; GO

Menghentikan antrean email

Anda menggunakan prosedur rds_sysmail_control yang disimpan untuk memulai menghentikan proses Database Mail.

Untuk menghentikan antrean email
  • Gunakan pernyataan SQL berikut.

    EXECUTE msdb.dbo.rds_sysmail_control stop; GO

Bekerja dengan lampiran file

Ekstensi lampiran file berikut tidak didukung di pesan Database Mail messages dari RDS di SQL Server: .ade, .adp, .apk, .appx, .appxbundle, .bat, .bak, .cab, .chm, .cmd, .com, .cpl, .dll, .dmg, .exe, .hta, .inf1, .ins, .isp, .iso, .jar, .job, .js, .jse, .ldf, .lib, .lnk, .mde, .mdf, .msc, .msi, .msix, .msixbundle, .msp, .mst, .nsh, .pif, .ps, .ps1, .psc1, .reg, .rgs, .scr, .sct, .shb, .shs, .svg, .sys, .u3p, .vb, .vbe, .vbs, .vbscript, .vxd, .ws, .wsc, .wsf, and .wsh.

Database Mail menggunakan konteks keamanan Microsoft Windows dari pengguna saat ini untuk mengontrol akses ke file. Pengguna yang login dengan Autentikasi SQL Server tidak dapat melampirkan file menggunakan parameter @file_attachments dengan prosedur sp_send_dbmail yang disimpan. Windows tidak mengizinkan SQL Server untuk memberikan kredensial dari komputer jarak jauh ke komputer jarak jauh lainnya. Oleh karena itu, Database Mail tidak dapat melampirkan file dari jaringan bersama saat perintah dijalankan dari komputer selain komputer yang menjalankan SQL Server.

Namun, Anda dapat menggunakan pekerjaan SQL Server Agent untuk melampirkan file. Untuk informasi selengkapnya tentang SQL Server Agent, lihat Menggunakan SQL Server Agent dan SQL Server Agent di dokumentasi Microsoft.

Pertimbangan untuk deployment multi-AZ

Ketika Anda mengonfigurasikan Database Mail di instans DB Multi-AZ DB, konfigurasi tidak secara otomatis diperbanyak ke sekunder. Kami merekomendasikan untuk mengonversi instans Multi-AZ ke instans AZ Tunggal, mengonfigurasi Database Mail, kemudian mengonversikan kembali instans DB ke Multi-AZ. Kemudian, kedua node primer dan sekunder memiliki konfigurasi Database Mail.

Jika Anda membuat replika baca dari instans Multi-AZ yang memiliki Database Mail yang dikonfigurasi, replika tersebut akan mewarisi konfigurasi tersebut, namun tanpa kata sandi ke server SMTP. Perbarui akun Database Mail dengan kata sandi.

Menghapus pembatasan SMTP (port 25)

Secara default, AWS memblokir lalu lintas keluar pada SMTP (port 25) untuk RDS untuk instans SQL Server DB. Hal ini dilakukan untuk mencegah spam berdasarkan kebijakan pemilik elastic network interface. Anda dapat menghapus batasan ini jika diperlukan. Untuk informasi selengkapnya, lihat Bagaimana cara menghapus pembatasan pada port 25 dari instans Amazon EC2 atau fungsi Lambda saya? .