ItGo.me Focus on IT Recommend

Home > Send email using the GMail SMTP server from a PHP page

Send email using the GMail SMTP server from a PHP page

2020阿里云最低价产品入口,含代金券(新老用户有优惠),
入口地址https://www.aliyun.com/minisite/goods

I am trying to send an email via GMail's SMTP server from a PHP page, but I get this error:

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

Can anyone help? Here is my code:

<?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>");
 }
?>
php email smtp gmail
|
  this question
edited Jun 27 '14 at 23:30 user456814 asked Apr 3 '09 at 2:47 skb 9,867 27 72 123

 | 

11 Answers
11

---Accepted---Accepted---Accepted---
// 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>');
}

|
  this answer
edited Jan 14 '16 at 2:06 Nathan Tuggy 2,317 9 21 36 answered May 1 '10 at 4:02 pavan kumar 2,996 1 9 2 114   what is Mail.php?? where do I get this file from? –  Zain Shaikh Nov 26 '10 at 23:23 73   He's using the Pear Mail package. –  Xavi Dec 14 '10 at 1:19 17   could anyone please give me a link where I can get the Mail.php file. Because I tried it and it would not work Thanks –  Yoosuf Apr 17 '11 at 6:52 10   Where are the @ symbols in this example above? I do not see a single one in there! –  darkAsPitch Jun 30 '11 at 4:08 6   I believe that myaccount.gmail.com is the same as myaccount@gmail.com in the email standards. –  Sherwin Flight Oct 14 '11 at 9:02  |  show more comments

Using Swift mailer, it is quite easy to send a mail through Gmail credentials:

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

|
  this answer
edited May 15 '13 at 5:34 answered Sep 7 '12 at 12:10 shasi kanth 3,406 14 72 117 2   This worked "to the first" just changing the GMAIL_USERNAME, GMAIL_PASSWORD, and the From and To addresses. No other solution worked for me. Thanks. –  Marco Muciño May 14 '13 at 18:08 7   I agree, swift mailer is a drop in mail solution that much easier than messing with pear. Don't forget to enable PHP's php_openssl extension. –  Soth May 30 '13 at 4:02 1   Nice solution using SwiftMailer! +1 –  Amal Murali Feb 16 '14 at 6:16 1   arrrgh. icant get swiftmailer to work. i dont know how to use that "composer" so i just downloaded the swiftmailer zip from github then I enabled open_ssl then supplied my gmail email and password but it still didnt work. –  boi_echos Sep 14 '14 at 13:05 2   ah sorry for my stupidity. you have to open your gmail account because there is an email telling you to enable "less secure app". then its now working heheh –  boi_echos Sep 14 '14 at 13:09  |  show more comments

Your code does not appear to be using TLS (SSL), which is necessary to deliver mail to Google (and using ports 465 or 587).

You can do this by setting

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

Your code looks suspiciously like this example which refers to ssl:// in the hostname scheme.


|
  this answer
answered Apr 3 '09 at 3:00 crb 6,339 6 30 45

 | 

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.

Swift Mailer integrates into any web application written in PHP 5, offering a flexible and elegant object-oriented approach to sending emails with a multitude of features.

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.

It is a free and open source you can Download Swift Mailer and upload to your server. (The feature list is copied from owner website).

The working example of Gmail SSL/SMTP and Swift Mailer is here...

// 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. :(';
}

I hope this helps. Happy coding... :)


|
  this answer
edited Apr 9 '14 at 0:37 Peter Mortensen 10.9k 15 75 109 answered Aug 2 '13 at 16:42 Madan Sapkota 11.1k 4 60 78

 | 
<?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   = "user@gmail.com";  // GMAIL username
$mail->Password   = "password";            // GMAIL password

$mail->SetFrom('contact@prsps.in', 'PRSPS');

//$mail->AddReplyTo("user2@gmail.com', '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 = "user2@yahoo.co.in";
$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!";
}

?>

|
  this answer
edited Mar 23 '16 at 7:24 answered Dec 25 '11 at 12:19 Deept Raghav 1,018 9 14      Why do you set the host twice and which one is the right one? –  Emile Bergeron Mar 9 '16 at 3:13 1   I have edited the answer. Happy Coding :) –  Deept Raghav Mar 23 '16 at 7:25

 | 

SwiftMailer can send E-Mail using external servers.

here is an example that shows how to use a Gmail server:

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

|
  this answer
edited May 20 '16 at 8:17 Sam Apostel 77 10 answered Dec 23 '10 at 14:57 Pekka 웃 314k 95 732 939

 | 

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.


|
  this answer
answered Apr 16 '10 at 1:50 s01ipsist 1,882 19 32

 | 

Gmail requires port 465, and also it's the code from phpmailer :)


|
  this answer
edited Apr 9 '14 at 0:26 Peter Mortensen 10.9k 15 75 109 answered Jul 11 '09 at 21:26 sandeep

 | 

Send Mail using phpMailer library through Gmail Please donwload library files from 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 = "username@gmail.com";
//Password to use for SMTP authentication
$mail->Password = "yourpassword";
//Set who the message is to be sent from
$mail->setFrom('from@example.com', 'First Last');
//Set an alternative reply-to address
$mail->addReplyTo('replyto@example.com', 'First Last');
//Set who the message is to be sent to
$mail->addAddress('whoto@example.com', '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!";
}

|
  this answer
answered Sep 26 '16 at 10:17 Bhavin Solanki 903 3 23

 | 

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.


|
  this answer
answered Oct 25 '16 at 10:56 Strategist 137 2 8

 |  -1

Set

'auth' => false,

Also, see if port 25 works.


|
  this answer
answered Apr 3 '09 at 2:57 CookieOfFortune 10.2k 3 24 48 2   It won't - Google requires delivery on 465 or 587. See mail.google.com/support/bin/answer.py?hl=en&answer=13287. –  crb Apr 3 '09 at 3:11

 | 

protected by Bill the Lizard Aug 30 '10 at 11:14

Thank you for your interest in this question. Because it has attracted low-quality or spam answers that had to be removed, posting an answer now requires 10 reputation on this site (the association bonus does not count).

Would you like to answer one of these unanswered questions instead?

Not the answer you're looking for? Browse other questions tagged php email smtp gmail or ask your own question.

Recommend:php - unable to send email from gmail smtp server using codeIgniter

code of controller............... function do_upload(){ $config['upload_path'] = 'C:\xampp\htdocs\upload\application'; $config['allowed_types'] = 'doc|docx|pdf'; $config['max_size'] = '10240'; $this->load->library('upload'

oriUlr:http://stackoverflow.com/questions/712392/send-email-using-the-gmail-smtp-server-from-a-php-page

------splitte line----------------------------