sp_send_dbmail не выполняется при выполнении задачи sql без каких-либо ошибок

Я новичок в SSIS. Я столкнулся с проблемой выполнения sp_send_dbmail в одной из моих хранимых процедур, которая запускается задачей «Выполнение SQL» в SSIS. Основная проблема в том, что он не выдает никаких ошибок и успешно завершается, хотя профиль, с которым я запускаю этот SP, не существует. Я подозреваю, что есть проблема с конфигурацией, но я не могу ее диагностировать.

Я обнаружил, что SMTP не настроен на моем промежуточном сервере. Может ли это быть единственной причиной? Даже если он есть, он должен как минимум выдавать ошибку, но в логах я не вижу сообщений об ошибках того же.

Кроме того, если я запускаю этот SP напрямую через SQL, я получаю сообщение об ошибке «Профиль не существует». Но когда я запускаю тот же SP через SSIS (выполнение задачи sql), он выполняется успешно.

Любое руководство по этому вопросу может быть большим подспорьем.

Вот как я вызываю sp_send_dbmail.

EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'Stagging Trigger',
@recipients = '[email protected]',
@subject = 'this is the SP to send mail from SP'


person Pratibha Gupta    schedule 23.03.2019    source источник


Ответы (2)


sp_send_dbmail только ставит почту в очередь. Не пытается доставить, не проверяет профиль электронной почты, не может вызвать ни одну из ошибок, на которые вы жалуетесь, отсутствует.

Прочитайте здесь, как проверить статус сообщений электронной почты в очереди: Проверить статус сообщений электронной почты, отправленных с помощью Database Mail:

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  

Еще статьи по теме:

person Remus Rusanu    schedule 24.03.2019
comment
Спасибо, что сделали шаг для отладки электронных писем в очереди. Но если я выполню этот оператор (конечно, заменив получателя своим), я получу 0 записей. Это означает, что SP не запускал эту часть кода. Кроме того, если я запускаю этот SP напрямую через SQL, я получаю сообщение об ошибке «Профиль не существует». Но когда я запускаю тот же SP через SSIS (выполнение задачи sql), он выполняется успешно. Пожалуйста, предложите. - person Pratibha Gupta; 24.03.2019

Ваша ошибка довольно ясна в том, что требуется. Прежде всего, создайте профиль и запишите все значения, которые вы будете вводить в мастере. Это руководство поможет вам правильно создать профиль.

После того, как вы убедились, что профиль dbmail настроен, пришло время протестировать его. Если вы не можете отправить электронную почту через сохраненную процедуру, я бы хотел поговорить с администратором AD или лицом, ответственным за настройку сервера электронной почты. Это делается для того, чтобы вы могли анонимно отправлять электронные письма и позаботиться о любых потенциальных проблемах с сервером ретрансляции. Надеюсь это поможет.

person rvphx    schedule 25.03.2019