96

使用来自 Unix 命令行的结果从 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”行是邮件正文的一部分,而不是标题的一部分。

4

20 回答 20

114

在我的邮件版本(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 用户,很多评论者补充说你需要使用-rnot-a

注意(3):这个答案至少有十年的历史(1),当你从谷歌进来时请记住这一点。

于 2008-12-19T10:09:18.020 回答
42

在 Centos 5.3 上,我可以做到:

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

双破折号阻止邮件解析 -f 参数并将其传递给 sendmail 本身。

于 2010-01-13T18:04:57.533 回答
28

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
于 2010-12-23T13:53:34.180 回答
15
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

以上是我的解决方案....任何额外的标题都可以在 from 之后和回复之前添加...只需确保在添加它们之前了解您的标题语法....这对我来说非常有效。

于 2012-07-25T18:35:55.493 回答
7

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

像这样的东西:

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

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

于 2011-12-13T01:21:44.450 回答
5

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

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

出于某种原因,传递-F'Some Name'-fexample2@example.com不起作用,但传递-t到 sendmail 工作并且“容易”。

于 2013-09-25T14:16:32.917 回答
4

以下是一些选项:

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

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

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

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

在我的便携式设备上,我将 sendmail 作为客户端身份验证到外发邮件服务器,并且我使用泛型将返回的邮件发送到另一个帐户。它就像一个魅力。我用 fetchmail 汇总收到的邮件。

于 2008-09-10T17:16:29.627 回答
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 将邮件发送给任意数量的人,并且邮件由来自from-id@email.com的SenderName发送

希望这可以帮助。

于 2014-09-30T07:04:29.087 回答
3

谢谢博

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

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

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

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

于 2011-05-25T02:27:47.733 回答
3

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

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

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

mail recepient@example.com -f from@example.com
于 2011-05-25T12:31:21.470 回答
3

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

安装传家宝-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")
于 2015-03-01T01:11:10.317 回答
2

在 CentOS 上,这对我有用:

echo "email body" | mail -s "Subject here" -r from_email_address email_address_to
于 2014-02-18T14:13:15.743 回答
1

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

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

于 2016-04-15T09:09:55.013 回答
1

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

它适用于 OpenBSD。

于 2016-07-20T13:55:25.673 回答
0

这对我有用

echo "hi root"|mail -rsawrub@testingdomain.org -s'testinggg' root
于 2009-08-30T07:33:44.103 回答
0

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

...
11.22.33.44 localhost 默认域whatever-else.com
...

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

...
11.22.33.44不管什么-else.com本地主机默认域
...

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

于 2011-11-10T23:15:22.790 回答
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)
于 2017-07-03T14:43:17.450 回答
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"
于 2019-01-16T11:11:22.173 回答
0

我最近的GNU mailutilsmail版本很简单mail -r foo@bar.com

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

于 2021-05-12T14:18:30.860 回答
-1

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

export EMAIL=myfrom@example.com
export REPLYTO=myreplyto@example.com
mutt -s Testing chris@example.org
于 2014-06-04T08:54:01.177 回答