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

Cari Tahu Mengapa Email Gagal Terkirim di SQL Server (T-SQL)

Jika Anda mencoba mengirim email menggunakan Database Mail di SQL Server, tetapi gagal terkirim, Anda dapat memeriksa sysmail_event_log lihat untuk melihat mengapa gagal.

sysmail_event_log view mengembalikan satu baris untuk setiap pesan Windows atau SQL Server yang dikembalikan oleh sistem Database Mail. Dengan "pesan", maksud saya bukan pesan email yang sebenarnya. Maksud saya pesan seperti pesan kesalahan yang menjelaskan mengapa email gagal.

Anda juga dapat menggunakan sysmail_configure_sp prosedur tersimpan untuk menentukan jenis pesan apa yang dicatat.

Contoh

Berikut adalah contoh untuk mendemonstrasikan cara menggunakan sysmail_event_log untuk mengembalikan semua pesan.

SELECT * FROM msdb.dbo.sysmail_event_log;

Di sistem saya, ini mengembalikan terlalu banyak data untuk ditampilkan di sini, tetapi ini sekali lagi untuk menampilkan satu pesan yang dikembalikan.

SELECT * 
FROM msdb.dbo.sysmail_event_log
WHERE log_id = 2;

Hasil (menggunakan keluaran vertikal):

log_id        | 2
event_type    | error
log_date      | 2020-08-24 02:40:53.317
description   | The mail could not be sent to the recipients because of the mail server failure. (Sending Mail using Account 1 (2020-08-24T02:40:52). Exception Message: Could not connect to mail server. (No connection could be made because the target machine actively refused it 127.0.0.1:25).)
process_id    | 68
mailitem_id   | 1
account_id    | NULL
last_mod_date | 2020-08-24 02:40:53.317
last_mod_user | sa

Saya menggunakan output vertikal dalam contoh ini sehingga Anda tidak perlu menggulir ke samping.

Periksa Level Logging Anda

Anda dapat menggunakan sysmail_help_configure_sp prosedur tersimpan untuk memeriksa jenis pesan apa yang dicatat.

Contoh:

EXEC msdb.dbo.sysmail_help_configure_sp 
    @parameter_name = LoggingLevel;

Hasil:

+--------------+--------------+------------------------------------------------------------------------------+
| paramname    | paramvalue   | description                                                                  |
|--------------+--------------+------------------------------------------------------------------------------|
| LoggingLevel | 2            | Database Mail logging level: normal - 1, extended - 2 (default), verbose - 3 |
+--------------+--------------+------------------------------------------------------------------------------+

Dalam kasus saya, LoggingLevel adalah 2 , yang merupakan nilai default. Setelan ini mencatat kesalahan, peringatan, dan pesan informasi.

Ubah Tingkat Logging Anda

Anda dapat menggunakan sysmail_configure_sp prosedur tersimpan untuk mengubah level logging Anda.

Secara khusus, Anda dapat memilih LoggingLevel dari 1 , 2 , atau 3 .

Ini mencatat sebagai berikut:

  1. Hanya error.
  2. Error, peringatan, dan pesan informasi (default).
  3. Error, peringatan, pesan informasi, pesan sukses, dan pesan internal tambahan.

Jika Anda sedang memecahkan masalah, Anda mungkin ingin mengubah sementara tingkat logging Anda ke 3.

Berikut ini contoh mengubah level logging menjadi 3 .

EXECUTE msdb.dbo.sysmail_configure_sp  
    'LoggingLevel', '3';

Setelah menjalankannya, saya dapat memeriksa LoggingLevel saya lagi dengan sysmail_help_configure_sp prosedur tersimpan.

EXEC msdb.dbo.sysmail_help_configure_sp 
    @parameter_name = LoggingLevel;

Hasil:

+--------------+--------------+------------------------------------------------------------------------------+
| paramname    | paramvalue   | description                                                                  |
|--------------+--------------+------------------------------------------------------------------------------|
| LoggingLevel | 3            | Database Mail logging level: normal - 1, extended - 2 (default), verbose - 3 |
+--------------+--------------+------------------------------------------------------------------------------+

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Gabungkan Dua Partisi Menjadi Satu di SQL Server (T-SQL)

  2. Kapan saya harus menggunakan variabel tabel vs tabel sementara di server sql?

  3. datetime vs smalldatetime di SQL Server:Apa Bedanya?

  4. Cara Menghapus Spasi Leading dan Trailing di SQL Server – TRIM()

  5. Bagaimana cara mendapatkan daftar semua tabel dalam database menggunakan TSQL?