Aracılığıyla paylaş


Veritabanı Postası ile Gönderilen E-posta İletilerinin Durumunu Denetleme

Şunlar için geçerlidir:SQL ServerAzure SQL Yönetilen Örneği

Bu makalede, Transact-SQL kullanılarak SQL Server'da Veritabanı Postası kullanılarak gönderilen e-posta iletisinin durumunun nasıl denetlendiği açıklanır.

  • Veritabanı Postası, giden e-posta iletilerinin kopyalarını tutar ve bunları veritabanının sysmail_allitems, sysmail_sentitems, sysmail_unsentitems, sysmail_faileditems görünümlerinde msdb görüntüler.
  • Veritabanı Postası'nın harici programı etkinlikleri günlüğe kaydeder ve bu günlüğü Windows Uygulama Olay Günlüğü ile sysmail_event_log veritabanındaki msdb görünümü aracılığıyla görüntüler.
  • E-posta iletileri dört olası durumdan birine sahiptir: gönderildi, gönderilmedi, yeniden gönderiliyorve başarısız oldu.

E-posta iletisinin durumunu denetlemek için sistem görünümünde bir sorgu msdb.dbo.sysmail_event_log çalıştırın.

Veritabanı Postası kullanılarak gönderilen e-postanın durumunu görüntülemek için Transact-SQL kullanın

  • Tablodan sysmail_allitems veya mailitem_id ile ilgilendiğiniz iletileri belirterek seçim yapın.

  • E-posta iletilerinin dış programdan döndürülen durumunu kontrol etmek için, sysmail_allitemssysmail_event_log görünümüyle mailitem_id sütununda birleştirin.

    Varsayılan olarak, dış program başarıyla gönderilen iletiler hakkındaki bilgileri günlüğe kaydetmez. Tüm iletileri günlüğe kaydetmek için, Veritabanı Posta Yapılandırma Sihirbazı'nın Sistem Parametrelerini Yapılandırma sayfasını kullanarak günlük düzeyini ayrıntılı olarak ayarlayın.

Aşağıdaki örnekte, dış programın başarıyla gönderemediği danw gönderilen e-posta iletileriyle ilgili bilgiler listelenmektedir. Deyiminde konu, dış programın iletiyi gönderemediği tarih ve saat ve Veritabanı Posta günlüğündeki hata iletisi listelenir.

USE msdb ;  
GO  

-- Show the subject, the time that the mail item row was last  
-- modified, and the log information.  
-- Join sysmail_faileditems to sysmail_event_log   
-- on the mailitem_id column.  
-- In the WHERE clause list items where danw was in the recipients,  
-- copy_recipients, or blind_copy_recipients.  
-- These are the items that would have been sent  
-- to danw.  

SELECT items.subject,  
    items.last_mod_date  
    ,l.description 
FROM dbo.sysmail_faileditems AS items  
INNER JOIN dbo.sysmail_event_log AS l  
    ON items.mailitem_id = l.mailitem_id  
WHERE items.recipients LIKE '%danw%'    
    OR items.copy_recipients LIKE '%danw%'   
    OR items.blind_copy_recipients LIKE '%danw%';
GO