Показать статистику
+1 голос
от (2.5тыс. баллов)
редактировать от

Ситуация такая. Адреса получателя хранятся в базе данных mysql, поэтому мне необходимо вызвать скрипт для получения адресов перед пересылкой почты. Уже делал попытки отправить письмо в сценарий PHP, затем проанализировать письмо и переслать его через PHP Mail. Правда имеются недостатки, поскольку приходится полагаться на анализатор электронной почты и обрабатывать заголовки, вложения и кодирование самостоятельно.

Может быть имеется более простой вариант с использованием bash-скрипта для получения получателей и пересылки почты?

345 просмотров 1 ответов

1 Ответ

0 голосов
от (26.4тыс. баллов)

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

с предварительной строкой. http://www.courier-mta.org/maildrop/ Тем не менее, исправления MySQL, похоже, были заброшены, и источники можно найти только в старых архивах исходных кодов дистрибутива Linux. Вы все еще можете использовать 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
...