验证失败:pear邮件包


Validation failed for: pear mail package

<?php
    require_once "Mail.php";
    $from = '<from.gmail.com>';
    $to = '<to.yahoo.com>';
    $subject = 'Hi!';
    $body = "Hi,'n'nHow are you?";
    $headers = array(
        'From' => $from,
        'To' => $to,
        'Subject' => $subject
    );
    $smtp = Mail::factory('smtp', array(
            'host' => 'ssl://smtp.gmail.com',
            'port' => '465',
            'auth' => true,
            'username' => 'johndoe@gmail.com',
            'password' => 'passwordxxx'
        ));
    $mail = $smtp->send($to, $headers, $body);
    if (PEAR::isError($mail)) {
        echo('<p>' . $mail->getMessage() . '</p>');
    } else {
        echo('<p>Message successfully sent!</p>');
    }
?>

然而,程序在$mail = $smtp->send($to, $headers, $body);处失败:

验证失败:johndoe@gmail.com

我已经验证了邮箱和密码是正确的。如果我提供了一个无效的密码,错误将变为

不正确的密码

我也试过在我的帐户上禁用两步认证,但这没有帮助。请告知为什么当凭据看起来正确时,我可能会得到此验证错误?

当您在您或收件人的电子邮件中使用无效字符作为电子邮件别名时,通常会得到"Validation failed for"。

例如:

my_email@gmail.com <first_name.last_name>
my_email@gmail.com <first_name@last_name>

无效字符有:

. (dots)
@ (at)
" (double quotes)
[ (bracket opened without closing)
] (bracket closed without opening)
( (parenthesis opened without closing)
) (parenthesis closed without opening)

我收到了同样的错误。

在试验了这些字段之后,这对我来说很有效:

不是

$from = "Sender <sender@example.com>";

$from = "sender@example.com";

所以在from字段中只有from电子邮件地址。什么都没有。没有括号。

我承认这不是一个非常优雅的解决方案,但无论如何也是一个解决方案。

当我试图设置mailFrom与空格和没有电子邮件时,我得到了这个错误:

$this->mailFrom = "Lorem ipsum";'

用电子邮件地址:

$this->mailFrom = "Lorem ipsum <no-reply@test.com>";

即使这是一个迟来的答案,我也会为其他人贴出来。"验证失败:"是针对收件人地址,而不是针对您的凭据。问题是收件人地址的格式错误,Gmail不接受。

//instead of 
$to = '<to.yahoo.com>';
//use
$to = 'Recipient Name <myname@example.com>'
//or simple 
$to = 'myname@example.com';