【问题标题】:PHPMailer won't work with mail.privateemail.com accountPHPMailer 不适用于 mail.privateemail.com 帐户
【发布时间】:2016-04-29 16:41:31
【问题描述】:

我已经开发了 6 个月的网站即将完成。是时候部署到服务器了。

很遗憾,我无法发送电子邮件。以前我总是在本地或在我的个人测试服务器上进行测试,使用 phpmailer 和我的 netfirms 电子邮件帐户发送电子邮件。现在我在新服务器上,使用我的 netfirms 帐户发送工作正常,但不能通过 mail.privateemail.com 使用客户的 namecheap 电子邮件。代码如下:

<?php
include_once 'db_connect.php';

require 'phpmailer/PHPMailerAutoload.php';
$mail = new PHPMailer;


function sendFormEmail($mail, $to, $subject, $senderName, $senderEmail, $message, $sendCopy) {
    $_SESSION['token'] = random_string(50);
     $subject = filter_var($subject, FILTER_SANITIZE_STRING);
     $senderName = filter_var($senderName, FILTER_SANITIZE_STRING);
     $senderEmail = filter_var($senderEmail, FILTER_SANITIZE_EMAIL);
     $message = filter_var($_POST['body'], FILTER_SANITIZE_STRING);

        $mail->isSMTP();                                      // Set mailer to use SMTP
        $mail->Host = 'mail.privateemail.com';  // Specify main and backup SMTP servers
        $mail->SMTPDebug  = 2;    
        $mail->SMTPAuth = true;                               // Enable SMTP authentication
        $mail->Username = 'my-email';                 // SMTP username
        $mail->Password = 'my-pass';                           // SMTP password
        $mail->SMTPSecure = 'tls';                            // Enable TLS encryption, `ssl` also accepted
        $mail->Port = 25;                                    // TCP port to connect to

        $mail->setFrom('webmaster@mysite.com', 'mysite.com'); 
        $mail->addAddress('my-email', 'me');     
        $mail->addReplyTo($senderEmail, $senderName);

        $mail->Subject = "mysite.com: " . $subject;
        $mail->Body    = "<h1>You've received a message through the contact form at mysite.com: </h1><br><p style='white-space: pre-wrap;'>" . $message . "</p>";
        $mail->AltBody = "You've received a message through the contact form at mysite.com: " . $message;

        if($mail->send()) {
         return "wooho!";
        }
    }
}

它不断返回该功能已通过,但没有电子邮件。如果我只将主机、用户名、密码和端口更改为我的 netfirms 电子邮件的那些,它就可以完美运行。我还使用第三方客户端登录了此电子邮件地址,以验证我的服务器设置是否正确,并且效果很好。

这里是 phpmailer 调试输出:

2016-01-22 23:13:47 SERVER -> CLIENT: 220 PrivateEmail.com Mail Node 
2016-01-22 23:13:47 CLIENT -> SERVER: EHLO mysite.com 
2016-01-22 23:13:47 SERVER -> CLIENT: 250-mta2.ox.privateemail.com 250-PIPELINING 250-SIZE 81788928 250-ETRN 250-STARTTLS 250-AUTH PLAIN LOGIN 250-ENHANCEDSTATUSCODES 250-8BITMIME 250 DSN 
2016-01-22 23:13:47 CLIENT -> SERVER: STARTTLS 
2016-01-22 23:13:47 SERVER -> CLIENT: 220 2.0.0 Ready to start TLS 2016-01-22 23:13:47  CLIENT -> SERVER: EHLO mysite.com 
2016-01-22 23:13:47 SERVER -> CLIENT: 250-mta2.ox.privateemail.com 250-PIPELINING 250-SIZE 81788928 250-ETRN 250-AUTH PLAIN LOGIN 250-ENHANCEDSTATUSCODES 250-8BITMIME 250 DSN 
2016-01-22 23:13:47 CLIENT -> SERVER: AUTH LOGIN 
2016-01-22 23:13:47 SERVER -> CLIENT: 334 VXNlcm5hbWU6 
2016-01-22 23:13:47 CLIENT -> SERVER: d2VibWFzdGVyQGNocmlzY29tcG9zZXMuY29t 
2016-01-22 23:13:47 SERVER -> CLIENT: 334 UGFzc3dvcmQ6 
2016-01-22 23:13:47 CLIENT -> SERVER: U3VwM3ItUzNjcjN0 
2016-01-22 23:13:47 SERVER -> CLIENT: 235 2.7.0 Authentication successful 
2016-01-22 23:13:47 CLIENT -> SERVER: MAIL FROM: 
2016-01-22 23:13:47 SERVER -> CLIENT: 250 2.1.0 Ok 
2016-01-22 23:13:47 CLIENT -> SERVER: RCPT TO: 
2016-01-22 23:13:47 SERVER -> CLIENT: 250 2.1.5 Ok 
2016-01-22 23:13:47 CLIENT -> SERVER: DATA 
2016-01-22 23:13:47 SERVER -> CLIENT: 354 End data with . 
2016-01-22 23:13:47 CLIENT -> SERVER: Date: Fri, 22 Jan 
2016 18:13:46 -0500 
2016-01-22 23:13:47 CLIENT -> SERVER: To: me 
2016-01-22 23:13:47 CLIENT -> SERVER: From: "mysite.com" 
2016-01-22 23:13:47 CLIENT -> SERVER: Reply-To: me 
2016-01-22 23:13:47 CLIENT -> SERVER: Subject: mysite.com: test 
2016-01-22 23:13:47 CLIENT -> SERVER: Message-ID: <57602f8384a430fc72ff9ba41db09f97@mysite.com> 
2016-01-22 23:13:47 CLIENT -> SERVER: X-Mailer: PHPMailer 5.2.13 (https://github.com/PHPMailer/PHPMailer) 
2016-01-22 23:13:47 CLIENT -> SERVER: MIME-Version: 1.0 
2016-01-22 23:13:47 CLIENT -> SERVER: Content-Type: multipart/alternative; 
2016-01-22 23:13:47 CLIENT -> SERVER: boundary="b1_57602f8384a430fc72ff9ba41db09f97" 
2016-01-22 23:13:47 CLIENT -> SERVER: Content-Transfer-Encoding: 8bit 
2016-01-22 23:13:47 CLIENT -> SERVER: 
2016-01-22 23:13:47 CLIENT -> SERVER: This is a multi-part message in MIME format. 
2016-01-22 23:13:47 CLIENT -> SERVER: 
2016-01-22 23:13:47 CLIENT -> SERVER: --b1_57602f8384a430fc72ff9ba41db09f97 
2016-01-22 23:13:47 CLIENT -> SERVER: Content-Type: text/plain; charset=us-ascii 
2016-01-22 23:13:47 CLIENT -> SERVER: 
2016-01-22 23:13:47 CLIENT -> SERVER: You've received a message through the contact form at mysite.com: test 
2016-01-22 23:13:47 CLIENT -> SERVER: 
2016-01-22 23:13:47 CLIENT -> SERVER: 
2016-01-22 23:13:47 CLIENT -> SERVER: --b1_57602f8384a430fc72ff9ba41db09f97 
2016-01-22 23:13:47 CLIENT -> SERVER: Content-Type: text/html; charset=us-ascii 
2016-01-22 23:13:47 CLIENT -> SERVER: 
2016-01-22 23:13:47 CLIENT -> SERVER:
You've received a message through the contact form at mysite.com:

test

2016-01-22 23:13:47 CLIENT -> SERVER: 2016-01-22 23:13:47   CLIENT -> SERVER: 
2016-01-22 23:13:47 CLIENT -> SERVER: 
2016-01-22 23:13:47 CLIENT -> SERVER: --b1_57602f8384a430fc72ff9ba41db09f97-- 
2016-01-22 23:13:47 CLIENT -> SERVER: 
2016-01-22 23:13:47 CLIENT -> SERVER: . 
2016-01-22 23:13:47 SERVER -> CLIENT: 250 2.0.0 Ok: queued as 8B426600ED 
2016-01-22 23:13:47 CLIENT -> SERVER: QUIT 
2016-01-22 23:13:47 SERVER -> CLIENT: 221 2.0.0 Bye

我在这方面已经有一段时间了,但我真的没有想法。任何帮助将不胜感激。

另外,我知道客户可以创建一个 gmail 帐户,我们可以通过它发送就可以了。如果可能的话,我真的很想使用他们支付的电子邮件地址。开始真的不喜欢 namecheap 了。

【问题讨论】:

  • 尝试格式化调试输出,使其易于阅读。
  • 完成!现在应该好了
  • 调试输出显示成功传送到该邮件服务器,因此 PHPMailer 的参与已经结束。您应该阅读邮件服务器的日志,了解之后邮件发生了什么变化。
  • 谢谢!我只需要知道去哪里寻找。

标签: php email server phpmailer


【解决方案1】:

如果您没有从 SMTP 服务器收到错误,则会发送电子邮件 但它没有到达收件人邮箱。我认为该电子邮件被归类为垃圾邮件,您是否正确配置了 SPF 记录?根据我的经验,这是最常见的问题... 例如,如果您的生产站点是 mysite.com,而 SMTP 服务器域是 privateemail.com,那么您必须在 mysite.com DNS 记录中添加这样的 TXT 记录:

mysite.com.  TXT  v=spf1 include:privateemail.com +a +mx ~all

希望对你有帮助

【讨论】:

  • 谢谢。我一定会试试的。现在我已经将它配置为从我自己的托管服务提供商的电子邮件发送,但向收件人显示它是从另一个发送的。绝对对 namecheap 非常不满。如果您不使用他们的主机,则必须为电子邮件地址付费,而当您这样做时,您的主机端需要进行大量配置。使用 Netfirms,我得到了一个实际有效的免费电子邮件地址。
【解决方案2】:

对于以后遇到同样问题的人,这里的 Namecheap 网站上有专门的描述:https://www.namecheap.com/support/knowledgebase/article.aspx/9751/31/how-to-configure-php-mailsmtp-authentication-for-different-cms

与我的默认配置相比,主要区别在于我必须将端口更改为 587(例如 $mail-&gt;Port = 587;)并且它可以立即工作。

【讨论】:

    猜你喜欢
    • 2020-04-19
    • 2015-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-02
    • 1970-01-01
    • 1970-01-01
    • 2020-08-31
    相关资源
    最近更新 更多