使用GMail SMTP服务器从PHP页面发送电子邮件

僤鯓⒐⒋嵵緔 提交于 2020-02-26 11:10:25

我正在尝试从PHP页面通过GMail的SMTP服务器发送电子邮件,但出现此错误:

身份验证失败[SMTP:SMTP服务器不支持身份验证(代码:250,响应:mx.google.com,为您提供服务,[98.117.99.235]大小为35651584 8位MIME 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>");
 }
?>

#1楼

Gmail需要465端口,也是phpmailer的代码:)


#2楼

使用Swift mailer ,通过Gmail凭据发送邮件非常容易:

<?php
require_once 'swift/lib/swift_required.php';

$transport = Swift_SmtpTransport::newInstance('smtp.gmail.com', 465, "ssl")
  ->setUsername('GMAIL_USERNAME')
  ->setPassword('GMAIL_PASSWORD');

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

$message = Swift_Message::newInstance('Test Subject')
  ->setFrom(array('abc@example.com' => 'ABC'))
  ->setTo(array('xyz@test.com'))
  ->setBody('This is a test mail.');

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

#3楼

我不建议使用Pear Mail。 自2010年以来未进行过更新。 源代码几乎已经过时,是用PHP 4风格编写的,并且已经发布了许多错误/错误(谷歌它)。 我正在使用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. :(';
}

我希望这有帮助。 快乐的编码... :)


#4楼

问题中列出的代码需要进行两项更改

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

SSL连接需要端口465。


#5楼

// Pear Mail Library
require_once "Mail.php";

$from = '<fromaddress@gmail.com>';
$to = '<toaddress@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>');
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!