从 PHP 页面使用 GMail SMTP 服务器发送电子邮件
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/712392/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Send email using the GMail SMTP server from a PHP page
提问by skb
I am trying to send an email via GMail's SMTP server from a PHP page, but I get this error:
我正在尝试从 PHP 页面通过 GMail 的 SMTP 服务器发送电子邮件,但出现此错误:
authentication failure [SMTP: SMTP server does no support authentication (code: 250, response: mx.google.com at your service, [98.117.99.235] SIZE 35651584 8BITMIME STARTTLS ENHANCEDSTATUSCODES PIPELINING)]
身份验证失败 [SMTP:SMTP 服务器不支持身份验证(代码:250,响应:mx.google.com 为您服务,[98.117.99.235] SIZE 35651584 8BITMIME STARTTLS ENHANCEDSTATUSCODES PIPELINING)]
Can anyone help? Here is my code:
任何人都可以帮忙吗?这是我的代码:
<?php
require_once "Mail.php";
$from = "Sandra Sender <[email protected]>";
$to = "Ramona Recipient <[email protected]>";
$subject = "Hi!";
$body = "Hi,\n\nHow are you?";
$host = "smtp.gmail.com";
$port = "587";
$username = "[email protected]";
$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>");
}
?>
采纳答案by pavan kumar
// Pear Mail Library
require_once "Mail.php";
$from = '<[email protected]>';
$to = '<[email protected]>';
$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' => '[email protected]',
'password' => 'passwordxxx'
));
$mail = $smtp->send($to, $headers, $body);
if (PEAR::isError($mail)) {
echo('<p>' . $mail->getMessage() . '</p>');
} else {
echo('<p>Message successfully sent!</p>');
}
回答by shasi kanth
Using Swift mailer, it is quite easy to send a mail through Gmail credentials:
使用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('[email protected]' => 'ABC'))
->setTo(array('[email protected]'))
->setBody('This is a test mail.');
$result = $mailer->send($message);
?>
回答by crb
Your code does not appear to be using TLS (SSL), which is necessary to deliver mail to Google (and using ports 465 or 587).
您的代码似乎没有使用 TLS (SSL),这是将邮件传送到 Google(并使用端口 465 或 587)所必需的。
You can do this by setting
您可以通过设置来做到这一点
$host = "ssl://smtp.gmail.com";
$host = "ssl://smtp.gmail.com";
Your code looks suspiciously like this examplewhich refers to ssl:// in the hostname scheme.
您的代码看起来很像这个示例,它在主机名方案中引用了 ssl://。
回答by Madan Sapkota
I don't recommend Pear Mail. It has not been updated since 2010. Also read the source files; the source code is almost outdated, written in PHP 4 style and many errors / bugs have been posted (Google it). I am using Swift Mailer.
我不推荐梨邮件。2010年以后就没有更新了。另外阅读源文件;源代码几乎已经过时,以 PHP 4 风格编写,并且已经发布了许多错误/错误(谷歌它)。我正在使用 Swift 邮件程序。
Swift Mailerintegrates into any web application written in PHP 5, offering a flexible and elegant object-oriented approach to sending emails with a multitude of features.
Swift Mailer集成到任何用 PHP 5 编写的 Web 应用程序中,提供了一种灵活而优雅的面向对象的方法来发送具有多种功能的电子邮件。
Send emails using SMTP, sendmail, postfix or a custom Transport implementation of your own.
Support servers that require username & password and/or encryption.
Protect from header injection attacks without stripping request data content.
Send MIME compliant HTML/multipart emails.
Use event-driven plugins to customize the library.
Handle large attachments and inline/embedded images with low memory use.
使用 SMTP、sendmail、postfix 或您自己的自定义传输实现发送电子邮件。
支持需要用户名和密码和/或加密的服务器。
在不剥离请求数据内容的情况下防止标头注入攻击。
发送符合 MIME 标准的 HTML/多部分电子邮件。
使用事件驱动的插件来自定义库。
以低内存使用处理大附件和内嵌/嵌入图像。
It is a free and open source you can Download Swift Mailerand upload to your server. (The feature list is copied from owner website).
它是一个免费的开源软件,您可以下载 Swift Mailer并上传到您的服务器。(功能列表是从所有者网站复制的)。
The working example of Gmail SSL/SMTP and Swift Mailer is here...
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('[email protected]') // 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('[email protected]' => 'Sender Name')) // can be $_POST['email'] etc...
->setTo(array('[email protected]' => '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. :(';
}
I hope this helps. Happy coding... :)
我希望这有帮助。快乐编码... :)
回答by Deept Raghav
<?php
date_default_timezone_set('America/Toronto');
require_once('class.phpmailer.php');
//include("class.smtp.php"); // optional, gets called from within class.phpmailer.php if not already loaded
$mail = new PHPMailer();
$body = "gdssdh";
//$body = eregi_replace("[\]",'',$body);
$mail->IsSMTP(); // telling the class to use SMTP
//$mail->Host = "ssl://smtp.gmail.com"; // SMTP server
$mail->SMTPDebug = 1; // enables SMTP debug information (for testing)
// 1 = errors and messages
// 2 = messages only
$mail->SMTPAuth = true; // enable SMTP authentication
$mail->SMTPSecure = "ssl"; // sets the prefix to the servier
$mail->Host = "smtp.gmail.com"; // sets GMAIL as the SMTP server
$mail->Port = 465; // set the SMTP port for the GMAIL server
$mail->Username = "[email protected]"; // GMAIL username
$mail->Password = "password"; // GMAIL password
$mail->SetFrom('[email protected]', 'PRSPS');
//$mail->AddReplyTo("[email protected]', 'First Last");
$mail->Subject = "PRSPS password";
//$mail->AltBody = "To view the message, please use an HTML compatible email viewer!"; // optional, comment out and test
$mail->MsgHTML($body);
$address = "[email protected]";
$mail->AddAddress($address, "user2");
//$mail->AddAttachment("images/phpmailer.gif"); // attachment
//$mail->AddAttachment("images/phpmailer_mini.gif"); // attachment
if(!$mail->Send()) {
echo "Mailer Error: " . $mail->ErrorInfo;
} else {
echo "Message sent!";
}
?>
回答by Pekka
SwiftMailercan send E-Mail using external servers.
SwiftMailer可以使用外部服务器发送电子邮件。
here is an example that shows how to use a Gmail server:
这是一个展示如何使用 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));
回答by s01ipsist
The code as listed in the question needs two changes
问题中列出的代码需要进行两次更改
$host = "ssl://smtp.gmail.com";
$port = "465";
Port 465 is required for an SSL connection.
SSL 连接需要端口 465。
回答by Bhavin Solanki
Send Mail using phpMailer library through Gmail Please donwload library files from Github
通过 Gmail 使用 phpMailer 库发送邮件 请从Github下载库文件
<?php
/**
* This example shows settings to use when sending via Google's Gmail servers.
*/
//SMTP needs accurate times, and the PHP time zone MUST be set
//This should be done in your php.ini, but this is how to do it if you don't have access to that
date_default_timezone_set('Etc/UTC');
require '../PHPMailerAutoload.php';
//Create a new PHPMailer instance
$mail = new PHPMailer;
//Tell PHPMailer to use SMTP
$mail->isSMTP();
//Enable SMTP debugging
// 0 = off (for production use)
// 1 = client messages
// 2 = client and server messages
$mail->SMTPDebug = 2;
//Ask for HTML-friendly debug output
$mail->Debugoutput = 'html';
//Set the hostname of the mail server
$mail->Host = 'smtp.gmail.com';
// use
// $mail->Host = gethostbyname('smtp.gmail.com');
// if your network does not support SMTP over IPv6
//Set the SMTP port number - 587 for authenticated TLS, a.k.a. RFC4409 SMTP submission
$mail->Port = 587;
//Set the encryption system to use - ssl (deprecated) or tls
$mail->SMTPSecure = 'tls';
//Whether to use SMTP authentication
$mail->SMTPAuth = true;
//Username to use for SMTP authentication - use full email address for gmail
$mail->Username = "[email protected]";
//Password to use for SMTP authentication
$mail->Password = "yourpassword";
//Set who the message is to be sent from
$mail->setFrom('[email protected]', 'First Last');
//Set an alternative reply-to address
$mail->addReplyTo('[email protected]', 'First Last');
//Set who the message is to be sent to
$mail->addAddress('[email protected]', 'John Doe');
//Set the subject line
$mail->Subject = 'PHPMailer GMail SMTP test';
//Read an HTML message body from an external file, convert referenced images to embedded,
//convert HTML into a basic plain-text alternative body
$mail->msgHTML(file_get_contents('contents.html'), dirname(__FILE__));
//Replace the plain text body with one created manually
$mail->AltBody = 'This is a plain-text message body';
//Attach an image file
$mail->addAttachment('images/phpmailer_mini.png');
//send the message, check for errors
if (!$mail->send()) {
echo "Mailer Error: " . $mail->ErrorInfo;
} else {
echo "Message sent!";
}
回答by Strategist
I had this problem also. I set the correct settings and have enabled less secure apps but it still did not work. Finally, I enabled this https://accounts.google.com/UnlockCaptcha, and it worked for me. I hope this helps someone.
我也有这个问题。我设置了正确的设置并启用了安全性较低的应用程序,但它仍然无法正常工作。最后,我启用了这个https://accounts.google.com/UnlockCaptcha,它对我有用。我希望这可以帮助别人。
回答by Nahid
To install PEAR's Mail.php in Ubuntu, run following set of commands:
要在 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

