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

Exim: изменить адрес отправителя при отправке писем из локальной сети

У нас есть рабочая установка exim на сайте, где пользователи могут отправлять и получать почту. Мы пытаемся настроить сервер для отправки предупреждений и ошибок по электронной почте на адрес, находящийся за пределами локальной сети.

Проблема в:

Программа, которая отправляет письма, отправляет их, используя имя пользователя, под которым она работает, и локальное имя хоста сервера. Это приводит к тому, что письма имеют отправителя в формате: myapp@myserver.mydomain. Exim отправляет эти письма на SMTP-сервер провайдера, который отклоняет письма, поскольку у них есть нелегальный или непроверяемый отправитель (внутренний адрес).

Я думаю, мне нужно настроить exim для перезаписи отправителя, когда:

Я пробовал установить какую-то переписывание в конфиге exim, но не смог заставить его работать. Я бы показал то, что пробовал, но при последнем посещении сайта у меня закончилось время, и мне пришлось вернуться к исходной версии, потеряв все изменения, которые я пробовал.

Файл /etc/email-addresses должен решить проблему. Это стандартная часть дистрибутива exim. Вам нужно будет настроить одну запись для каждого локального пользователя, отправляющего электронную почту.

Попробуйте линию, чтобы /etc/email-addresses лайк:

 myapp:   donotreply@example.com

На вашем сервере MX добавьте псевдоним, например:

 donotreply:    :blackhole:

Использовать Reply-to: заголовок, чтобы получатель мог ответить на сообщение.

Файл /etc/email-addresses используется следующий код перезаписи, который должен быть в начале rewrite раздел конфигурационного файла.

*@+local_domains "${lookup{${local_part}}lsearch{/etc/email-addresses}\
                  {$value}fail}" Ffrs
begin rewrite
myapp@myserver.mydomain   legal.user@myserver.mydomain   SFfrs

Флаги имеют следующие значения:

  1. S - Переписывать все во время SMTP. Это означает, что все следующие флаги выполняются немедленно по мере поступления данных, к которым они применяются, а не откладываются на потом.
  2. F - Перепишите конверт из поля.
  3. f - Перепишите поле заголовка From :.
  4. r - Перепишите поле заголовка Reply-To :.
  5. s - Перепишите поле заголовка Sender-To :.

Читать Глава 31 спецификации Exim для получения более подробной информации о перезаписи сообщений.

/etc/email-addresses удобно, когда вам нужно только связать один адрес электронной почты для каждого имени пользователя. Однако, если вашему пользователю нужно отправлять электронные письма с несколькими адресами, вам придется изменить /etc/email-addresses каждый раз, и вы неизбежно будете использовать неправильный адрес.

Другой подход - отправить электронное письмо с помощью exim4 команда и ее -f вариант:

$ cat email|/usr/sbin/exim4 -f myapp@example.com recipient@example.com

Обратите внимание, что для -f для работы, вам нужно, чтобы ваш пользователь был в списке доверенных пользователей exim или exim, чтобы принять его как разрешенного ненадежного отправителя.

В моем случае последнее было по умолчанию, благодаря этому подстановочному знаку в /etc/exim4/conf.d/main/02_exim4-config_options:

untrusted_set_sender = *

Другое решение - добавить следующую строку в /etc/exim4/conf.d/main/00_local_settings (предполагая разделенную конфигурацию exim, и создайте ее, если она еще не существует):

MAIN_TRUSTED_USERS = yourusername

Оба варианта требуют перезагрузки конфигурации eximʻa. Под Debian:

# dpkg-reconfigure exim4-config