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


88

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

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

[编辑]

$ mail -s测试chris@example.org                                                                  
抄送: 
来自:foo@bar.org

测试中
。

产量

主题:测试
发送至:<chris@example.org>
X-Mailer:邮件(GNU Mailutils 1.1)
消息ID:<E1KdTJj-00025z-RK @ localhost>
来自:<chris @ localhost>
日期:2008年9月10日,星期三13:17:23 -0400

来自:foo@bar.org

测试中

“发件人:foo@bar.org”行是消息正文的一部分,而不是标头的一部分。


1
这是Unix的什么味道?以及哪个邮件版本?只是知道那在哪里行不通。
Vinko Vrsalovic

嗯,几乎全部。任何使用mailx或berkeley邮件的人都会以这种方式看到它。如果要影响标题,请编写整个标题并直接使用rmail或sendmail发送。
Thomas Kammeyer

哦,但是,对不起,我运行GenToo。
Thomas Kammeyer

作为记录,我使用mailx和Chris给出的示例。还是那是您的意思?
Vinko Vrsalovic

Vinko,您正在运行什么版本的UN * X?您是说通过“工作”获得了他的结果,还是得到了满足他需要的预期行为?这在某种程度上取决于消息提交在您的平台上的工作方式以及客户端是否在空白处添加行
Thomas Kammeyer

Answers:


106

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

  • -a开关,用于附加的报头应用,从供给:将被附加到发送邮件标题中的命令行头
  • $ 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

注意(2): CentOS用户,许多评论者还说,你需要使用-r-a

NB(3):此答案至少已有十年历史(1),当您从Google进入时,请记住这一点。


我只是在这里再次进行测试以确保确定,并且对我来说效果很好。并非所有邮件客户端都可以很好地与Reply-To配合使用,但是我认为到目前为止,这已解决了问题。手册页中提到了REPLYTO env变量,其他UNIX邮件程序也尊重它,emacs等。不过,我想您已经解决了问题。
cms,

我不认为这是邮件客户端...在原始消息文本中看不到Reply-To标头。但是,是的-a就足够了。
克里斯·康威

1
不,不是。但是:“由于许可原因,完整的GNU mailutils手册在Debian系统中不可用。” -aReply-To:...有效。
克里斯·康威,


4
在CentOS中,该mail -a选项表示“ attachemnet”。我需要使用-rmail -r from@whatever.com
equivalent8

42

在Centos 5.3上,我可以执行以下操作:

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

双破折号使邮件无法解析-f参数,并将其传递给sendmail本身。


2
不起作用。现在将3个地址添加到该地址。到地址,f地址和本地域
shorif2000 2014年

2
您能帮忙吗,这曾经有用-但是,由于最近的更新已不再起作用,它只是尝试另外向-f @ hostname发送电子邮件
威尔

1
在CentOS 6.3上不起作用。使用-r标志尝试以下@ ubuntu-fanboy答案。
2015年

25

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

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

适用于“ mailx”,但不适用于“ mail”。

$ 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根根23 2010-12-23 08:33 / etc / alternatives / mail-> / usr / bin / heirloom-mailx

5
知道mail在Ubuntu 14.04 LTS上预安装的GNU mailutils 命令支持-roption 也许有用,因此您可以轻松设置发件人地址。
gerlos 2015年

我已经在Debian 9.11上进行了测试,该选项也有效。
Fedir RYKHTIK

14
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

上面是我的解决方案。...可以在回复之前和之后添加任何额外的标头...只需确保在添加标头之前就知道标头的语法...。


1
这对于您的示例对我有用。当我更改电子邮件地址主题等时,所有标题都消失了?
bsmoo


5

也可以使用以下方式设置发件人名称和发件人地址:

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

出于某种原因,传递-F'Some Name'并且-fexample2@example.com不起作用,但是将-tto 传递给sendmail是可行的,并且“很容易”。


4

以下是一些选项:

  • 如果您有足够的特权,请配置sendmail以使用generics表进行重写

  • 自己编写整个标头(或邮寄给自己,用所有标头保存整个消息,然后重新编辑,然后从命令行使用rmail发送

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

这些并不完全相同,但是我让您进一步研究。

在我的便携式电脑上,我已将sendmail验证为外发邮件服务器的客户端,并且使用泛型使返回的邮件到达另一个帐户。它像一种魅力。我用fetchmail聚合传入的邮件。


4

我是从以上所有答案中得出的。当我尝试其中的每一个时,对我来说什么都没有。通过结合以上所有答案,我做了很多的尝试和总结,并得出了结论。我不确定这是否对您有用,但在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将邮件发送给任何人,并且该邮件由SenderNamefrom-id@email.com发送

希望这可以帮助。


这在/ usr / bin / mail中不起作用,也许您的命令用于sendmail。
basZero

3

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

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

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

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

为我工作!(也openBSD-Macbook pro。)
Aeonaut 2012年

1
更新-电子邮件收件人之前仍会看到我的本地帐户名from@example.com-例如“ Aeonaut from@example.com”。知道如何更改吗?
Aeonaut 2012年

3
对我不起作用。(os x山狮)“邮件:无法将-f和其他人发送给。”
强尼

3

谢谢BEAU

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

我刚刚找到了它,它对我有用。CentOS 5上邮件8.1的手册页没有提到这一点。对于-f选项,手册页显示:

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

因此,无论如何,这是个很棒的发现,谢谢。


1
-fmail在您的示例中当然不是一个选项,因为它前面有--。该选项将移交给您的MTA
Anthon

3

在Debian 7上,我仍然无法使用该问题的答案正确地设置发件人地址(永远是服务器的主机名),但是可以通过这种方式解决它。

安装传家宝邮箱

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")

update-alternatives命令在做什么?它给了我3个选择,我很困惑。
Stephane'7

1

在CentOS上,这对我有用:

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

1

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

-S使您可以指定许多字符串选项,这是迄今为止修改标头等的最简单方法。


1

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

它可以在OpenBSD中使用。


0

这对我有用

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

0

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

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

要使其从everyth-else.com发送,只需对其进行修改,以便首先列出everyth-else.com,例如:

...
11.22.33.44 whatever-else.com本地主机默认域
...

我不能代表任何其他发行版(甚至CentOS版本),但是在我的特定情况下,上面的方法可以完美地工作。


0

是什么让我有一个自定义回复地址上Ubuntu 16.04UTF-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)

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"

-1

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

export EMAIL=myfrom@example.com
export REPLYTO=myreplyto@example.com
mutt -s Testing chris@example.org
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.