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

Как написать полное имя в Exim (реле)

У меня есть сервер ретрансляции на Exim. Мне нужно изменить полное имя отправителя в проходящих через него сообщениях. Например, это был «Иванов Иван i.ivanon@domain.com», а он стал «Иванов Иван i.ivanon@domain.com». Как это сделать?

С помощью Exime rewrite я могу изменить только адрес электронной почты.

Это нужно делать только для определенных отправителей

Спасибо

Вы можете удалить или добавить заголовки в ACL smtp_data. Итак, предположим, что у вас есть где-то таблица mysql, содержащая два столбца: один для исходного адреса, а другой для замены. В этом случае вы можете использовать что-то вроде этого (возможно, вы захотите изменить это, но это что-то, чтобы дать вам идею):

warn condition=${if eq {1}{ \
                       ${lookup mysql {SELECT 1 FROM the_table WHERE \
                         original_column='${quote_mysql:${sg{$h_From:}{ *<.*>\$}{}}}' } \
                   } \
                   {yes}{no} \
               }
     add_header = From: ${lookup mysql {SELECT replacement_column FROM the_table WHERE \
                         original_column='${quote_mysql:${sg{$h_From:}{ *<.*>\$}{}}}' } ${sg{$h_From:}{.*(<[^>]+>)}{\$1}}
     remove_header = From:

Или, предположим, у вас есть файл /etc/exim4/fullnames.txt в котором находятся подстановки (имейте в виду, однако, что это будет последовательно читать файл):

   warn condition=${if eq \
                {${lookup{${sg{$h_From:}{ *<.*>\$}{}}}lsearch{/etc/exim4/fullname.txt}}}\
                {}\
                {no}{yes}}
            add_header = From: ${lookup{${sg{$h_From:}{ *<.*>\$}{}}}lsearch{/etc/exim4/fullname.txt}} ${sg{$h_From:}{.*(<[^>]+>)}{\$1}}
            remove_header = From:

Обратите внимание, что вы хотите заключить полные имена, используемые в качестве ключей поиска, в кавычки, чтобы избежать пробела между фамилией и именем. Итак, файл должен выглядеть так:

"Иванов Иван":Ivanov Ivan

Этот подход не самый лучший, но он должен работать. Он добавляет From: заголовок (который будет последним заголовком в сообщении) и удаляет From: заголовок (первый найденный, который будет исходным). Это происходит только в том случае, если таблица mysql или файл содержат подходящую замену.

Для замены предполагается, что адрес имеет форму «Отображаемое имя», согласно RFC2822 3.4. Для замены он вырезает часть <...>, а для нового заголовка возвращает его из исходного From: заголовок.

Подробнее о поисках в exim: Поиск файлов и баз данных