send email using Gmail SMTP server through PHP Mailer

家住魔仙堡 提交于 2019-11-25 22:59:40

问题


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 recieve 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

my domain is vatandesign.ir


回答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";
 }

This code above has been tested and worked for me.

It could be that you needed $mail->SMTPSecure = 'ssl';

Also make sure you don't have two step verification switched on for that account as that can cause problems also.

UPDATED

You could try changing $mail->SMTP to:

$mail->SMTPSecure = 'tls';

It's worth noting that some SMTP servers block connections. Some SMTP servers don't support SSL (or TLS) connections.




回答2:


So I just solved my own "SMTP connection failure" error and I wanted to post the solution just in case it helps anyone else.

I used the EXACT code given in the PHPMailer example gmail.phps file. It worked simply while I was using MAMP and then I got the SMTP connection error once I moved it on to my personal server.

All of the Stack Overflow answers I read, and all of the troubleshooting documentation from PHPMailer said that it wasn't an issue with PHPMailer. That it was a settings issue on the server side. I tried different ports (587, 465, 25), I tried 'SSL' and 'TLS' encryption. I checked that openssl was enabled in my php.ini file. I checked that there wasn't a firewall issue. Everything checked out, and still nothing.

The solution was that I had to remove this line:

$mail->isSMTP();

Now it all works. I don't know why, but it works. The rest of my code is copied and pasted from the PHPMailer example file.




回答3:


Also worth noting that if you have two factor authentication enabled, you'll need to setup an application specific password to use in place of your email account's password.

You can generate an application specific password by following these instructions: https://support.google.com/accounts/answer/185833

Then set $mail->Password to your application specific password.




回答4:


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!




回答5:


Open this Link and select follow the instructions google servers blocks any attempts from unknown servers so once you click on captcha check every thing will be fine




回答6:


Google treat Gmail accounts differently depending on the available user information, probably to curb spammers.

I couldn't use SMTP until I did the phone verification. Made another account to double check and I was able to confirm it.




回答7:


this code working fine for me

    $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';
    }



回答8:


 $mail->SMTPOptions = array(
                'ssl' => array(
                    'verify_peer' => false,
                    'verify_peer_name' => false,
                    'allow_self_signed' => true
                )
            );



回答9:


If you are using cPanel you should just click the wee box that allows you to send to external servers by SMTP.

Login to CPanel > Tweak Settings > All> "Restrict outgoing SMTP to root, exim, and mailman (FKA SMTP Tweak)"

As answered here:

"Password not accepted from server: 535 Incorrect authentication data" when sending with GMail and phpMailer




回答10:


Anderscc has got it correct. Thanks. It worked for me but not 100%.

I had to set

$mail->SMTPDebug = 0;

Setting it to 1, can cause errors especially if you are passing some data as json to next page. Example - Performing verification if mail is sent, using json to pass data through ajax.

I had to lower my gmail account security settings to get rid of errors: " SMTP connect() failed " and " SMTP ERROR: Password command failed "

Solution: This problem can be caused by either 'less secure' applications trying to use the email account (this is according to google help, not sure how they judge what is secure and what is not) OR if you are trying to login several time in a row OR if you change countries (for example use VPN, move code to different server or actually try to login from different part of the world).

Links that fix the problem (you must be logged into google account):

  • view recent attempts to use the account and accept suspicious access.

  • link to disable the feature of blocking suspicious apps/technologies:

    https://www.google.com/settings/u/1/security/lesssecureapps

Note: You can go to the following stackoverflow answer link for more detailed reference.

https://stackoverflow.com/a/25175234




回答11:


-> You Can Copy And Paste this code in you php file it is working file

-> But You need go to "google->account->security->Less secure app access" is by default is on please make sure you turn off to allow sending mail.

-> this is the link https://myaccount.google.com/security it is working in Nov/2019 but currently i don't know.

-> For Documentation of Php Mailer Please visit https://github.com/PHPMailer/PHPMailer

-> You can run this code before that you need to download vendor folder this folder you can download using this command

composer require phpmailer/phpmailer

-> this command only work if you download composer

<?php

use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;
use PHPMailer\PHPMailer\Exception;

require 'vendor/autoload.php';

$mail = new PHPMailer(true);

try {
    /* Server settings */
    $mail->SMTPDebug = SMTP::DEBUG_SERVER;                      /* Enable verbose debug output */
    $mail->isSMTP();                                            /* Send using SMTP */
    $mail->Host       = 'ssl://smtp.gmail.com';                    /* Set the SMTP server to send through */
    $mail->SMTPAuth   = true;                                   /* Enable SMTP authentication */
    $mail->Username   = 'youremailaddress@gmail.com';                     /* SMTP username */
    $mail->Password   = 'youremailaddresspassword';                               /* SMTP password */
    $mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;         /* Enable TLS encryption; `PHPMailer::ENCRYPTION_SMTPS` also accepted */
    $mail->Port       = 465;                                    /* TCP port to connect to */

    /* Recipients */
    $mail->setFrom('youremailaddress@gmail.com', 'Your Name');
    $mail->addAddress('receiveremailaddress@gmail.com', 'Receiver Name');     /* Add a recipient */
    $mail->addReplyTo('youremailaddress@gmail.com', 'Your Name');

    /* Content */
    $mail->isHTML(true);                                  /* Set email format to HTML */
    $mail->Subject = 'Here is the subject';
    $mail->Body    = 'This is the HTML message body <b>in bold!</b>';
    $mail->AltBody = 'This is the body in plain text for non-HTML mail clients';

    $mail->send();
    echo 'Message has been sent';
} catch (Exception $e) {
    echo "Message could not be sent. Mailer Error: {$mail->ErrorInfo}";
}

?>

-> In Your Hosting You Found SMTP Not Work Properly Then Please Check This WebPage https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting




回答12:


I think it is connection issue you can get code here http://skillrow.com/sending-mail-using-smtp-and-php/

include(“smtpfile.php“);
include(“saslfile.php“); // for SASL authentication $from=”my@website.com“; //from mail id

$smtp=new smtp_class;

$smtp->host_name=”www.abc.com“; // name of host
$smtp->host_port=25;//port of host

$smtp->timeout=10;
$smtp->data_timeout=0;
$smtp->debug=1;
$smtp->html_debug=1;
$smtp->pop3_auth_host=””;
$smtp->ssl=0;
$smtp->start_tls=0;
$smtp->localhost=”localhost“;
$smtp->direct_delivery=0;

$smtp->user=”smtp username”;
$smtp->realm=””;
$smtp->password=”smtp password“;

$smtp->workstation=””;
$smtp->authentication_mechanism=””;

$mail=$smtp->SendMessage($from,array($to),array(“From:$from”,”To: $to”,”Subject: $subject”,”Date: ”.strftime(“%a, %d %b %Y %H:%M:%S %Z”)),”$message”);

if($mail){
   echo “Mail sent“;
}else{
   echo $smtp->error;
}


来源:https://stackoverflow.com/questions/16048347/send-email-using-gmail-smtp-server-through-php-mailer

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!