【问题标题】:PHP mail use FROM of multiple mail client (Yahoo | Google | Hotmail | Rediff | Personal Mail domain)PHP 邮件使用 FROM 的多个邮件客户端(Yahoo | Google | Hotmail | Rediff | Personal Mail domain)
【发布时间】:2017-03-30 15:04:11
【问题描述】:

目前我正在使用 PHP 邮件函数或 CodeIgnitor 邮件函数来发送邮件。 来自邮件 id 可以是任何域,例如 xyz@gmail.com、xyz@yahoo.com、xyz@hotmail.com

邮件也可以是任何域。

当 FROM 设置为除 YAHOO 以外的任何邮件时,我的邮件会正确发送。 无法从 PHP 邮件从 YAHOO 的任何邮件发送邮件。 雅虎是否阻止了我的邮件?

我该如何解决这个问题?

【问题讨论】:

  • 您是否通过雅虎的 SMTP 服务器转发您的邮件?如果是这样,那么是的。
  • @bub 可以从任何他们想要的邮件客户端发送邮件,但必须使用它的一些 SMTP 细节。目前我没有使用任何 SMTP 服务器详细信息。
  • @Kitson88 目前我没有使用任何 SMTP 服务器详细信息。如果我这样做,我将不得不使用几个 SMTP 客户端详细信息,例如 gmail、yahoo、hotmail 等。
  • 但是为什么接收方使用 GMAIL 、 HOTMAIL 发送时收到邮件,而从 YAHOO 发送时却收不到?

标签: php codeigniter email codeigniter-3 yahoo


【解决方案1】:

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

GMAIL 和 YAHOO 的 SPF 示例

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

【讨论】:

    猜你喜欢
    • 2011-06-26
    • 2010-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-08
    • 2015-07-16
    相关资源
    最近更新 更多