PHP邮件函数在电子邮件地址不正确的情况下是否返回true?

3

我正在开发一个系统,用于收集用户数据。我知道有些数据可能是垃圾邮件!我只想知道如果电子邮件地址不正确,mail函数是否会返回false?

比如说,我有以下代码:

   <?php

    $to = "fake@fake.com";
    $header = "From: {$to}";
    $subject = "Hi!";
    $body = "Hi,\n\nHow are you?";

    if (mail($to, $subject, $body, $header)) {
          echo("<p>Message successfully sent!</p>");
    } else {
          echo("<p>Message delivery failed...</p>");
    }

   ?>

如果电子邮件不正确,将打印哪个消息?

如果返回false,我希望在数据库中将其存储为“标记”,以便管理员可以审查并删除它。


3
你尝试运行该代码以查看返回结果了吗? - andrewsi
请定义“不正确”。它可以是“无效”(不符合RFC 2822),在这种情况下,“mail”将返回“FALSE”,或者是“不存在”,在这种情况下,“mail”将愉快地返回“TRUE”。 - raina77ow
只是一个虚假的电子邮件,可能是某人编造的。它不是真实的,但仍然符合电子邮件地址的格式,例如fake@gmail.com - Will
在SO上有一些关于检查电子邮件地址是否存在的问题,这里是其中之一:https://dev59.com/JFPTa4cB1Zd3GeqPiFBU。 - sachleen
3个回答

6
不一定。
根据手册,如果邮件被接受发送,则mail()函数将返回true,但并不保证它会被送达:

如果邮件成功被接受发送,则返回TRUE,否则返回FALSE。

需要注意的是,仅仅因为邮件被接受发送,并不意味着邮件实际上会到达预期目的地。


那么有没有办法找出电子邮件是否“真实”,或者验证它是否与正则表达式匹配是我所能做的最好的吗? - Will
@Will 你最好的选择是扫描服务器的邮件日志,查看每个发送的电子邮件;正常结果将类似于“status=sent”表示有效的电子邮件或“status=bounced”表示无效的电子邮件 - 这完全取决于您的服务器使用的程序和其日志格式。此外,您需要在电子邮件发送后稍晚一些时间进行扫描 - 这可能需要几分钟的时间来发送,具体取决于流量情况。 - newfurniturey
这听起来比我原本计划要做的工作量要大得多,哈哈。感谢你的回答。 - Will
@Will 这可能需要很多工作 - 取决于你想要的信息水平 =P。 - newfurniturey

3

服务器只能告诉您邮件是否被接受传递。除非您写了一个无效的电子邮件地址或者明显是“无电子邮件”的情况,服务器会拒绝它,否则很遗憾,它只能说“是的,邮件已经被放入电子邮件中”或者“不,没有”。它不能告诉您是否已经到达、阅读或其他情况。


1

根据您在评论中提出的情况

fake@gmail.com

就邮件系统而言,这是一个有效的电子邮件地址。

消息发送成功!

将显示此信息。邮件功能不能保证邮件一定能够送达收件人。在你提问之前,我要说明的是无法进行检查。


谢谢:/ 希望这不是事实。 - Will
电子邮件协议是在1970年代编写的,那时还没有人需要担心垃圾邮件! :) - Toby Allen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接