【问题标题】:Username and Password not accepted不接受用户名和密码
【发布时间】:2015-02-11 19:04:02
【问题描述】:

我正在尝试使用 gmail 的 smtp 发送电子邮件(请参阅下面的代码),但我收到“用户名和密码不被接受”错误。

我试过了:

它们都不起作用。

这是 PHP 代码:

function sendEmail($from, $fromName, $msg)
{
    $mail = new PHPMailer();
    $mail->SMTPDebug  = 4; // enables SMTP debug information (for testing)
                       // 1 = errors and messages
                       // 2 = messages only
    $mail->WordWrap    = 900; // RFC 2822 Compliant for Max 998 characters per line
    $mail->IsSMTP();

    //$mail->Host = 'tls://smtp.gmail.com:587';
    $mail->Host = "smtp.gmail.com";
    $mail->Port = 587; //465
    $mail->SMTPSecure = "tls";
    $mail->SMTPAuth = true;
    $mail->Username = 'xxxx@gmail.com';
    $mail->Password = 'yyyyyyy';

    $mail->From = $from;
    $mail->FromName = $fromName;

    $mail->AddAddress('foo@gmail.com', ' ');

    $mail->IsHTML(true);

    $mail->CharSet = 'UTF-8';
    $mail->Priority = 1;
    $mail->Timeout = 60;
    $mail->SMTPKeepAlive = true; 
    $mail->Subject  = "subject here";
    $mail->Body = $msg;
    $mail->AltBody = 'testing..';
    $ok = $mail->Send();

    $mail->ClearAllRecipients();
    $mail->ClearAttachments();

    return $ok;
}

更新:Here's 完整的错误消息(DebugMode = 4)

【问题讨论】:

  • 您使用的是新创建的 gmail 帐户吗?在某些时候,谷歌增加了对 gmail 帐户如何用于 smtp 的限制
  • @MichaelColeman:该帐户大约有 1 年。在哪里可以找到有关此新限制的更多信息?
  • 尝试创建应用密码而不是使用您的 gmail 密码,security.google.com/settings/security/apppasswords 过去曾为我工作过。
  • 好的,如果其他电子邮件客户端去年一直在使用 SMTP 处理 gmail 帐户。我会说你在这个问题上很好。抱歉,我从未遇到过文档/信息,只是在我设置帐户时来自 gmail 的提示。我最终只是使用了一个我知道谷歌已经“清除”的不同帐户
  • @LawrenceCherone:我正在尝试创建,但该页面重定向到 myaccount.google.com,我无法找到如何在其中创建密码:*

标签: php gmail phpmailer smtpclient


【解决方案1】:

经过测试,我通过将主机更改为包含 tls 前缀来使其工作。

function sendEmail($from, $fromName, $msg)
{
$mail = new PHPMailer();
$mail->SMTPDebug  = 4; 
$mail->WordWrap    = 900; 
$mail->IsSMTP();

//$mail->Host = 'tls://smtp.gmail.com:587';
$mail->Host = "tls://smtp.gmail.com";
$mail->Port = 587; //465
$mail->SMTPSecure = "tls";
$mail->SMTPAuth = true;
$mail->Username = 'xxxx@gmail.com';
$mail->Password = 'yyyyyyy';

// Define o remetente
$mail->From = $from;
$mail->FromName = $fromName;

$mail->AddAddress('foo@gmail.com', ' ');

$mail->IsHTML(true);

$mail->CharSet = 'UTF-8';
$mail->Priority = 1;
$mail->Timeout = 60;
$mail->SMTPKeepAlive = true; 
$mail->Subject  = "subject here";
$mail->Body = $msg;
$mail->AltBody = 'testing..';
$ok = $mail->Send();

$mail->ClearAllRecipients();
$mail->ClearAttachments();

return $ok;
}

【讨论】:

  • 这不是您要寻找的解决方法。在Host 参数中设置tls 与通过SMTPSecure 属性设置完全相同。
猜你喜欢
  • 2022-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-10
  • 2017-09-10
  • 1970-01-01
  • 1970-01-01
  • 2016-05-22
相关资源
最近更新 更多