【问题标题】:Sending emails with PHP fails使用 PHP 发送电子邮件失败
【发布时间】:2012-05-25 13:55:58
【问题描述】:

情况: 我们的客户(domain.com 的所有者)已将 www.domain.com 的 A 记录设置为我们在 domain.com 后面运行网站的其中一台服务器的 IP 地址。我们只为这个域提供托管服务,他们有自己的电子邮件服务器。

这意味着 domain.com 的 IP 不是 domain.com 的邮件服务器。

问题: 将邮件从 PHP 发送到 foo@bar.com 有效,但将邮件发送到 *@domain.com 无效。

问题: 这与 SPF 记录有关吗? 我该如何解决?

谢谢

邦迪

【问题讨论】:

    标签: php email spf


    【解决方案1】:

    这发生在我的共享主机上,可能是因为网络服务器上存在本地传递机制,即当您的网络服务器看到@domain.com 的电子邮件时,它假定它将是那个处理,并且不传递到实际的邮件服务器。

    进入您的网络服务器面板(Cpanel 或其他)并检查此域的电子邮件设置。确保 domain.com 禁用“本地交付”或类似功能

    【讨论】:

    • 这成功了!只需在我的 cPanel 中添加相同的 DNS 记录,就可以开始工作了。谢谢!
    【解决方案2】:

    您的主要 domain.com(没有 www.)是否有 CNAME 记录?这会自动将域的 mx 记录引用到 cname 记录。

    MX 记录的特征负载信息是完整的 邮件主机的限定域名和首选项值。主人 name 必须直接映射到一个或多个地址记录(A 或 AAAA) DNS,并且不得指向任何 CNAME 记录。

    http://en.wikipedia.org/wiki/MX_record#cite_note-0

    【讨论】:

    • 这可能是一个愚蠢的问题,但是在 php 脚本所在的服务器上......是否有任何邮件守护进程正在运行(sendmail、postfix 等......)?
    • @Arend:是的,我的主域有 CNAME 记录。这会是个问题吗?
    • @pogeybait:我不知道,为什么会这样?
    【解决方案3】:

    发送电子邮件的最佳方式是使用 smtp 方法:

    http://sourceforge.net/projects/phpmailer/files/phpmailer%20for%20php4/0.90/

    示例文件:

    <?php
    require("class.phpmailer.php");
    
    $mail = new PHPMailer();
    
    $mail->IsSMTP();                                      // set mailer to use SMTP
    $mail->Host = "mail.example.net";  // specify main and backup server
    $mail->SMTPAuth = true;     // turn on SMTP authentication
    $mail->Username = "user@example.net";  // SMTP username
    $mail->Password = "password"; // SMTP password
    
    $mail->From = "example@example.net";
    $mail->FromName = "Mailer";
    $mail->AddAddress("destiny@example.net");
    
    
    //$mail->AddReplyTo("info@example.com", "Information");
    
    $mail->WordWrap = 50;                                 // set word wrap to 50 characters
    //$mail->AddAttachment("/var/tmp/file.tar.gz");         // add attachments
    //$mail->AddAttachment("/tmp/image.jpg", "new.jpg");    // optional name
    $mail->IsHTML(true);                                  // set email format to HTML
    
    $mail->Subject = "Here is the subject";
    $mail->Body    = "This is the HTML message body <b>in bold!</b>";
    $mail->AltBody = "This is the body in plain text for non-HTML mail clients";
    
    if(!$mail->Send())
    {
        echo "Message could not be sent. <p>";
        echo "Mailer Error: " . $mail->ErrorInfo;
        exit;
    }
    
    echo "Message has been sent";
    ?>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-12-08
      • 1970-01-01
      • 2012-11-13
      • 1970-01-01
      • 2012-05-07
      • 1970-01-01
      • 2018-02-01
      相关资源
      最近更新 更多