PHP 的邮件、DNS 请求超时和 FQDN

Mail of PHP, DNS request timed out, and FQDN

我想让 PHP 中的 mail() 在我的 Windows Server 2012 R2 中工作。为此,我首先按照this page.

安装了SMTP

让我感到困惑的一件事是 Full-qualified domain nameWIN-RFELH8GM0KN 是它默认建议的。我的服务器有几个网站,有人知道我应该在这里指定哪个网站吗?

我没有改这个,结果,mail www.google.com in nslookup returns DNS request timed out. 所以这是一个错误吗?

当然,我的 test.php 没有发送邮件:

<?php
mail('mymail@gmail.com', 'title', 'content');
?>

有人能帮忙吗?

更新1按照@LittleAI的回答,我启动了SMTP,但是DNS request timed out还在:

更新 2 这里是 php.ini:

telnet localhost 25 returns 如下:

更新 3 这是一个测试,效果很好:我确实在 softtitmur@gmail.com 的收件箱中收到了测试邮件。但是,如果我在 Update 1 中重做测试,仍然存在 DNS requested time out.。而且test.php还是无法发送邮件...

Update 4我才发现在the page I followed里面是nslookup下的mail.vsysad.com(我还以为是mail vsysad.com, 这就是为什么我尝试了 mail www.google.com 但没有意义)。所以它也适用于我的服务器,并且没有 DNS request timed out.

然后,我仔细检查了 php.ini,我意识到 sendmail_from 并没有取消注释。所以我把它取消注释并设置sendmail_from = softtimur@gmail.com,结果php的mail()现在可以工作了,所以问题解决了,虽然我还是不不了解 FQDN 及其默认值(即 WIN-RFELH8GM0KN)...

我注意到的第一件事是 IIS 中的 SMTP 虚拟服务未处于启动状态,因此这会导致问题。在测试之前确保此服务处于启动状态。

FQDN 名称主要用于发件人在通过端口 25 连接到您的服务器时将显示的 SMTP 横幅。

可能值得在您的服务器上安装 DNS 角色并创建一个引用假域的正向查找区域,例如 test.com 并使用您的服务器 IP 在该区域中创建一个名为 SMTP 的记录。然后确保将您的服务器设置为使用 127.0.0.1 作为 DNS 提供程序,以便它可以在将响应委托给根 hints/external dns 转发器之前检查记录。

您需要使用 Telnet 执行 SMTP 请求以确认 SMTP 正在侦听端口 25。您可以使用本地主机 IP 地址 (127.0.0.1) 执行此操作,如下所示:

  telnet 127.0.0.1 25
  helo test.com
  MAIL FROM: ****YOUR EMAIL ACCOUNT****
  RCPT TO: ****SENDERS ADDRESS****
  DATA

由于 SPF 记录仅允许某些 IP/hostnames 作为 google.com 发送,您可能不会收到从中继到 GMAIL 的电子邮件,但为了测试,您应该看到您的输入数据后服务器收到邮件

这是在您的服务器上使用 telnet 的指南。请确保您已安装 telnet 功能,因为默认情况下未安装此功能。

http://www.yuki-onna.co.uk/email/smtp.html

补充:

 telnet localhost 25

在 SMTP 横幅后输入以下命令,但确保不要出错,否则您可能需要重新开始会话。

 helo test.com

然后您应该会看到 250 响应,表明服务器正在侦听

键入以下内容:

MAIL FROM: test@test.com

它应该以 OK 响应。如果是这样,请输入:

RCPT TO: ***YOU EMAIL ADDRESS OF CHOICE****

同样,它应该返回 OK。如果是这样,请键入以下内容:

DATA

输入数据命令后按回车键。您现在进入电子邮件的正文。出于测试目的,我们将忽略主题栏并向正文中添加一些数据。

  This is a test email.

然后要完成电子邮件,您需要按 return 留下一个空白行,然后按句号,然后再次按 return。

    ***BLANK LINE****
    .
    ***Hit Return****

截取所有命令,但您可以将电子邮件清空,以便我可以看到输出。