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

8

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

Проблема в:

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

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

  • домен отправителя находится в локальной сети
  • домен получателя находится за пределами локальной сети

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

Эса Варемо
источник

Ответы:

9
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 для более подробной информации о переписывании сообщений.

Kondybas
источник
1
Вот как я заставил его работать, за исключением: ^в начале правила должно быть , как Sисключает регулярное выражение
Эса Варемо
1
s должно быть " Sender:" заголовок не " Sender-To:" (и это слишком маленькое изменение, чтобы редактировать сообщение)
Герт ван ден Берг
11

Файл /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
BillThor
источник
/etc/email-addressesне существует на моем сервере. Могу ли я просто создать его, или это означает, что чего-то не хватает?
Эса Варемо
@EsaVaremo Grep ваш файл конфигурации для email-addressesили проверьте ваш файл конфигурации для раздела перезаписи. Возможно, это не было настроено в вашем дистрибутиве.
BillThor
Я попробовал grep, locateи посмотрел на несколько man-pages, но ничего не нашел. Должен ли файл быть определен в exim.conf?
Эса Варемо
@EsaVaremo Строка в конце моего ответа должна быть в разделе перезаписи exim.conf. Если оно отсутствует, добавьте его. Убедитесь, что переменная local_domainsвключает ваш домен.
BillThor
Я заметил ваше изменение через некоторое время после того, как я сделал свой последний комментарий. По какой-то причине я не смог заставить это работать, поэтому я пошел с другим ответом, так как у меня не хватало времени. Я не сомневаюсь, что это правильно, я, вероятно, только что что-то опечатал / настроил ...
Esa Varemo
1

/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. Под Debian:

# dpkg-reconfigure exim4-config
Скиппи ле Гран Гуру
источник