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

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

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

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

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

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

В качестве третьего варианта можно использовать почтовый фильтр, такой как почтовая рассылка Courier с предварительной строкой перед ним. 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