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

当前回答

我尝试了@shasi kanth提供的建议,但没有奏效。我读了文档,做了一些改动。所以我设法通过Gmail使用这段代码发送邮件,其中vendor/autoload.php是由作曲家与作曲家要求“swiftmailer/swiftmailer:^6.0”:

<?php
     require_once 'vendor/autoload.php';
     $transport = (new Swift_SmtpTransport('smtp.gmail.com', 465, 'ssl'))->setUsername ('SendingMail')->setPassword ('Password');

     $mailer = new Swift_Mailer($transport);

     $message = (new Swift_Message('test'))
      ->setFrom(['Sending mail'])
      ->setTo(['Recipient mail'])
      ->setBody('Message')
  ;

     $result = $mailer->send($message);
    ?>

其他回答

Set

'auth' => false,

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

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

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

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

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

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

我不推荐Pear Mail。自2010年以来就没有更新过。还要读取源文件;源代码几乎过时了,是用php4风格写的,很多错误/ bug都被贴出来了(谷歌it)。我正在使用Swift Mailer。

Swift Mailer集成到任何用PHP 5编写的web应用程序中,提供了一种灵活而优雅的面向对象的方法来发送具有多种功能的电子邮件。

使用SMTP, sendmail, postfix或自定义传输发送电子邮件 实现你自己。 支持需要用户名和密码和/或加密的服务器。 在不剥离请求数据的情况下保护头部注入攻击 内容。 发送MIME兼容的HTML/多部分电子邮件。 使用事件驱动的插件来定制库。 处理内存较低的大型附件和内联/嵌入式图像 使用。

这是一个免费的开源软件,你可以下载Swift Mailer并上传到你的服务器上。(功能列表从所有者网站复制)。

Gmail SSL/SMTP和Swift Mailer的工作示例在这里…

// Swift Mailer Library
require_once '../path/to/lib/swift_required.php';

// Mail Transport
$transport = Swift_SmtpTransport::newInstance('ssl://smtp.gmail.com', 465)
    ->setUsername('username@gmail.com') // Your Gmail Username
    ->setPassword('my_secure_gmail_password'); // Your Gmail Password

// Mailer
$mailer = Swift_Mailer::newInstance($transport);

// Create a message
$message = Swift_Message::newInstance('Wonderful Subject Here')
    ->setFrom(array('sender@example.com' => 'Sender Name')) // can be $_POST['email'] etc...
    ->setTo(array('receiver@example.com' => 'Receiver Name')) // your email / multiple supported.
    ->setBody('Here is the <strong>message</strong> itself. It can be text or <h1>HTML</h1>.', 'text/html');

// Send the message
if ($mailer->send($message)) {
    echo 'Mail sent successfully.';
} else {
    echo 'I am sure, your configuration are not correct. :(';
}

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));