![Exim:在本地网络外发送邮件时更改发件人地址](https://linux22.com/image/619953/Exim%EF%BC%9A%E5%9C%A8%E6%9C%AC%E5%9C%B0%E7%BD%91%E7%BB%9C%E5%A4%96%E5%8F%91%E9%80%81%E9%82%AE%E4%BB%B6%E6%97%B6%E6%9B%B4%E6%94%B9%E5%8F%91%E4%BB%B6%E4%BA%BA%E5%9C%B0%E5%9D%80.png)
我们在网站上安装了可运行的 exim,用户可以在其中发送和接收邮件。我们正在尝试设置一个服务器,使用电子邮件向本地网络之外的地址发送一些警告和错误。
问题是:
发送邮件的程序使用其运行的用户名和服务器的本地主机名发送邮件。这导致邮件的发件人格式为:[电子邮件保护]。Exim 将这些邮件发送到 ISP 的 SMTP 服务器,该服务器会拒绝这些邮件,因为它们的发件人(内部地址)是非法的或无法验证的。
我认为我应该配置 exim 在以下情况下重写发件人:
- 发件人的域名位于本地网络上
- 接收方的域在本地网络之外
我尝试在 exim 配置中设置某种重写,但未能成功。我本想展示我尝试过的方法,但上次访问网站时时间不够,不得不恢复到原始版本,从而丢失我尝试过的所有更改。
答案1
begin rewrite
[email protected] [email protected] SFfrs
这些标志的含义如下:
- S - 在 SMTP 时进行所有重写。这意味着所有以下标志都会在它们适用的数据进入时立即完成,而不会延迟到稍后。
- F-从字段重写信封。
- f-重写 From: 标题字段。
- r-重写 Reply-To:标头字段。
- s——重写 Sender-To:标头字段。
读第 31 章有关消息重写的更多详细信息,请参阅 Exim 规范
答案2
该文件/etc/email-addresses
应该可以解决问题。这是 Exim 发行版的标准部分。您需要为每个发送电子邮件的本地用户配置一条记录。
尝试一行来/etc/email-addresses
喜欢:
myapp: [email protected]
在您的 MX 服务器上添加一个别名,例如:
donotreply: :blackhole:
使用Reply-to:
标题允许收件人回复消息。
该文件使用以下重写代码,该代码应位于配置文件部分的 /etc/email-addresses
开头。rewrite
*@+local_domains "${lookup{${local_part}}lsearch{/etc/email-addresses}\
{$value}fail}" Ffrs
答案3
/etc/email-addresses
当你只需要关联一每个用户名的电子邮件地址。但是,如果您的用户需要发送带有多个地址的电子邮件,您每次都必须进行修改/etc/email-addresses
,并且最终不可避免地会使用错误的地址。
exim4
另一种方法是使用命令及其选项发送电子邮件-f
:
$ cat email|/usr/sbin/exim4 -f [email protected] [email protected]
请注意,要使该-f
选项起作用,您需要您的用户成为 exim 的信任用户,或者 exim 接受他作为允许的不受信任的发件人。
在我的例子中,后者是默认的,这要归功于这个通配符/etc/exim4/conf.d/main/02_exim4-config_options
:
untrusted_set_sender = *
另一个解决方案是添加以下行/etc/exim4/conf.d/main/00_local_settings
(假设 exim 的拆分配置,如果它不存在则创建它):
MAIN_TRUSTED_USERS = yourusername
这两个选项都需要重新加载 exim 的配置。在 Debian 下:
# dpkg-reconfigure exim4-config
答案4
默认情况下,exim 不信任用户,也不允许用户覆盖发件人。有几种方法可以阻止它这样做:
- 将所需用户添加到受信任用户列表:
trusted_users = user1:user2
- 允许不受信任的用户设置自己的发件人:
untrusted_set_sender = *
no_local_from_check