Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Получить статус отправки письма.  [new]
mezzanine
Member

Откуда:
Сообщений: 157
Добрый день.
Как можно после вызова sp_send_dbmail узнать его статус?
Постоянно, раз в минуту, обращаться к msdb.dbo.sysmail_allitems как то некрасиво.
8 дек 15, 16:41    [18531062]     Ответить | Цитировать Сообщить модератору
 Re: Получить статус отправки письма.  [new]
mag2000
Member

Откуда:
Сообщений: 182
mezzanine,
Можно просто анализировать значение return code этой ф-ии как пишут в BOOL:
https://technet.microsoft.com/en-us/library/ms190307(v=sql.105).aspx
автор
Return Code Values
A return code of 0 means success. Any other value means failure. The error code for the statement that failed is stored in the @@ERROR variable.
Result Sets
On success, returns the message "Mail queued."
9 дек 15, 05:32    [18533039]     Ответить | Цитировать Сообщить модератору
 Re: Получить статус отправки письма.  [new]
mag2000
Member

Откуда:
Сообщений: 182
mag2000,
Ошибка:
sp_send_dbmail - процедура конечно, а не ф-я
9 дек 15, 05:34    [18533040]     Ответить | Цитировать Сообщить модератору
 Re: Получить статус отправки письма.  [new]
mezzanine
Member

Откуда:
Сообщений: 157
mag2000,

Не совсем то. Эта процедура возвращает статус постановки сообщения (мыла) в очередь. А уж дальше внешняя программа пытается отправить сообщение и там уж могут быть разные статусы. Собственно эта внешняя программа пишет результат еще в одну очередь, после обработки которой обновляется системная таблица msdb.dbo.sysmail_allitems.
9 дек 15, 11:44    [18534179]     Ответить | Цитировать Сообщить модератору
 Re: Получить статус отправки письма.  [new]
mezzanine
Member

Откуда:
Сообщений: 157
Кстати. Как вариант, на эту таблицу навесил свой триггер:
CREATE TRIGGER trig_sysmail_mailitems_test
ON dbo.sysmail_mailitems
AFTER UPDATE
AS
BEGIN
  SET NOCOUNT ON;

  IF (UPDATE(sent_status))
  BEGIN
    UPDATE GASTRODEV.dbo.mail_mail
      SET test = i.sent_status
      FROM GASTRODEV.dbo.mail_mail mm,
           inserted i
    WHERE mm.mailitem_id = i.mailitem_id;
  END;

END;
GO


Но такой подход мне не сильно нравиться. Вешать триггеры на системные таблицы.
9 дек 15, 11:52    [18534226]     Ответить | Цитировать Сообщить модератору
 Re: Получить статус отправки письма.  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8494
mezzanine,

если важно получить статус немедленно используйте не SQL средства для рассылки, встроенные в клиентское приложение, например.
Непонятно, чего Вы добиваетесь этим контролем.
11 дек 15, 16:59    [18547711]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить