在Unix“邮件”中更改“发件人:”地址

时间:2008-09-10 17:08:38

标签: unix email

使用mail TO_ADDR从Unix命令行发送消息会产生来自$USER@$HOSTNAME的电子邮件。有没有办法更改mail插入的“发件人:”地址?

为了记录,我在Ubuntu上使用GNU Mailutils 1.1 / 1.2(但我看到Fedora和RHEL的行为相同)。

[编辑]

$ mail -s Testing chris@example.org                                                                  
Cc: 
From: foo@bar.org

Testing
.

产量

Subject: Testing
To: <chris@example.org>
X-Mailer: mail (GNU Mailutils 1.1)
Message-Id: <E1KdTJj-00025z-RK@localhost>
From: <chris@localhost>
Date: Wed, 10 Sep 2008 13:17:23 -0400

From: foo@bar.org

Testing

“From:foo@bar.org”行是邮件正文的一部分,而不是标题的一部分。

20 个答案:

答案 0 :(得分:96)

在我的邮件版本(Debian linux 4.0)中,以下选项可用于控制源/回复地址

  • -a 开关,用于要应用的其他标头,在命令行上提供将附加到外发邮件标头的From:标头
  • $ REPLYTO 环境变量指定了回复:标题

所以以下顺序

export REPLYTO=cms-replies@example.com
mail -aFrom:cms-sends@example.com -s 'Testing'

结果,在我的邮件客户端,是来自cms-sends@example.com的邮件,任何回复都将默认为cms-replies@example.com

注意: Mac OS用户:你没有-a,但确实有 $ REPLYTO

NB(2): CentOS用户,许多评论者补充说您需要使用-r而不是-a

注意事项(3):这个答案至少有十年之久(1),请您在加入Google时牢记这一点。

答案 1 :(得分:42)

在Centos 5.3上,我能够做到:

mail -s "Subject" user@address.com -- -f from@address.com < body

双短划线阻止邮件解析-f参数并将其传递给sendmail本身。

答案 2 :(得分:21)

GNU mailutils的'mail'命令不允许你这样做(至少很容易)。但是如果你安装'heirloom-mailx',它的邮件命令(mailx)有'-r'选项来覆盖字段中默认的'$ USER @ $ HOSTNAME'。

echo "Hello there" | mail -s "testing" -r sender@company.com recipient@company.com

适用于'mailx'但不适用于'邮件'。

$ ls -l /usr/bin/mail
lrwxrwxrwx 1 root root 22 2010-12-23 08:33 /usr/bin/mail -> /etc/alternatives/mail
$ ls -l /etc/alternatives/mail
lrwxrwxrwx 1 root root 23 2010-12-23 08:33 /etc/alternatives/mail -> /usr/bin/heirloom-mailx

答案 3 :(得分:13)

mail -s "$(echo -e "This is the subject\nFrom: Paula <johny@paula.com>\n
Reply-to: 1232564@yourserver.com\nContent-Type: text/html\n")" 
milas.josh@gmail.com < htmlFileMessage.txt

上面是我的解决方案......任何额外的标题都可以在回复之后和之前添加...只是确保你在添加它们之前知道你的标题语法....这对我来说非常有用

答案 4 :(得分:7)

另外,最好使用-F option指定发件人名称。

这样的事情:

mail -s "$SUBJECT" $MAILTO -- -F $MAILFROM -f ${MAILFROM}@somedomain.com

或者只看一下可用选项: http://www.courier-mta.org/sendmail.html

答案 5 :(得分:5)

也可以使用以下内容设置发件人姓名和地址:

 echo test | mail -s "test" example@example.com -- -F'Some Name<example2@example.com>' -t

由于某些原因,传递-F'Some Name'-fexample2@example.com不起作用,但将-t传递给sendmail是有效的并且“很容易”。

答案 6 :(得分:4)

以下是一些选项:

  • 如果您有足够的privelige,请将sendmail配置为使用泛型表进行重写

  • 自己编写整个标题(或将其邮寄给自己,使用所有标题保存整个邮件,然后重新编辑,并使用命令行中的rmail发送

  • 使用sendmail直接发送,请使用“-f”命令行标记,并且不要在邮件中包含“发件人:”行

这些并非完全相同,但我会留待你进一步研究。

在我的便携式计算机上,我有sendmail身份验证作为客户端到外发邮件服务器,我使用泛型使返回的邮件进入另一个帐户。它就像一个魅力。 我使用fetchmail聚合传入邮件。

答案 7 :(得分:3)

我不知道它是否与其他操作系统相同,但在OpenBSD中,mail命令具有以下语法:

mail to-addr ... -sendmail-options ...

sendmail有-f选项,您可以在其中指明FROM:字段的电子邮件地址。以下命令适用于我。

mail recepient@example.com -f from@example.com

答案 8 :(得分:3)

感谢BEAU

mail -s "Subject" user@address.com -- -f from@address.com

我刚发现这个,它对我有用。 CentOS 5上邮件8.1的手册页没有提到这一点。对于-f选项,手册页说:

  

-f从文件操作数指定的文件而不是系统邮箱中读取消息。 (另请参阅文件夹。)如果未指定文件操作数,请从mbox而不是系统邮箱中读取消息。

所以无论如何,这很好找,谢谢。

答案 9 :(得分:3)

我从上述所有答案中得出了这一点。当我尝试每一个时,没有什么对我有用。通过结合上述所有答案,我做了很多追踪和错误,并得出结论。我不确定这对你有用,但在Ununtu 12.04和RHEL 5.4上它对我有用。

echo "This is the body of the mail" | mail -s 'This is the subject' '<receiver-id1@email.com>,<receiver-id2@email.com>' -- -F '<SenderName>' -f '<from-id@email.com>'

可以通过添加任意数量的接收者ID将邮件发送给任意数量的人,并且发件人名称 from-id@email.com <发送邮件/ p>

希望这有帮助。

答案 10 :(得分:3)

在Debian 7上,我仍无法使用此问题的答案(始终是服务器的主机名)正确设置发件人地址,但以这种方式解决了。

安装 heirloom-mailx

apt-get install heirloom-mailx

确保它是默认值。

update-alternatives --config mailx

撰写邮件。

mail -s "Testing from & replyto" -r "sender <sender@example.com>" -S replyto="sender@example.com" recipient@example.net < <(echo "Test message")

答案 11 :(得分:2)

echo "body" | mail -S from=address@foo.com "Hello"

-S允许您指定许多字符串选项,这是修改标题等最简单的方法。

答案 12 :(得分:1)

在CentOS上,这对我有用:

echo "email body" | mail -s "Subject here" -r from_email_address email_address_to

答案 13 :(得分:0)

在CentOS 5.5上,我发现从域设置默认值的最简单方法是修改hosts文件。如果您的hosts文件包含您的WAN /公共IP地址,只需修改为其列出的第一个主机名。例如,您的hosts文件可能如下所示:

  

...
  11.22.33.44 localhost default-domain whatever-else.com
  ...

要从whatever-else.com发送,只需修改它,以便首先列出whatever-else.com,例如:

  

...
  11.22.33.44 whatever-else.com localhost default-domain
  ...

我不能代表任何其他发行版(甚至是CentOS版本),但在我的特定情况下,上述功能完美无缺。

答案 14 :(得分:0)

这对我有用

echo "hi root"|mail -rsawrub@testingdomain.org -s'testinggg' root

答案 15 :(得分:0)

回声“测试”| mailx -r fake@example.com -s'test'email@example.com

它适用于OpenBSD。

答案 16 :(得分:0)

允许我使用Ubuntu 16.04编码和文件附件在UTF-8上设置自定义回复地址:

安装邮件客户端:

sudo apt-get install heirloom-mailx

编辑SMTP配置:

sudo vim /etc/ssmtp/ssmtp.conf
mailhub=smtp.gmail.com:587
FromLineOverride=YES
AuthUser=???@gmail.com
AuthPass=???
UseSTARTTLS=YES

发送邮件:

sender='send@domain.com'
recipient='recipient@domain.com'
zipfile="results/file.zip"
today=`date +\%d-\%m-\%Y`
mailSubject='My subject on the '$today
read -r -d '' mailBody << EOM
Find attached the zip file.

Regards,
EOM
mail -s "$mailSubject" -r "Name <$sender>" -S replyto="$sender" -a $zipfile $recipient < <(echo $mailBody)

答案 17 :(得分:0)

以上解决方案均不适合我...

#!/bin/bash

# Message
echo "My message" > message.txt

# Mail
subject="Test"
mail_header="From: John Smith <john.smith@example.com>"
recipients="recipient@example.com"

#######################################################################
cat message.txt | mail -s "$subject" -a "$mail_header" -t "$recipients"

答案 18 :(得分:0)

我最近的 GNU mailutils mail 版本只是 mail -r foo@bar.com

查看原始发送邮件,似乎同时设置了 Return-Path: <foo@bar.com>From: foo@bar.com

答案 19 :(得分:-1)

之前提供的答案在CentOS5上对我不起作用。我安装了mutt。它有很多选择。用mutt你这样做:

export EMAIL=myfrom@example.com
export REPLYTO=myreplyto@example.com
mutt -s Testing chris@example.org