如何通过其他服务器发送SMTP电子邮件?

时间:2017-07-21 14:26:50

标签: email smtp smtpproxy

我正在运行一堆Debian / Ubuntu服务器,其中包含一个核心主服务器,所有其他Web服务器都连接到该服务器。现在,当我们的核心服务器发送电子邮件时(就像有人通过我们的管理Web GUI发送电子邮件),第一个“Received:”标题列出了我们想要避免的主服务器的地址。

所以我的计划是设置一种方法,通过它真正应该来自的服务器发送电子邮件。因此,当我们从www.backend.com上的软件发送电子邮件时,我希望标题能够反映www.frontend.com。我尝试查找Ubuntu的SMTP代理,但没有找到太多,除了寻找一些名为MTA的东西。

我玩过nullmailer和msmtp,但我似乎无法按照我期望的方式工作,例如在www.backend.com上为此帐户设置SMTP凭据,以指向www.frontend.com并让前端服务器连接到我们的电子邮件提供商。我正在尝试做什么?

编辑 TL; DR

我一直在尝试设置SMTP中继服务器,但我无法远程连接到我的postfix SMTP服务器。如何在Debian Ubuntu上设置简单的电子邮件中继服务器?不确定这是否是正确的术语,因为似乎有数百篇文章解释了如何但我无法让一个人工作

1 个答案:

答案 0 :(得分:1)

您的 MTA 是后缀,您想要使用它两次;作为INTRANET主机和边缘中继。所以第一步是来删除收到的标头,但要确保允许继电器并且发生这将添加"前端"标头中继。一旦中继功能正常,继电器可以移除或替换标题行。

中继

继电器(FRONTEND) docs#relay_from

mynetworks = 127.0.0.0/8 IP_OF_BACKEND/32 ...others?

发件人(BACKEND) relayhost

relayhost = [www.frontend.com]

过滤继电器

对于简单过滤器,header_checks就足够了。

 header_checks = pcre:/etc/postfix/header_checks

(pcre - 确保已安装postfix-pcre支持,或者在下一个链接中按照POSIX正则表达式调试进行操作。)

通常最好清理标头而不是删除标头,因此该文件清除它的示例内容为here,但应该只匹配来自backend的重写接收标头,而不是全部主持人.*

因此,在检查了您想要替换的实际接收标头并决定将哪些部分保留为正则表达式组之后,您的替换可能是这样简单的:

 /^Received: from www.backend.com.*id\s(\w+).*/
   REPLACE Received: from [127.0.0.1] (localhost [127.0.0.1]) with SMTP id $1

删除收到的标头基本相同,但可以使用IGNORE操作而不是REPLACE,并且需要更简单的正则表达式,因为没有替代标头要构建。但是,删除标头更有可能在您为以后的要求添加Milters等时导致问题。