Я использую почтовый сервер Postfix / Dovecot для личного использования. Есть только несколько настоящих почтовых ящиков, по сути только postmaster@domain.com
и username@domain.com
.
Я часто использую этот virtual
файл для создания виртуальных почтовых ящиков для пересылки username@domain.com
. У меня есть несколько таких для одноразовых учетных записей, таких как разовые покупки в интернет-магазинах, онлайн-игры, которые я хочу попробовать, не беспокоясь о спаме и т. Д. Для этого я выполняю SSH и выполняю следующие команды:
sudo vim /etc/postfix/virtual
# add a line that looks like:
# # username_servicename@domain.com username@domain.com
sudo postmap virtual
sudo service postfix restart
Я делаю это с достаточной частотой, чтобы автоматизировать процесс до некоторой степени. Я подумал о том, чтобы просто написать сценарий оболочки, который бы использовал виртуальный почтовый ящик и реальный почтовый ящик в качестве аргументов и сам внес изменения, но я надеюсь на что-то еще большее.
Я хотел бы иметь возможность отправить электронное письмо username@domain.com
на другой почтовый ящик на сервере с именем виртуального почтового ящика в качестве тела сообщения. Проблема заключалась бы в sudo
вызовах, но я могу создать нового пользователя, чья единственная ответственность - справиться с этим, который должен справиться с этим.
Главным образом вопрос заключается в следующем: как я могу создать событие, которое будет вызвано по электронной почте? Есть ли где-нибудь сервис, который делает это? Могу ли я настроить Postfix или Dovecot для прослушивания этого письма и запуска команд для этого события?
Ответы:
Правильная процедура для выполнения сценария (я использую сценарий оболочки) при получении почтового сообщения заключается в следующем. Он включает в себя изменение файла конфигурации postfix , master.cf (который в моем Debian находится в / etc / postfix ) путем добавления следующей строки:
который инструктирует postfix запускать скрипт (вам нужно сделать его исполняемым), когда происходит какое-то событие.
Чтобы указать, когда выполнять скрипт, вы должны сделать следующее: предположим, что вы хотите, чтобы он выполнялся, когда username@domain.com получает сообщение. Поместите следующую строку
внутри файла /etc/postfix/address.txt ; вам нужно будет создать соответствующую базу данных для постфикса, чтобы использовать этот файл, что вы делаете с помощью
который выводит файл с именем /etc/postfix/address.db . Теперь вернитесь к файлу /etc/postfix/main.cf и добавьте следующую строку:
Теперь перезапустите постфикс ,
и тебе должно быть хорошо идти.
источник
sendmail
прямое на сервере не сработает.pickup
опцию.Я вижу два очевидных решения.
Если вы используете procmail в качестве MDA на своем сервере или хотите перейти на его использование, вы можете запустить любой произвольный сценарий для любого произвольного электронного письма с помощью
|
действия рецепта procmail (pipe). Надеемся, что он не будет запущен от имени пользователя root, но должно быть легко создать сценарий, который выполняет требуемую магию и который может быть вызван без пароля соответствующим пользователем как root. Выходные данные сценария могут даже быть возвращены в одно и то же электронное письмо, а позднее доставлено по электронной почте, сделав рецепт действием фильтра.Альтернатива (которая требует меньше практического обслуживания) - создать один почтовый ящик и настроить Postfix
$recipient_delimiter
для того, чтобы он обычно не использовался для этой цели; например,.
или-
. Обратите внимание, что receient_delimeter - это настройка для всего сервера. Допустим, вы настроили почтовый ящикdummy@example.com
и настроили$recipient_delimeter = .
. Это позволит затемdummy.<anything>@example.com
доставить на локальный почтовый ящик, соответствующийdummy@example.com
. Чтобы отключить один из них, добавьтеdummy.<whatever>@example.com
к соответствующей таблице получателей с действием отклонения. Недостатком является то, что это будет универсальный почтовый ящик для префикса, поэтому вы захотите сделать так, чтобы префикс трудно было натолкнуть на случайные или словарные атаки. Положительным моментом является то, что в обычном случае (отправитель уважает ваши пожелания и не перепродает ваш адрес электронной почты) этот подход не требует обслуживания, и вы всегда можете изменить свой префикс позже и явно перечислить те комбинации, которые вы хотите сохранить при получении почты для ,источник
В случае, если ссылка не работает, вот краткое изложение.
Сначала зайдите
master.cf
и зарегистрируйте свой скрипт «myhook», добавив следующую строку:myhook unix - n n - - pipe flags=F user=www-data argv=/path/to/script.sh ${sender} ${size} ${recipient}
Также отредактируйте строку smtp, чтобы Postfix запустил фильтр для любой почты, приходящей через SMTP-доставку:
smtp inet n - - - - smtpd -o content_filter=myhook:dummy
Обратите внимание, что если вы отправляете почту с помощью команды sendmail, фильтр не сработает. В этом случае добавьте опцию после «доставки»:
pickup fifo n - - 60 1 pickup -o content_filter=myhook:dummy
Перезапустите постфикс:
postfix reload
Сделайте ваш скрипт доступным для чтения и исполнения любым пользователем:
chmod +rx script.sh
Обратите внимание, что скрипт всегда запускается при получении любой почты. Чтобы указать точный адрес см. Ответ @MariusMatutiae.
источник