PHPMailer 不适用于 Yahoo Mail 地址($mail->AddCC 方法的问题)

PHPMailer won't work with Yahoo Mail addresses (issues with $mail->AddCC method)

我对 PHPMailer 有点困惑。我试图在一个网站中使用它,一个人在其中填写表格,并包括他们的姓名、电子邮件信息。

我正在尝试通过电子邮件将这些信息发送给我,并将副本发送给那个人 - 因此使用了 $mail->addCC($email) 方法。

但是,每次我尝试从 yahoo 电子邮件地址发送测试电子邮件时,它都不起作用。它确实适用于 gmail 地址。

编辑 - 当我说它不适用于雅虎电子邮件地址时,从技术上讲,我收到的是来自他们的 "mail delivery failed" 电子邮件。

我使用 $mail->addCC($email) 方法的目的是将副本发送给用户,而发送给我的就是我可以回复的副本。

我试过$mail->addCustomHeader($email);,但仍然会产生同样的问题,即,yahoo 邮件无法投递。

如何使这个 PHPMailer 工作,以便将副本发送给我和用户?

还有,我是不是用错了这个 PHPMailer 表单?我对 $mail->From = $email; 感到困惑,我目前将其设置为来自用户的电子邮件地址,这样我就可以回复它。那是错的吗?

$first_name = $_POST['first-name'];
$last_name = $_POST['last-name'];
$email = $_POST['email'];
$message = nl2br($_POST['message']);

require 'PHPMailerAutoload.php';

$mail = new PHPMailer;

$mail->isSMTP();                        // Set mailer to use SMTP
$mail->Host = 'host info';              // Specify main and backup SMTP servers
$mail->SMTPAuth = true;                 // Enable SMTP authentication
$mail->Username = 'user info';          // SMTP username
$mail->Password = 'pw';                 // SMTP password
$mail->SMTPSecure = 'tls';              // Enable TLS encryption, `ssl` also accepted
$mail->Port = 587; 

$mail->From = $email;
$mail->FromName = $first_name;
$mail->addAddress('my email address');  // Add a recipient  
$mail->addCC($email);                   // Add a recipient

$mail->isHTML(true);                    // Set email format to HTML

$mail->Subject = 'Hotel Room Request';
$mail->Body    = $message; 

$mail->AltBody = 'This is the body in plain text for non-HTML mail clients';

if(!$mail->send()) {
    header('location: url here');
} else {
    header('location: url here');
}

将 From 设置为来自发件人(在本例中为 Yahoo,但其他 ISP 也会阻止)是您的问题。接收邮件服务器可以快速识别它没有发送邮件 - 一旦发送,它就会怀疑是垃圾邮件。

相反,将发件人设置为您服务器上的某个地址(no-reply@ 是我通常使用的地址),然后将发件人添加为 Reply-To header.

Reply-To header 确实听起来像:当您单击 "Reply" 按钮时,它会填充一条新消息发送到该值 ,而不是 [=实际发件人的 21=]。

$mail->addReplyTo( $email, $first_name );
$mail->addAddress( $email, $first_name );
$mail->addAddress( 'your@email.com', 'You' );
$mail->From = 'your@email.com';
$mail->FromName = $first_name;

针对您后来的评论,关于Reply-To是自己用户的地址,我会这样处理:

$mail = new PHPMailer;

$mail->isSMTP();                        // Set mailer to use SMTP
$mail->Host = 'host info';              // Specify main and backup SMTP servers
$mail->SMTPAuth = true;                 // Enable SMTP authentication
$mail->Username = 'user info';          // SMTP username
$mail->Password = 'pw';                 // SMTP password
$mail->SMTPSecure = 'tls';              // Enable TLS encryption, `ssl` also accepted
$mail->Port = 587; 

$mail->From = 'your@email.com';
$mail->FromName = $first_name;

$mail->isHTML(true);                    // Set email format to HTML

$mail->Subject = 'Hotel Room Request';
$mail->Body    = $message; 

$mail->AltBody = 'This is the body in plain text for non-HTML mail clients';

// SEND TO YOURSELF

$mail->addReplyTo( $email, $first_name );
$mail->addAddress( 'your@email.com', 'You' );
$mail->send();

// CLEAR REPLY TO AND RECIPIENTS 

$mail->clearReplyTos();
$mail->clearAllRecipients();

// SEND TO THE USER

$mail->addAddress( $email, $first_name );
$mail->addReplyTo( 'your@email.com', 'You' );


if(!$mail->send()) {
    header('location: url here');
} else {
    header('location: url here');
}