Пересылка почты с использованием qmail нескольким получателям динамически

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

Я уже пытался передать письмо в сценарий PHP, затем проанализировать письмо и переслать его через PHP Mail, но это имеет свои недостатки, так как вам нужно полагаться на анализатор электронной почты и обрабатывать заголовки, кодирование и вложения самостоятельно.

Есть ли более простое решение, например, использование сценария bash для получения получателей и пересылки почты?

1 ответ

Решение

Во-первых, решите, как часто этот список рассылки будет меняться. Если вы собираетесь добавлять пользователя время от времени, вам проще всего выполнить запрос MySQL из командной строки и вывести его в файл.qmail. Вы можете использовать это в работе cron каждую минуту / час / день / месяц / и т. Д. Для достижения ваших целей поддержания вашего списка рассылки в актуальном состоянии:

mysql -sN -e ‘SELECT CONCAT(“&”,emailaddress) FROM table WHERE criteria’ > .qmailtmp
if [ $? -eq 0 ]; then
  mv .qmailtmp .qmail
fi

Преимущество этой настройки заключается в том, что вы можете создать ее во временном расположении, а затем скопировать в файл.qmail после проверки ее успешности. Следовательно, ваша почта не перестает доставляться, когда ваш сервер MySQL выходит из строя. Это, вероятно, ваш самый быстрый, простой и лучший способ реализовать это. Это также гарантирует, что многие запросы для отправки на этот адрес электронной почты не будут генерировать огромный трафик MySQL и замедлять вашу доставку или перегружать количество соединений вашего сервера MySQL.

Если вам нужно что-то, что меняется более регулярно, учтите, что получатель исходного электронного письма всегда будет тем из переадресованных электронных писем, а не тем, кого вы пересылаете. Вы можете обнаружить, что это снижает возможности доставки из-за спам-фильтров. Чтобы решить эту проблему, вы можете найти менеджера списка рассылки, такого как ezmlm, как возможное решение, которое может хранить свой список подписчиков в базе данных MySQL.

В качестве третьего варианта можно использовать почтовый фильтр, такой как maildrop Курьера с предварительной строкой. http://www.courier-mta.org/maildrop/ Тем не менее, исправления MySQL, похоже, были заброшены, и я могу найти источники только в старых архивах исходных кодов дистрибутива Linux. Вы все еще можете использовать Maildrop для запуска внешней программы, такой как MySQL, чтобы получить свой список, но если вы собираетесь это сделать, это в основном то же самое, что и первый вариант, но в режиме реального времени. Поскольку я не могу найти ничего за 10 лет на maildrop-MySQL, вот пример использования внешней программы.

# set default Maildir
MAILDIR="$HOME/Maildir"
logfile "$HOME/mailfilter.log"

#user settings
DATABASE=<YOUR_DATABASE_USERNAME_HERE>
#mysql select
RESULT=`echo -ne "select toemail from addresses;" | mysql $DATABASE --skip-column-names`
### deliver to each RESULT here using your local methods
Другие вопросы по тегам