У меня есть сервер ретрансляции на 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: Поиск файлов и баз данных