2

Мне интересно, можно ли создавать почтовые сообщения и помещать их в очередь постфиксов, просто записывая файлы на жесткий диск.

В настоящее время у меня есть скрипт, который использует сокетное соединение для выгрузки данных, но если бы я мог записать его прямо на жесткий диск, это значительно ускорило бы процесс. Это возможно?

3 ответа3

3

Да, используя очередь maildrop: http://www.postfix.org/MAILDROP_README.html#maildrop_queue

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

Существует модуль Perl Mail::Postfix::Postdrop, который помещает почту в каталог maildrop.

Mail::Postfix::Postdrop - Внедрение писем в каталог Postfix maildrop

  use Mail::PostFix::Postdrop 'inject';   
  inject $message, Sender     => 'alice@example.net',
                   Recipients => [ qw(bob@example.com carol@example.net) ];

Вы можете использовать сам postdrop (именно так команда sendmail вставляет почту в очередь):

 The  postdrop(1)  command  creates  a file in the maildrop
 directory and copies its standard input to the file.

Я тоже не сделал; дайте нам знать, если вам повезет с этим.

2

Когда-то давно можно было сделать именно это с Postfix. В конце концов, maildrop - это не что иное, как каталог, в который записываются файлы. Беда в том, что можно играть всевозможные трюки со всемирно доступным каталогом maildrop. (Это было давно известно даже тогда, когда Postfix был впервые написан.) Таким образом, в правильно настроенной системе вы не сможете просто записывать файлы.

Это почти наверняка не ваше узкое место в первую очередь. В конце концов, это электронная почта, о которой мы говорим, и есть такая большая вещь, как Интернет, которая часто является самой медленной частью системы. Я сильно подозреваю, что вы не проанализировали свои узкие места, чтобы увидеть, что и где они находятся, и что ваша идея о том, что запись непосредственно в файл спула "значительно ускорит процесс", основана на надежде, а не на измерении.

Довольно просто устранить любые задержки в диалоге отправки SMTP с конвейерной передачей SMTP. И, как упомянуто в другом ответе, использование утилиты sendmail Postfix, которая в данном случае является не более чем оболочкой для postdrop также является опцией. Но сохранение секунды при отправке сообщений, скорее всего, будет потеряно из-за шума, если реальным узким местом является, например, подключение к Интернету по телефонной линии.

2

Вы не должны втиснуть в очередь вот так, однако, вы можете использовать почтовые инструменты командной строки, например:

sendmail -i [recipient@address] < [file]

который, я думаю, должен сохранять все на стороне сервера, пока постфикс не попытается доставить.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .