Назад | Перейти на главную страницу

sendmail - убедитесь, что письмо отправлено

Я пытаюсь отправлять электронные письма через sendmail и не помещаю их в очередь. Я только хочу, чтобы электронные письма были отправлены, что до сих пор было большой проблемой.

И в sendmail.cf, и в submit.cf у меня есть этот параметр:

O QueueLA=99

В почтовом журнале написано, что данное письмо отправлено и поставлено в очередь. Серьезно, разве это не ужасно сбивает с толку?

Feb 10 17:04:34 nnn sendmail[27910]: r1AG4Q0V027910: to=vvv@someone.com, 
ctladdr=admin@vvv.se (33/33), delay=00:00:08, xdelay=00:00:04, 
mailer=relay, pri=30391, relay=[127.0.0.1] [127.0.0.1], dsn=2.0.0, 
stat=Sent (r1AG4U09027911 Message accepted for delivery)

Feb 10 17:04:36 nnn sm-mta[27913]: r1AG4U09027911: to=<vvv@someone.com>, 
delay=00:00:06, xdelay=00:00:02, mailer=esmtp, pri=120589, 
relay=mail1.someone.com. [207.106.200.39], dsn=2.0.0, stat=Sent 
(Queued! 1360512372 qp 15149 <201302101604.r1AG4Q0V027910@mail.nnn.se>)
  1. В момент записи этого журнала электронное письмо отправлено или нет?
  2. Есть ли способ предотвратить эту последнюю очередь?

SMTP не гарантирует, что электронное письмо достигнет адресата; это лучший механизм доставки без синхронной сквозной обратной связи о судьбе вашего трафика. Сервер, на который вы доставляете письма, должен напрямую сообщать вам, принимает ли он их для возможной доставки, но ему не нужно доставлять их синхронно (он может хранить их на потом и не сообщать вам), и ему не нужно доставлять их напрямую (путь состоит из нескольких переходов). На практике почти все демоны SMTP ставят почту в очередь.

Уведомления о доставке и прочтении, которые не пользуются широкой поддержкой из-за злоупотреблений со стороны спамеров, были разработаны для преодоления этого ограничения. Кроме того, серверы, расположенные позже, могут по своему усмотрению в будущем отправить вам уведомление, если они отклонят ваше сообщение после того, как исходный сервер, на который вы его передали, принял его, но не обязан.

Ваше приложение должно рассматривать принятие следующего перехода как успешное. Это самая надежная обратная связь, которую SMTP будет постоянно давать вам.

Зачем вам это менять? Именно так и должен работать sendmail. Sendmail, прежде чем подтвердить исходному отправителю, что он принял почту, сохраняет ее в очереди на жестком диске. Затем он забирает его и хранит физическую копию до тех пор, пока следующий получатель не подтвердит получение. Таким образом sendmail гарантирует, что почта не будет потеряна в случае серьезного сбоя системы или самого sendmail. Sendmail также задерживает почту по разным причинам. Иногда другие MTA, которые вы не контролируете, задерживают электронную почту (проблемы с сетью, загрузка системы, серый список). Ему нужно где-то безопасно хранить почту.

Электронная почта НЕ является механизмом своевременной доставки, как IM. В нормальных условиях подождите 2 секунды.

Вы поймете, что оно отправлено, когда увидите другой почтовый сервер со stat = Sent: relay = mail1.someone.com. [207.106.200.39], dsn = 2.0.0, stat = Sent

После некоторого исследования я обнаружил, что сообщение в скобках (Queued! 1360512372 qp 15149 <201302101604.r1AG4Q0V027910@mail.nnn.se>) - это сообщение от принимающего сервера.

это значит:

  1. да, электронное письмо отправлено.
  2. нет, так как сообщение поставлено в очередь на принимающем сервере.

Вот некоторые объяснения того, как я мог получить ответ: Статус журнала freebsd 8, что это значит? несколько цитат из ответа, который мне показался надежным:

«Запись статуса отправлено означает, что удаленный сервер принял сообщение».

«Комментарии в круглых скобках записи статуса - это ответ, данный удаленным сервером при отправке электронного письма. Это полезно, чтобы узнать, почему сообщение было отклонено, отложено или задержано».