Как изменить имя отправителя (не адрес электронной почты) при использовании почтовой команды Linux для автоматической отправки почты?

Почтовый ящик показывает имя отправителя как «Apache», потому что почта, которую я автоматически отправляю, отправляется из программы Perl CGI. Как изменить его на что-то другое?


person therobyouknow    schedule 30.06.2011    source источник


Ответы (6)


Вам просто нужно добавить заголовок From:. По умолчанию его нет.

echo "Test" | mail -a "From: Someone <[email protected]>" [email protected]

Вы можете добавить любые пользовательские заголовки, используя -a:

echo "Test" | mail -a "From: Someone <[email protected]>" \
                   -a "Subject: This is a test" \
                   -a "X-Custom-Header: yes" [email protected]
person sam hocevar    schedule 30.06.2011
comment
Это не сработало. Извиняюсь. - person therobyouknow; 01.07.2011
comment
Что ж, так и должно быть... Возможно, почтовый сервер переписывает электронную почту, чтобы обеспечить согласованность конверта/содержимого, и в этом случае вы не сможете использовать mail. Можете ли вы проверить, работает ли он с пользовательским заголовком? - person sam hocevar; 01.07.2011
comment
Hocevar Мне нужно знать, как использовать его с пользовательским заголовком. Не стесняйтесь советовать. - person therobyouknow; 02.07.2011
comment
@Rob: я отредактировал сообщение, чтобы привести пример пользовательского заголовка. - person sam hocevar; 02.07.2011
comment
+1 @Sam Hocevar, спасибо за пример пользовательского заголовка. - person therobyouknow; 03.07.2011
comment
Это сработало идеально для меня ... - person sillyMunky; 19.05.2012
comment
Эта команда возвращает следующую ошибку: From: Someone <[email protected]>: No such file or directory Как будто адрес электронной почты обрабатывается как каталог. Обе команды не работают в Fedora 17. Вы передали строку, которая не является файлом, в параметр «-a», это не сработает. - person Eric Leschinski; 14.11.2012
comment
@EricLeschinski версии Sendmail и Postfix mail ожидают, что -a будет передана строка, а не файл. Какое программное обеспечение электронной почты вы используете в Fedora? - person sam hocevar; 15.11.2012
comment
Пытаюсь закрыть этот вопрос и принять ответ. Я попробовал ваше предложение @SamHocevar, но мне это не удалось - электронное письмо не отправлено. Я постараюсь предоставить более подробную информацию позже. - person therobyouknow; 22.02.2013
comment
К сожалению, не работает и для Amazon Linux (AMI). - person Milan Velebit; 27.11.2017

mail -s "$(echo -e "This is the subject\nFrom: Paula <[email protected]>\n
Reply-to: [email protected]\nContent-Type: text/html\n")" 
[email protected] < htmlFileMessage.txt

приведенное выше мое решение ... просто замените «Паула» на любое имя, которое вы хотите, например, Джонни Браво ... любые дополнительные заголовки могут быть добавлены сразу после и перед ответом на ... просто убедитесь, что вы знаете синтаксис заголовков перед добавление их .... это отлично сработало для меня.

person MoSs    schedule 25.07.2012
comment
Это сработало, вы помещаете команду в 3 строки, 3 строки должны быть одной строкой, например: mail -s "$(echo -e "This is the subject\nFrom: Paula <[email protected]> Reply-to: [email protected]\nContent-Type: text/html\n")" [email protected] < htmlFileMessage.txt - person Eric Leschinski; 14.11.2012
comment
Этот ответ еще не был успешным. Постараюсь предоставить подробную информацию о том, как я это называю. - person therobyouknow; 22.02.2013
comment
БЛАГОДАРЮ ВАС. Я не спал 7 дней подряд, пытаясь заставить это работать. Это было единственное решение, которое сработало для меня! - person Eric; 11.12.2014

Вы можете использовать опцию «-r», чтобы установить адрес отправителя:

mail -r [email protected] -s ...

Если вы также хотите указать свое настоящее имя в поле «от кого», вы можете использовать следующий формат

mail -r "[email protected] (My Name)" -s "My Subject" ...
person RafaSashi    schedule 14.05.2015
comment
Примечание: -r — это GNU-изм. Недоступно в BSD. - person jwd; 27.07.2017

Если заголовок From: не указан в заголовках электронной почты, MTA использует полное имя текущего пользователя, в данном случае «Apache». Вы можете редактировать полные имена пользователей в /etc/passwd

person user1106046    schedule 01.04.2012
comment
+1 спасибо, я проверю это. - person therobyouknow; 01.04.2012
comment
Это a решение, но оно не будет принятым, так как я бы предпочел не менять Apache на другой только ради изменения отправителя электронной почты. Случай, когда Хвост виляет собакой и все такое. Должна быть возможность изменить имя сервера, в конце концов, разработчики многих сайтов-автоответчиков прекрасно с этим справляются. - person therobyouknow; 22.02.2013
comment
Спасибо чувак. Это работает для меня. Ты ГЕЙ! - person Henrique Van Klaveren; 30.12.2019

Это зависит от того, о каком адресе отправителя вы говорите. Адрес отправителя, видимый в почтовой программе получателей, извлекается из заголовка «От:». который, вероятно, можно легко установить из вашей программы.

Если вы говорите об адресе отправителя конверта SMTP, вы можете передать аргумент -f двоичному файлу sendmail. В зависимости от конфигурации сервера вам может быть запрещено делать это с пользователем apache.

из справочной страницы sendmail:

   -f <address>
                 This  option  sets  the  address  of the envelope sender of a
                 locally-generated message (also known as  the  return  path).
                 The  option  can normally be used only by a trusted user, but
                 untrusted_set_sender can be set to allow untrusted  users  to
                 use it. [...]
person Gryphius    schedule 30.06.2011
comment
Я использую команду mail, а не sendmail. Мне сообщили, что почта более универсальна, чем sendmail, и поэтому с большей вероятностью будет работать на различных дистрибутивах и платформах, так ли это? - person therobyouknow; 01.07.2011
comment
afaik, наиболее распространенные реализации MTA предоставляют общий интерфейс, совместимый с sendmail, и обычно для сценариев cgi вызывают sendmail напрямую. - person Gryphius; 01.07.2011
comment
+1 спасибо @Gryphius. Тогда я посмотрю на sendmail и попробую ваш ответ. Во-первых, мне нужно сопоставить аргументы, с которыми я вызывал mail, с эквивалентами в sendmail. Я вернусь позже. - person therobyouknow; 01.07.2011

В Ubuntu 14.04 ни одно из этих предложений не сработало. Postfix переопределит пользователя, вошедшего в систему, в качестве отправителя. Сработало следующее решение, указанное по этой ссылке --> Change адрес исходящей почты от root@servername - postfix sendgrid в стойке

ШАГИ:

1) Убедитесь, что это установлено в /etc/postfix/main.cf:

   smtp_generic_maps = hash:/etc/postfix/generic

2) echo 'www-data [email protected]' >> /etc/postfix/generic

3) sudo postmap /etc/postfix/generic

4) перезапуск постфиксной службы sudo

person Andy    schedule 06.05.2015