无法向我自己域中的地址发送电子邮件

Posted

技术标签:

【中文标题】无法向我自己域中的地址发送电子邮件【英文标题】:can't send email to addresses at my own domain 【发布时间】:2010-11-09 14:43:51 【问题描述】:

我的域上有一个简单的 php 脚本,可以向我发送电子邮件:

...
$toMail = "me@gmail.com"; //this works - I get the email at my gmail
$toMail = "me@mydomain.com"; //this doesn't - I get nothing

mail($toMail, $subject, $message, $header); 

我要更改什么设置来解决这个问题?

【问题讨论】:

【参考方案1】:

对我有用的是选择本地邮件交换器

转到 cPanel 选择电子邮件路由 选择您的域 选择本地邮件交换器

Local Mail Exchanger 可让您向 GoDaddy 中相同域的帐户发送电子邮件:例如:发送电子邮件至 info@yourdomain.com

【讨论】:

【参考方案2】:

https://serverfault.com/questions/65365/disable-local-delivery-in-sendmail 的最佳答案对我来说似乎是正确的。它的要点是您希望在 sendmail.mc 中包含以下内容:

define(`MAIL_HUB`, 'example.com.')dnl
define(`LOCAL_RELAY`, 'example.com.')dnl

example.com 是相关域。

【讨论】:

【参考方案3】:

如果您使用 postfix,请执行以下操作:

    通过 ssh 连接到您的服务器。 编辑您的 main.cf 文件:

nano /etc/postfix/main.cf

    # 注释以下行:

# mydestination = ...

    main.cf 文档的末尾添加:

mydestination =

    通过运行重新加载您的后缀配置:

/etc/init.d/postfix reload

【讨论】:

5.服务后缀重新加载【参考方案4】:

使用 PostFix、Debian7、smtp Mailjet

如果域是my-domain.com,在/etc/postfix/main.cf中,改变

mydestination = my-domain.com, localhost, localhost.localdomain, localhost

mydestination = localhost, localhost.localdomain, localhost

【讨论】:

【参考方案5】:

我在这个错误上花费了超过 8 个小时并解决了它,只需将标题更改为任何其他电子邮件地址,它就会起作用

【讨论】:

【参考方案6】:

对于使用 Google Apps 发送电子邮件但您的主机在其他提供商处的人,这是为不太熟悉 cPanel 的人提供的更详细说明。

在将电子邮件发送到我域内的帐户时,我可以解决使用 PHP 表单从我的域发送电子邮件的问题。

即mydomain.com 联系表格发送电子邮件至contact@mydomain.com。 即使我的域具有使用 Google Apps 的域的正确 MX 记录,上述操作也不起作用。

正如 Mike(和其他人)在上面提到的那样,问题已解决:将 MX 记录添加到 cPanel。

    进入cPanel 转到 cPanel 邮件部分 搜索MX Entry Maintenance,有时图标上方没有文字。 选择相关域 将电子邮件路由更改为远程邮件交换器。 使用适当的优先级值添加所有 google MX 记录,因为它们在您的域配置中。 您可以在此处查看记录和优先级 https://support.google.com/a/answer/174125 仔细检查是否选择了Remote Mail Exchanger.

通过此设置,我可以使用邮件 PHP 函数将电子邮件发送到与我的网站位于同一域内的电子邮件帐户。

关于 MX 记录的 Google 应用说明 https://support.google.com/a/answer/54717?hl=en

【讨论】:

解决了我的问题。 多亏了这个,5小时后解决了。先生,互联网黄金给你! 我在原始 Ubuntu VPS 上运行我的服务器。我没有任何 cPanel,但我也面临这个问题。关于如何解决它的任何想法? 过去两天我一直在处理同样的问题,但没有找到你的答案。谢谢它很好用。 完美运行!【参考方案7】:

SMTP 邮件服务器也是一种选择。

【讨论】:

【参考方案8】:

我有一个类似的问题,所有邮件都完美地发送到其他域,如 gmail、live、yahoo 等,但所有邮件都会在本地域中消失。 我有一个带有 Godaddy 的 VPS 服务器,它是基于 linux 的运行 Qmail。

我通过删除 var/qmail/control/virtualdomains 文件中的特定域名解决了这个问题。

【讨论】:

【参考方案9】:

我最近在重新设计网站时遇到了这个问题。

我们的系统设置方式存在问题,因此系统认为由于电子邮件来自同一个域,所以它是垃圾邮件,因此阻止了它。

与您的系统管理员确认您是否可以发送电子邮件等。

要么这样,要么您必须修改标头,使其看起来像是从外部地址发送的。希望你能把它整理好。

【讨论】:

【参考方案10】:

确保您的txt 记录已针对您的域正确设置。这通常发生在您没有将其放入 txt 记录时:@ (None)v=spf1 include:_spf.google.com ~all

【讨论】:

【参考方案11】:

我同意 Michael Hellein 的观点,根本问题可能是您的 sendmail 将您的域 example.com 电子邮件帐户视为本地帐户。如果是这样,这里有几个指导链接:

https://serverfault.com/questions/65365/disable-local-delivery-in-sendmail https://serverfault.com/questions/102647/sendmail-to-local-domain-ignoring-mx-records-part-2 http://lists.freebsd.org/pipermail/freebsd-questions/2004-September/057382.html http://objectmix.com/sendmail/367920-sendmail-ignores-mailertable-some-semilocal-domains.html

但就我而言,使用 FreeBSD 8.2,真正的诀窍是:

# cd /etc/mail
# vim freebsd.mc

添加这两行:

define(`MAIL_HUB', `example.com.')dnl
define(`LOCAL_RELAY', `example.com.')dnl

就在之前:

MAILER(local)
MAILER(smtp)

然后:

# make

这是输出:

cp freebsd.mc host.example.com.mc
/usr/bin/m4 -D_CF_DIR_=/usr/share/sendmail/cf/   /usr/share/sendmail/cf/m4/cf.m4 host.example.com.mc > host.example.com.cf
cp freebsd.submit.mc host.example.com.submit.mc
/usr/bin/m4 -D_CF_DIR_=/usr/share/sendmail/cf/   /usr/share/sendmail/cf/m4/cf.m4 host.example.com.submit.mc > host.example.com.submit.cf

然后:

# cp sendmail.cf sendmail.cf.bak
# cp host.example.com.cf sendmail.cf
# /etc/rc.d/sendmail restart

希望这可以避免一些人头疼。

【讨论】:

【参考方案12】:

我遇到了同样的问题,并且能够通过以下方式解决它。我不在服务器上本地存储邮件,而是使用注册器上的 MX 记录将邮件定向到 Google Apps。事实证明,MX 记录也需要在 Cpanel 中更新,因为服务器没有从注册商那里获取 MX 记录,而是因为没有本地 MX 记录或邮箱而丢弃。我更新了 Cpanel 上的 MX 条目以匹配注册商的 MX 条目,问题立即得到解决

【讨论】:

【参考方案13】:

我也有这个问题。禁用邮件服务器意味着根本没有发送任何电子邮件!所以我所做的修复是从/etc/mail/local-host-names文件中删除所有本地域名

【讨论】:

【参考方案14】:

您需要在邮件功能上设置一个附加参数。在您的工作示例中,您需要在您的电子邮件地址前面加上“-f”,例如

mail($toMail, $subject, $message, $header, "-fme@mydomain.com");

【讨论】:

mail($toMail, $subject, $message, $header, "-r me@mydomain.com"); 为我工作。 @redolent 这在我敲了几个小时后也对我有用。谢谢! 嗯,“-f”有什么作用?【参考方案15】:

我有几次遇到这个问题,罪魁祸首是电子邮件是否托管在另一台服务器上(例如 Google Apps)。当邮件发送到本地域时,它不会费心查找 MX 记录,因此不会正确路由。解决这个问题的方法就是简单地让您的主机在您的服务器上禁用邮件功能。

【讨论】:

我不明白禁用邮件功能如何解决问题?【参考方案16】:

我也遇到了同样的问题,因为我托管在另一台服务器上用于发送电子邮件,所以我只需要禁用本地邮件服务器。

【讨论】:

【参考方案17】:

正如其他人所解释的,某些服务器被配置为拒绝在发送服务器上缺少有效电子邮件地址的电子邮件。检查 $headers 字符串是否包含已定义的有效电子邮件地址“From:foo@example.com”。

【讨论】:

【参考方案18】:

您的电子邮件是否托管在与网站不同的服务器上?如果是这种情况,PHP 脚本可能会尝试在内部发送它,在这种情况下它会消失,而其他目标电子邮件将被放到互联网上并正确路由。

我找到的解决方案是禁用您的网络主机上的邮件服务器,然后 PHP 会将邮件放到互联网上以便正确发送。

【讨论】:

【参考方案19】:

确保您实际上可以将邮件发送到您的域电子邮件帐户,然后检查您的代码/电子邮件,确保所有内容都拼写正确..如果这些都没有帮助,我不知道出了什么问题..

【讨论】:

我域中的电子邮件有效。我可以使用 gmail 或其他方式在那里发送和接收电子邮件。它只是不会用 php 发送。拼音没问题。我用谷歌搜索,发现很多人有同样的问题,但没有很好的解决方案解释。

以上是关于无法向我自己域中的地址发送电子邮件的主要内容,如果未能解决你的问题,请参考以下文章

无法理解为什么我不使用PHP mail()函数向我的主机邮件发送邮件[复制]

如何向我的 gmail 发送电子邮件而不是托管

添加目录中的文件后,如何使用 inotify-tools 向我发送电子邮件?

通过 sendgrid/mail 发送时,如何向我的电子邮件添加取消订阅链接

exchange 2010 发送的邮件对方无法收到

Django 群发邮件/邀请函