【问题标题】:phpmailer not sending email to gmail,yahoo,hotmail or these are blocking email sent by phpmailerphpmailer 不向 gmail、yahoo、hotmail 发送电子邮件,或者这些正在阻止 phpmailer 发送的电子邮件
【发布时间】:2015-11-07 12:17:24
【问题描述】:

我正在使用 PHPmailer 发送电子邮件

这是我用过的代码:

        $mail = new PHPMailer(); 

        $subject = "test";
        $to = "test_patel@yahoo.com"
        $mail->SetFrom("PDSociety@aol.com","Punjab Dental Society");
        $mail->AddReplyTo("PDSociety@aol.com", "Punjab Dental Society");
        $mail->Subject = $subject;
        $mail->MsgHTML($str);
        $mail->AddAddress($to, "Punjab Dental Society");    
        if(!$mail->Send()) 
        {
          $err = "Mailer Error: " . $mail->ErrorInfo;
          //echo $err;
        } else {
          $msg = "Message sent!";
        }
        // Clear all addresses and attachments for next loop
        $mail->ClearAddresses(); 

如果我将电子邮件地址从 yahoo 更改为 gmail 或 hotmail,仍然不会发送电子邮件。

我通过回显错误检查,但没有错误。

谁能解释是什么问题?

【问题讨论】:

  • 你在哪里定义了 $str?
  • 是html内容,这里没有赋值,但不为空
  • 可能是您的 HTML 内容无法正常工作。
  • 好的,假设 $str = "

    Hello World

    ",仍然无法正常工作

标签: php email phpmailer


【解决方案1】:

在尝试了各种方法后,我发现以下代码几乎可以与所有电子邮件提供商一起使用

$to['email'] = "recipients email address";      
$to['name'] = "name";   
$subject = "email subject";
$str = "<p>Hello, World</p>";
$mail = new PHPMailer;
$mail->IsSMTP();                                     
$mail->SMTPAuth = true;
$mail->Host = 'Specify main and backup server here';
$mail->Port = 465;
$mail->Username = 'xyz@domainname.com';
$mail->Password = 'email account password';
$mail->SMTPSecure = 'ssl';
$mail->From = 'From Email Address';
$mail->FromName = "Any Name";
$mail->AddReplyTo('xyz@domainname.com', 'any name'); 
$mail->AddAddress($to['email'],$to['name']);
$mail->Priority = 1;
$mail->AddCustomHeader("X-MSMail-Priority: High");
$mail->WordWrap = 50;    
$mail->IsHTML(true);  
$mail->Subject = $subject;
$mail->Body    = $str;
if(!$mail->Send()) {
$err = 'Message could not be sent.';
$err .= 'Mailer Error: ' . $mail->ErrorInfo;                        
}

$mail->ClearAddresses();

需要相应地更改变量值。 希望这些可以帮助遇到 PHPmailer 问题的人

【讨论】:

  • $mail-&gt;Username = 'xyz@domainname.com'; 中的内容是什么?
【解决方案2】:

试试这个:

$mail = new PHPMailer(true);      // the true param means it will throw exceptions on errors, which we need to catch

        $mail->IsSMTP();            // telling the class to use SMTP
        try {
            $mail->AddAddress($to['email'],$to['name']);
            $mail->FromName = '';

            $mail->Subject = $subject;
            $mail->MsgHTML($message);


            $send = true;
            return $mail->Send();

        } catch (phpmailerException $e) {
        echo    $e->errorMessage(); //Pretty error messages from PHPMailer
        } catch (Exception $e) {
            $e->getMessage(); //Boring error messages from anything else!
        }

如果有任何异常错误会帮助你。

【讨论】:

  • thanx,使用此代码将电子邮件发送到 gmail 但在垃圾邮件文件夹中,如何在收件箱中发送?
  • 但不能使用 yahoo 和 hotmail,没有错误显示
【解决方案3】:

PHPMailer 只涉及将消息提交到您自己的邮件服务器,您在那里没有任何问题。之后,您的邮件服务器将负责发送,因此您将在邮件服务器的日志中找到答案。

没有简单的方法可以确保邮件最终进入收件箱而不是垃圾邮件 - 如果有,垃圾邮件发送者就会使用它,过滤将毫无用处。确保您的 DNS 可以向后和向前解析,您拥有有效的 SPF 记录,您使用 DKIM 签署您的邮件(对 Yahoo 尤其重要),最重要的是,您不会发送您的收件人认为是垃圾邮件的邮件。

【讨论】:

  • 我做了一些更改,现在它可以与 Yahoo、Gmail 一起使用,但不能与 hotmail 电子邮件一起使用,甚至无法将电子邮件发送到垃圾邮件文件夹,知道吗?
  • 您需要查看您的邮件服务器日志。它会告诉你发生了什么。
  • 您要寻找的不仅仅是缺少错误 - 您还应该看到成功交付的记录。
【解决方案4】:

您是否看过这里的帖子:Using PHPMailer Results in many blocked emails?提问者通过更改电子邮件主题解决了这个问题:

好吧,我解决了这个问题;上面的代码不是问题并且有效 很棒。

在我的主题中,我使用了关于“验证您的帐户”的短语 信息”,这让它在一些 ISP 上被屏蔽了。

所以教训是,你的主题很重要。我在看我的php代码 以及我意识到这一点之前的身体内容。

电子邮件的内容及其主题可以使 ISP 禁止它。您可以尝试从您的收件箱中提取您收到的一封电子邮件的内容,看看是否可以通过。

【讨论】:

  • 我不认为 ISP 禁止它,我有私人邮件服务器,电子邮件地址为 xyz@companyname.com,电子邮件发送到这些电子邮件地址,但没有发送到 yahoo gmail hotmail,具有相同的内容和主题
  • 所以邮件会通过没有垃圾邮件过滤器的私人服务器,而不是 yahoo、gmail 或 hotmails,它们都有垃圾邮件过滤器?
猜你喜欢
  • 2014-10-19
  • 2014-11-30
  • 2013-10-05
  • 1970-01-01
  • 1970-01-01
  • 2017-05-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多