Я хочу найти ответ на то, что происходит, когда я использую sp_send_dbmail
на SQL Server 2005. Я гуглил, но безуспешно, и я действительно не знаю, куда обратиться.
ЭтоЭто сценарий:
Я настроил функцию почты на нашем сервере SQL.У меня есть адреса электронной почты в одной таблице и содержание в другой таблице.Для каждого адреса, который я нахожу в своей таблице, я использую sp_send_dbmail
хранимую процедуру для компиляции нового сообщения по адресу.
Когда я позже запускаю свой собственный SP, который выполняет вышеупомянутое (берет письмо и компилируетновое сообщение для получателя), DatabaseMail90.exe запускается на сервере, и электронные письма отправляются.Но это то, где это становится сложным, потому что часть почты распространяется напрямую, вероятно, потому что она находится в одном домене и сети.Сложность состоит в том, что большинство - не все - внешняя почта получает ошибку в таблице msdb.dbo.sysmail_mailitems.Но смятение на этом не заканчивается.Некоторые электронные письма доставляются, хотя в таблице msdb.dbo.sysmail_mailitems сообщается об ошибке.
Этот запрос используется для просмотра статуса отправленных сообщений:
SELECT
mailitem_id,
recipients,
subject,
send_request_date,
sent_status, --0 new, not sent, 1 sent, 2 failure or 3 retry.
sent_date
FROM
msdb.dbo.sysmail_mailitems
WHERE
sent_status != 1
Я настроил базу данных Mail, системные параметры, такие как:
- Попытки повторной учетной записи: 3
- Задержка повторной попытки учетной записи (в секундах): 30
- Максимальный файлРазмер (в байтах): 50000000 (НИКОГДА не будет настолько большим, но просто на всякий случай)
- Запрещенные расширения вложенных файлов: exe, dll, vbs, js
- Database Mail Исполняемый файлМинимальное время жизни (в секундах): 300
- Уровень ведения журнала: расширенный
Мой почтовый профиль базы данных, является общедоступным и задан как профиль по умолчанию.Я также настроил существующий профиль.
Это SP, который выполняет все и начинает отправлять почту:
DECLARE @fldEmail AS VARCHAR(max)
DECLARE @fldSubject AS VARCHAR(max)
DECLARE @fldMessage AS VARCHAR(max)
DECLARE port_cursor CURSOR FOR
SELECT d.[E-Mail],s.Subject,s.HTMLMessage
FROM tbl_NAV_Sendout s,tbl_NAV_DistributionList d
OPEN port_cursor
FETCH NEXT FROM port_cursor
INTO @fldEmail, @fldSubject, @fldMessage
WHILE @@FETCH_STATUS = 0
BEGIN
EXEC msdb.dbo.sp_send_dbmail @recipients = @fldEmail, @subject = @fldSubject, @body = @fldMessage, @body_format = 'HTML', @file_attachments = 'C:\NAVDW\ECNAV.csv', @profile_name = 'DBMail'
FETCH NEXT FROM port_cursor
INTO @fldEmail, @fldSubject, @fldMessage
END
CLOSE port_cursor
DEALLOCATE port_cursor
Так что вопрос остается.Есть ли способ для меня настроить настройки, чтобы доставить электронную почту быстрее?И еще, реальный вопрос, почему иногда возникает ошибка при отправке электронной почты?Нет ничего плохого в адресе электронной почты, на который она отправляется.Где мне искать возможные ошибки в моем коде или в конфигурации Database Mail?Испытывали ли вы что-то подобное?
Какое описание ошибки в таблице msdb.dbo.sysmail_mailitems?Я имею в виду, что во внешний домен поступила ошибка, но почта доставлена.Или, если почта не доставлена, где я должен посмотреть, что вызывает проблему.