在 Sendmail 中禁用本地传递

33 sendmail centos

我在 Centos 服务器上使用 Sendmail 为 PHP 脚本发送电子邮件,但问题是邮件被传送到机器上的本地邮箱,而不是域的 MX 记录中指定的内容 - 实际上指向另一台机器我用于电子邮件。

我希望 sendmail 不尝试为机器设置的域在本地传递邮件,是否有一种简单的方法可以禁用本地传递?

该域不在本地主机名文件中。

我已经做了很多谷歌搜索,我看过:

Sendmail 配置不发送邮件到本地机器

在 Sendmail 中禁用本地传递

但要么没有答案,要么不合适。

我不想中继到另一台服务器,我只想发送邮件而不管域。

提供一个例子:

我有两台服务器,一台是位于 mail.example.com 的邮件服务器和一台位于 example.com 的 Web 服务器,当我在 Web 服务器上使用 smtp 服务时,它当前将邮件路由到 example.com 上的本地邮箱,但是它应该转到mail.example.com上的邮箱

sendmail -bt 的输出返回:

地址测试模式(规则集 3 不会自动调用)
进入  
> 3,0 info@example.com
规范输入: info @example 。电脑
Canonify2 输入:信息 
Canonify2 返回:信息 
规范返回:信息 
解析输入:信息 
Parse0 输入:信息 
Parse0 返回:信息 
ParseLocal 输入:信息 
ParseLocal 返回:信息 
Parse1 输入:信息 
Parse1 返回:$# 本地 $:信息
解析返回:$# 本地 $:信息

Paw*_*cki 39

我做了什么来禁用本地交付。我将使用 example.com 域。

要求:

  • example.com 指向分配给 eth 接口之一的 IP 地址的条目。
  • /etc/hosts 定义 example.com 分配给与上述完全相同的 IP 地址
  • example.com MX 记录指向 Google 服务器(ASPMX.L.GOOGLE.COM 等)
  • 默认的 sendmail 安装(我的是在 Ubuntu 上)

脚步:

vim /etc/mail/sendmail.mc
Run Code Online (Sandbox Code Playgroud)

在末尾:

define(`MAIL_HUB', `example.com.')dnl
define(`LOCAL_RELAY', `example.com.')dnl
Run Code Online (Sandbox Code Playgroud)

进而:

sendmailconfig (or /etc/mail/make depending on your distro)
service sendmail restart
Run Code Online (Sandbox Code Playgroud)

测试:

echo -e "To: user@example.com\nSubject: Test\nTest\n" | sendmail -bm -t -v
echo -e "To: user\nSubject: Test\nTest\n" | sendmail -bm -t -v
Run Code Online (Sandbox Code Playgroud)

您应该看到它连接到谷歌服务器,然后您应该看到您的邮件被发送到您的谷歌收件箱。

  • 这很完美,我只是想知道有一个 . 在域名之后。 (3认同)

KPW*_*INC 0

这可能不是您正在寻找的解决方案,但如果您的问题是“admin”或“root”用户收到大量电子邮件和一个巨大的邮箱,您可能希望考虑设置一个 cron 作业来清除邮箱每周、每天等外出。

我们有几台 CentOS 服务器存在此问题,但问题是我们希望有时能够阅读邮件,因为它有时可以帮助诊断各种问题。

解决方案是简单地执行 cron 作业并偶尔擦拭一次盒子。

如果我们发现问题...我们会(暂时)注释掉 cron 作业并阅读日志和电子邮件以获取线索。

只是一个想法...以及一个快速/简单的解决方案。

如果没有,请查看 sendmail.mc 文件并进行相应修改。


快速更新:

这并不完全是您所要求的,但可能会给您一些想法并帮助您了解一些事情:

http://www.pettingers.org/code/sendmail-local.html