Exim:从本地networking发送邮件时更改发件人地址

我们在一个网站上有一个工作的临时设置,用户可以在这里发送和接收邮件。 我们正试图设置一个服务器,使用电子邮件发送一些警告和错误到本地networking以外的地址。

问题是:

发送邮件的程序使用它所运行的用户名和服务器的本地主机名来发送它们。 这导致邮件具有格式的发件人:[email protected]。 Exim将这些邮件发送到ISP的SMTP服务器,SMTP服务器拒绝邮件,因为他们有一个非法或不可validation的发件人(内部地址)。

我想我应该configurationexim重写发件人时:

  • 发件人的域名在本地networking上
  • 接收者的域名在本地networking之外

我尝试在eximconfiguration中设置某种重写,但没有设法使其工作。 我会展示我曾经尝试过的,但是在上次访问该网站时我耗尽了时间,不得不恢复到原来的版本,失去了我尝试的所有更改。

begin rewrite [email protected] [email protected] SFfrs 

这些标志具有以下含义:

  1. S – 在SMTP时间进行所有重写。 这意味着所有的下列标志都是立即完成的,因为它们所应用的数据已经进入,而不是延迟到以后。
  2. F – 从现场重写信封。
  3. f – 重写From:标题字段。
  4. r – 重写Reply-To:标题字段。
  5. s – 重写发件人到:标题字段。

有关消息重写的更多详细信息,请阅读Exim规范的第31章

文件/etc/email-addresses应该处理这个问题。 这是Exim发行版的标准部分。 您将需要为每个发送电子邮件的本地用户configuration一条logging。

尝试一行到/etc/email-addresses如:

  myapp: [email protected] 

在您的MX服务器上添加一个别名,如:

  donotreply: :blackhole: 

使用Reply-to:标题允许收件人回复邮件。

文件/etc/email-addresses使用下面的重写代码,它应该在configuration文件的rewrite部分的开头。

 *@+local_domains "${lookup{${local_part}}lsearch{/etc/email-addresses}\ {$value}fail}" Ffrs 

当你只需要关联每个用户名的一个电子邮件地址时, /etc/email-addresses是方便的。 但是,如果您的用户需要发送多个地址的/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 = * 

另一种解决scheme是在/etc/exim4/conf.d/main/00_local_settings添加以下行(假设exim的拆分configuration,如果它不存在,就创build它):

 MAIN_TRUSTED_USERS = yourusername 

这两个选项都需要重新加载exim的configuration。 在Debian下:

 # dpkg-reconfigure exim4-config