我试图通过GMail的SMTP服务器从PHP页面发送电子邮件,但我得到这个错误:

身份验证失败[SMTP: SMTP服务器不支持身份验证(code: 250, response: mx.google.com at your service, [98.117.99.235] SIZE 35651584 8BITMIME STARTTLS ENHANCEDSTATUSCODES PIPELINING)]

有人能帮忙吗?这是我的代码:

<?php
require_once "Mail.php";

$from = "Sandra Sender <sender@example.com>";
$to = "Ramona Recipient <ramona@microsoft.com>";
$subject = "Hi!";
$body = "Hi,\n\nHow are you?";

$host = "smtp.gmail.com";
$port = "587";
$username = "testtest@gmail.com";
$password = "testtest";

$headers = array ('From' => $from,
  'To' => $to,
  'Subject' => $subject);
$smtp = Mail::factory('smtp',
  array ('host' => $host,
    'port' => $port,
    'auth' => true,
    'username' => $username,
    'password' => $password));

$mail = $smtp->send($to, $headers, $body);

if (PEAR::isError($mail)) {
  echo("<p>" . $mail->getMessage() . "</p>");
 } else {
  echo("<p>Message successfully sent!</p>");
 }
?>

当前回答

我也有这个问题。我设置了正确的设置,并启用了不太安全的应用程序,但它仍然不起作用。最后,我启用了这个https://accounts.google.com/UnlockCaptcha,它为我工作了。

其他回答

Set

'auth' => false,

另外,看看端口25是否工作。

您的代码似乎没有使用TLS (SSL),这是将邮件发送到谷歌(并使用端口465或587)所必需的。

你可以通过设置来做到这一点

$host = "ssl://smtp.gmail.com";

您的代码看起来很像这个示例,它在主机名方案中引用ssl://。

Gmail需要端口465,它也是来自phpmailer的代码

I have a solution for GSuite accounts that doesnt have the "@gmail.com" sufix. Also I think it will work for GSuite accounts with the @gmail.com but havent tried it. First you should have the privileges to change the option "allos¿w less secure app" for your GSuite account. If you have the privileges (you can check in account settings->security) then you have to deactivate "two step factor authentication" go to the end of the page and set to "yes" for allow less secure applications. That's all. If you dont have privileges to change those options the solution for this thread will not work. Check https://support.google.com/a/answer/6260879?hl=en to make changes to "allow less..." option.

问题中列出的代码需要两个更改

$host = "ssl://smtp.gmail.com";
$port = "465";

SSL连接需要使用465端口。