Having trouble with PHPMailer
gmail, php
Solution
Here is a working example:
<?php
function SendMail( $ToEmail, $MessageHTML, $MessageTEXT ) {
require_once ( 'class.phpmailer.php' ); // Add the path as appropriate
$Mail = new PHPMailer();
$Mail->IsSMTP(); // Use SMTP
$Mail->Host = "smtp.gmail.com"; // Sets SMTP server
$Mail->SMTPDebug = 2; // 2 to enable SMTP debug information
$Mail->SMTPAuth = TRUE; // enable SMTP authentication
$Mail->SMTPSecure = "tls"; //Secure conection
$Mail->Port = 587; // set the SMTP port
$Mail->Username = 'MyGmail@gmail.com'; // SMTP account username
$Mail->Password = 'MyGmailPassword'; // SMTP account password
$Mail->Priority = 1; // Highest priority - Email priority (1 = High, 3 = Normal, 5 = low)
$Mail->CharSet = 'UTF-8';
$Mail->Encoding = '8bit';
$Mail->Subject = 'Test Email Using Gmail';
$Mail->ContentType = 'text/html; charset=utf-8\r\n';
$Mail->From = 'MyGmail@gmail.com';
$Mail->FromName = 'GMail Test';
$Mail->WordWrap = 900; // RFC 2822 Compliant for Max 998 characters per line
$Mail->AddAddress( $ToEmail ); // To:
$Mail->isHTML( TRUE );
$Mail->Body = $MessageHTML;
$Mail->AltBody = $MessageTEXT;
$Mail->Send();
$Mail->SmtpClose();
if ( $Mail->IsError() ) { // ADDED - This error checking was missing
return FALSE;
}
else {
return TRUE;
}
}
$ToEmail = 'Name@example.com';
$ToName = 'Name';
$Send = SendMail( $ToEmail, $MessageHTML, $MessageTEXT );
if ( $Send ) {
echo "<h2> Sent OK</h2>";
}
else {
echo "<h2> ERROR</h2>";
}
die;
?>
I tried this script and had no problem sending several messages.
UPDATED:
This is the typical response from Gmail on success:
SMTP -> FROM SERVER:220 mx.google.com ESMTP 20sm6345523qek.6
SMTP -> FROM SERVER: 250-mx.google.com at your service, [181.155.13.39]
250-SIZE 35882577
250-8BITMIME
250-STARTTLS
250 ENHANCEDSTATUSCODES
SMTP -> FROM SERVER:220 2.0.0 Ready to start TLS
SMTP -> FROM SERVER: 250-mx.google.com at your service, [181.155.13.39]
250-SIZE 35882577
250-8BITMIME
250-AUTH LOGIN PLAIN XOAUTH XOAUTH2
250 ENHANCEDSTATUSCODES
SMTP -> FROM SERVER:250 2.1.0 OK 20sm6345523qek.6
SMTP -> FROM SERVER:250 2.1.5 OK 20sm6345523qek.6
SMTP -> FROM SERVER:354 Go ahead 20sm6345523qek.6
SMTP -> FROM SERVER:250 2.0.0 OK 1353474062 20sm6345523qek.6
SMTP -> FROM SERVER:221 2.0.0 closing connection 20sm6345523qek.6
Problem
I am trying to use PHPMailer to send a gmail email. I followed this post In order to do this, I set up a function shown below: ``` function sendEmail($email, $name) { $mail = new PHPMailer(); $mail->IsSMTP(); // send via SMTP //IsSMTP(); // send via SMTP I commented it cos it gives an error $mail->SMTPAuth = true; // turn on SMTP authentication $mail->Username = 'email@gmail.com'; // Changed my email $mail->Password = "password";// Changed my password $mail->From = 'email@gmail.com'; $mail->FromName = 'FROM NAME'; $mail->AddAddress($email); $mail->IsHTML(true); // send as HTML $mail->Subject = "Subject"; $mail->Body = "Body"; if (!$mail->Send()) { return false; } else { return true; } } ``` Unfortunately, it keeps on returning false. Can you please tell me whats wrong with the code? Edit: The error which I am getting is shown below: ``` SMTP -> ERROR: Failed to connect to server: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond SMTP Error: Could not connect to SMTP host. ``` UPDATED CODE: ``` $Mail = new PHPMailer(); $Mail->IsSMTP(); // Use SMTP $Mail->Host = "smtp.gmail.com"; // Sets SMTP server $Mail->SMTPDebug = 2; // 2 to enable SMTP debug information $Mail->SMTPAuth = TRUE; // enable SMTP authentication $Mail->SMTPSecure = "tls"; //Secure conection $Mail->Port = 587; // set the SMTP port $Mail->Username = EMAIL; // SMTP account username $Mail->Password = PASS; // SMTP account password $Mail->Priority = 1; // Highest priority - Email priority (1 = High, 3 = Normal, 5 = low) $Mail->CharSet = 'UTF-8'; $Mail->Encoding = '8bit'; $Mail->Subject = 'SUB'; $Mail->ContentType = 'text/html; charset=utf-8\r\n'; $Mail->From = EMAIL; $Mail->FromName = 'FROM NAME'; $Mail->WordWrap = 900; // RFC 2822 Compliant for Max 998 characters per line $Mail->AddAddress($email); // To: $Mail->isHTML(TRUE); $Mail->Body = "Hi"; $Mail->AltBody = "Hi"; $Mail->Send(); $Mail->SmtpClose(); ```