Unable to send email using Gmail SMTP server through PHPMailer, getting error: SMTP AUTH is required for message submission on port 587. How to fix? #
I would like to send an email using Gmail SMTP server through PHP Mailer.
this is my code
<?php
require_once(‘class.phpmailer.php’);
$mail = new PHPMailer();
$mail->IsSMTP();
$mail->CharSet=”UTF-8″;
$mail->SMTPSecure = ‘tls’;
$mail->Host = ‘smtp.gmail.com’;
$mail->Port = 587;
$mail->Username = ‘MyUsername@gmail.com’;
$mail->Password = ‘valid password’;
$mail->SMTPAuth = true;
$mail->From = ‘MyUsername@gmail.com’;
$mail->FromName = ‘Mohammad Masoudian’;
$mail->AddAddress(‘anotherValidGmail@gmail.com’);
$mail->AddReplyTo(‘phoenixd110@gmail.com’, ‘Information’);
$mail->IsHTML(true);
$mail->Subject = “PHPMailer Test Subject via Sendmail, basic”;
$mail->AltBody = “To view the message, please use an HTML compatible email viewer!”;
$mail->Body = “Hello”;
if(!$mail->Send())
{
echo “Mailer Error: ” . $mail->ErrorInfo;
}
else
{
echo “Message sent!”;
}
?>
but I receive this following Error
Mailer Error: SMTP Error: The following recipients failed: anotherValidGmail@gmail.com
SMTP server error: SMTP AUTH is required for message submission on port 587
Here is Some Solutions :
Solution 1: #
$mail = new PHPMailer(); // create a new object
$mail->IsSMTP(); // enable SMTP
$mail->SMTPDebug = 1; // debugging: 1 = errors and messages, 2 = messages only
$mail->SMTPAuth = true; // authentication enabled
$mail->SMTPSecure = ‘ssl’; // secure transfer enabled REQUIRED for Gmail
$mail->Host = “smtp.gmail.com”;
$mail->Port = 465; // or 587
$mail->IsHTML(true);
$mail->Username = “email@gmail.com”;
$mail->Password = “password”;
$mail->SetFrom(“example@gmail.com”);
$mail->Subject = “Test”;
$mail->Body = “hello”;
$mail->AddAddress(“email@gmail.com”);
if(!$mail->Send()) {
echo “Mailer Error: ” . $mail->ErrorInfo;
} else {
echo “Message has been sent”;
}
Solution 2: #
It seems that your server fails to establish a connection to Gmail SMTP server. Here are some hints to troubleshoot this: 1) check if SSL correctly configured on your PHP (module that handle it isn’t installed by default on PHP. You have to check your configuration in phph.ini). 2) check if your firewall let outgoing calls to the required port (here 465 or 587). Use telnet to do so. If the port isn’t opened, you’ll then require some support from sysdmin to setup the config. I hope you’ll sort this out quickly!
Solution 3: #
$mail = new PHPMailer;
//Enable SMTP debugging.
$mail->SMTPDebug = 0;
//Set PHPMailer to use SMTP.
$mail->isSMTP();
//Set SMTP host name
$mail->Host = $hostname;
//Set this to true if SMTP host requires authentication to send email
$mail->SMTPAuth = true;
//Provide username and password
$mail->Username = $sender;
$mail->Password = $mail_password;
//If SMTP requires TLS encryption then set it
$mail->SMTPSecure = “ssl”;
//Set TCP port to connect to
$mail->Port = 465;
$mail->From = $sender;
$mail->FromName = $sender_name;
$mail->addAddress($to);
$mail->isHTML(true);
$mail->Subject = $Subject;
$mail->Body = $Body;
$mail->AltBody = “This is the plain text version of the email content”;
if (!$mail->send()) {
echo “Mailer Error: ” . $mail->ErrorInfo;
}
else {
echo ‘Mail Sent Successfully’;
}
Solution 4: #
$mail->IsHTML(true);
//Tell PHPMailer to use SMTP
$mail->isSMTP();
//Enable SMTP debugging
//SMTP::DEBUG_OFF = off (for production use)
//SMTP::DEBUG_CLIENT = client messages
//SMTP::DEBUG_SERVER = client and server messages
$mail->SMTPDebug = SMTP::DEBUG_CLIENT;
//Set the hostname of the mail server
$mail->Host = ‘smtp.gmail.com’;
//Set the SMTP port number – likely to be 25, 465 or 587
$mail->Port = 587;
//Whether to use SMTP authentication
$mail->SMTPAuth = true;
//Username to use for SMTP authentication
$mail->Username = ‘user@gmail.com’;
//Password to use for SMTP authentication
$mail->Password = ‘PASSWORD_HERE’;
//Set who the message is to be sent from
$mail->setFrom(’email@email.ext’, ‘From where it is sent’);
//Set an alternative reply-to address
$mail->addReplyTo(’email@email.ext’, ‘Reply To’);
//Set who the message is to be sent to
$mail->addAddress(’email@email.ext’);
//Set the subject line
$mail->Subject = ‘Email subject’;
// Body message
$mail->Body = ‘
<h1>Message details</h1>
‘;
// Send message
if( $mail->send() ) {
echo “Sent”
} else {
echo “Not Sent”;
}