Я хочу найти ответ на то, что происходит, когда я использую 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? Я имею в виду, что на внешний домен сообщается об ошибке, но почта доставляется. Или, если почта не доставляется, где мне искать причину проблемы.