PHP邮件使用多个邮件客户端的FROM(Yahoo | Google | Hotmail | Rediff |个人邮件域)

时间:2016-11-16 12:03:50

标签: php codeigniter email codeigniter-3 yahoo

目前我正在使用PHP邮件功能或CodeIgnitor邮件功能发送邮件。 来自邮件的ID可以是任何域名,例如xyz @ gmail.com,xyz @ yahoo.com,xyz @ hotmail.com

此外,邮件可以是任何域名。

当FROM设置为除YAHOO之外的任何邮件时,我的邮件会正确发送。 无法从YAHOO的任何邮件发送来自PHP邮件的邮件。 雅虎阻止我的邮件吗?

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

您无法使用邮件服务器代表上述域名成功发送邮件。这些域中的每一个都在DNS中使用称为SPF(发件人策略框架)记录的东西,它告诉所有收件人邮件服务器检查SPF以确认发件人IP与SPF相同。您需要通过自己的SMTP服务器发送电子邮件。

GMAIL&的SPF示例YAHOO

v=spf1 redirect=_spf.google.com
v=spf1 redirect=_spf.mail.yahoo.com

使用此网站检查域中是否存在SPF记录:

http://mxtoolbox.com/spf.aspx

在我看来,您最好的选择是将邮件中继到每个域的正确SMTP服务器。您可以使用PHPMailer轻松完成此操作。如果在FROM选项中设置的域是私有管理域,那么如果没有设置SPF记录并且您的发送IP未被列入黑名单,您应该能够代表那里进行中继。

用于检查您的发送IP是否已列入黑名单的网站:

http://mxtoolbox.com/blacklists.aspx

如何选择用于特定域的SMTP设置的示例:

$email = 'xyz@yahoo.com';
$domain = explode('@', $email) ;

switch ($domain[1]) {

    case 'yahoo.com': 

          //NOT REAL SMTP SETTINGS!
          $mail->Host = 'smtp1.yahoo.com'; 
          $mail->SMTPAuth = true;                               
          $mail->Username = 'user@yahoo.com';                 
          $mail->Password = 'secret';                           
          $mail->SMTPSecure = 'tls';                           
          $mail->Port = 587;          

    break;

    case 'gmail.com': 

          //NOT REAL SMTP SETTINGS!
          $mail->Host = 'smtp1.gmail.com';
          $mail->SMTPAuth = true;                               
          $mail->Username = 'user@yahoo.com';                 
          $mail->Password = 'secret';                           
          $mail->SMTPSecure = 'tls';                           
          $mail->Port = 587;          

    break;


}


//Rest of PHP Mailer code