我试图通过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>");
 }
?>

当前回答

SwiftMailer可以使用外部服务器发送电子邮件。

下面是一个演示如何使用Gmail服务器的例子:

require_once "lib/Swift.php";
require_once "lib/Swift/Connection/SMTP.php";

//Connect to localhost on port 25
$swift =& new Swift(new Swift_Connection_SMTP("localhost"));


//Connect to an IP address on a non-standard port
$swift =& new Swift(new Swift_Connection_SMTP("217.147.94.117", 419));


//Connect to Gmail (PHP5)
$swift = new Swift(new Swift_Connection_SMTP(
    "smtp.gmail.com", Swift_Connection_SMTP::PORT_SECURE, Swift_Connection_SMTP::ENC_TLS));

其他回答

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

要在Ubuntu中安装PEAR的Mail.php,运行以下命令:

    sudo apt-get install php-pear
    sudo pear install mail
    sudo pear install Net_SMTP
    sudo pear install Auth_SASL
    sudo pear install mail_mime

SwiftMailer可以使用外部服务器发送电子邮件。

下面是一个演示如何使用Gmail服务器的例子:

require_once "lib/Swift.php";
require_once "lib/Swift/Connection/SMTP.php";

//Connect to localhost on port 25
$swift =& new Swift(new Swift_Connection_SMTP("localhost"));


//Connect to an IP address on a non-standard port
$swift =& new Swift(new Swift_Connection_SMTP("217.147.94.117", 419));


//Connect to Gmail (PHP5)
$swift = new Swift(new Swift_Connection_SMTP(
    "smtp.gmail.com", Swift_Connection_SMTP::PORT_SECURE, Swift_Connection_SMTP::ENC_TLS));

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

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

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

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

自2022年5月30日起,谷歌将不再支持使用允许您使用用户名和密码登录谷歌帐户的第三方应用程序和设备。

但是,谷歌提供了一个简单的解决方案。

请输入由谷歌生成的app密码,而不是密码。首先,进入设置并启用两步验证。

然后点击App密码。

您应该看到应用程序密码屏幕。应用程序密码可以让你从不支持两步验证的设备上的应用程序登录到你的谷歌帐户。选择“邮件”作为应用程序,然后选择设备。在我的例子中,我选择了Other,因为我想将我的应用程序部署到云中。

完成后,单击GENERATE按钮。您将看到您生成的应用程序密码。

只需复制密码,并替换之前的密码在您的电子邮件发送服务生成的一个。不过,您将无法再次看到密码。

就是这样!