
Мне интересно, возможно ли создавать почтовые сообщения и помещать их в очередь Postfix, просто записывая файлы на жесткий диск.
В настоящее время у меня есть скрипт, который использует сокетное соединение для сброса данных, но если бы я мог записать его напрямую на жесткий диск, это значительно ускорило бы процесс. Возможно ли это?
решение1
Вам не следует так сильно забивать очередь, однако вы можете использовать почтовые инструменты командной строки, например:
sendmail -i [recipient@address] < [file]
который, как я думаю, должен хранить все данные на стороне сервера, пока Postfix не попытается их доставить.
решение2
Да, используя очередь maildrop:http://www.postfix.org/MAILDROP_README.html#maildrop_queue
Очереди Postfix — это просто каталоги в файловой системе; элементы очереди — это inode, которые перемещаются из одного каталога (очереди) в другой; файл использует специальный двоичный формат, содержащий все метаданные, необходимые для его обработки.
Существует модуль perlПочта::Postfix::Postdropкоторый помещает почту в каталог maildrop.
Mail::Postfix::Postdrop — вставка писем в почтовый каталог Postfix
use Mail::PostFix::Postdrop 'inject';
inject $message, Sender => '[email protected]',
Recipients => [ qw([email protected] [email protected]) ];
Вы можете использоватьпостдроп(именно так команда sendmail помещает почту в очередь):
The postdrop(1) command creates a file in the maildrop
directory and copies its standard input to the file.
Я не делал ни того, ни другого; дайте нам знать, если у вас что-то получится.
решение3
Когда-то это можно было сделать с помощью Postfix. В конце концов, maildrop — это не более чем каталог, в который записываются файлы. Проблема в том, что с каталогом maildrop, доступным для записи всем, можно проделывать всякие трюки. (Это было давно известно, даже в то время, когда Postfix был впервые написан.) Поэтому в правильно настроенной системе вы не сможете просто записывать файлы.
Это, скорее всего, не ваше узкое место. В конце концов, мы говорим об электронной почте, где есть большая штука под названием «Интернет», которая часто является самой медленной частью системы. Я сильно подозреваю, что вы не анализировали свои узкие места, чтобы увидеть, что и где они находятся, и что ваша идея о том, что запись напрямую в файл спула «значительно ускорит процесс», основана на надежде, а не на измерениях.
Довольно легко устранить любые задержки в диалоге отправки SMTP с помощью конвейеризации SMTP. И, как упоминалось в другом ответе, использование sendmail
утилиты Postfix — которая в данном случае представляет собой не более чем обертку postdrop
— также является вариантом. Но экономия секунды при отправке сообщения, скорее всего, затеряется в шуме, если вашим настоящим узким местом является, например, коммутируемое подключение к Интернету.