我正在使用 mailx 从脚本发送电子邮件。该脚本每天由 systemd 使用 .service 和 .timer 文件运行。出于测试目的,我从命令行发送。
邮件是通过命令发送的
echo "Test message - you know the drill" | mailx -r "[email protected]" -s "Test Message" [email protected]
(出于隐私考虑,替换了个人数据)
这有效。它通过 postfix 转发到我的网关服务器(也是 postfix),该服务器对传出消息进行签名。然后,该邮件会传送到 GMail,GMail 会验证 SPF 数据和 DKIM 签名,并将邮件传送到我的收件箱。
这很好,除了显示为Ubuntu <[email protected]>
我有其他服务器通过相同的方法发送邮件,并且它们都显示类似。
我想将每个服务器的显示名称更改为更有用的名称。例如,但我正在做的事情是在地址传输到网关服务器时弄乱地址。Web Server <[email protected]>
From
我试过了
echo "Test message - you know the drill" | mailx -r "Web Server [email protected]" -s "Test Message" [email protected]
和
echo "Test message - you know the drill" | mailx -r "Web Server <[email protected]>" -s "Test Message" [email protected]
但在这两种情况下,本地 PostFix 都会以某种方式丢失发件人地址,并且发送到网关服务器的消息的地址from
为[email protected]
网关smtp.private.example.uk
服务器的 FQDN。该邮件被发送到 GMail,但未通过 SPF 和 DKIM 测试,因此被毫不客气地丢弃在垃圾邮件中。 (我不知道本地postfix是如何获取网关服务器的名称的)
那么,如何将显示名称添加到传递给 mailx 的参数中,以便它能够在从服务器到服务器的过程中幸存下来并由 GMail 正确显示?
Mailx 版本 3.14 (GNU Mailutils) Ubuntu 22.04
我只对 PostFix 进行了一项更改main.cf
:为网关服务器添加了中继主机地址。
答案1
由于您想要使用预安装的程序并且安装了 postfix,因此我们可以使用 postfix 模式让您更好地控制发送的内容及其外观。
这是通过sendmail -t
.在这种模式下,我们使用 postfix 作为邮件提交代理(MSA),无论如何mailx
,您可以指定整个标头和正文,postfix 将“按原样”发送它
一个简单的方法是使用echo
.
例如
echo "From: My name <me@myaddress>
To: You <you@youraddress>
Subject: You'll never guess what...
This is a test!" | /usr/sbin/sendmail -t
这允许您将任何标头设置为您喜欢的任何值。
现在这并没有改变信封发件人,因此原始名称在其他行中可见,因此它并不完美(但mailx
如果发件人地址与帐户的地址不匹配,您会得到它),但它避免了任何复杂性mailx
或其他邮件用户代理(MUA)可能带进。