Can't send Email with Outlook SMTP using PhpMailer and Codeigniter

Viewed 5122

Whenever i try to send an E-mail (outlook SMTP) using: Phpmailer i get this error:

2020-06-05 18:45:05 Connection: opening to smtp.office365.com:587, timeout=300, options=array()
2020-06-05 18:45:05 Connection: opened
2020-06-05 18:45:05 SERVER -> CLIENT: 220 AM0PR10CA0059.outlook.office365.com Microsoft ESMTP MAIL Service ready at Fri, 5 Jun 2020 18:45:05 +0000
2020-06-05 18:45:05 SERVER -> CLIENT: 250-AM0PR10CA0059.outlook.office365.com Hello [82.165.86.40]250-SIZE 157286400250-PIPELINING250-DSN250-ENHANCEDSTATUSCODES250-STARTTLS250-8BITMIME250-BINARYMIME250-CHUNKING250 SMTPUTF8
2020-06-05 18:45:05 CLIENT -> SERVER: STARTTLS
2020-06-05 18:45:05 SERVER -> CLIENT: 220 2.0.0 SMTP server ready
2020-06-05 18:45:05 SERVER -> CLIENT: 250-AM0PR10CA0059.outlook.office365.com Hello [82.165.86.40]250-SIZE 157286400250-PIPELINING250-DSN250-ENHANCEDSTATUSCODES250-AUTH LOGIN XOAUTH2250-8BITMIME250-BINARYMIME250-CHUNKING250 SMTPUTF8
2020-06-05 18:45:05 CLIENT -> SERVER: AUTH LOGIN
2020-06-05 18:45:05 SERVER -> CLIENT: 334 VXNlcm5hbWU6
2020-06-05 18:45:05 CLIENT -> SERVER: [credentials hidden]
2020-06-05 18:45:05 SERVER -> CLIENT: 334 UGFzc3dvcmQ6
2020-06-05 18:45:05 CLIENT -> SERVER: [credentials hidden]
2020-06-05 18:45:10 SERVER -> CLIENT: 535 5.7.3 Authentication unsuccessful [AM0PR10CA0059.EURPRD10.PROD.OUTLOOK.COM]
2020-06-05 18:45:10 SMTP ERROR: Password command failed: 535 5.7.3 Authentication unsuccessful [AM0PR10CA0059.EURPRD10.PROD.OUTLOOK.COM]
SMTP Error: Could not authenticate.
2020-06-05 18:45:10 CLIENT -> SERVER: QUIT
2020-06-05 18:45:10 SERVER -> CLIENT: 221 2.0.0 Service closing transmission channel
2020-06-05 18:45:10 Connection: closed
SMTP Error: Could not authenticate.

I tried with Codeigniter as well

Failed to authenticate password. Error:
Unable to send email using PHP SMTP. Your server might not be configured to send mail using this method.

i tried both way but not working ...

i am using codeigniter default mail class

here is the config:

        $config = array(

            'smtp_crypto'  => 'tls', or 'startTls'
            'smtp_auth'  => true,
            'protocol'  => 'smtp',
            'smtp_host' => 'smtp.office365.com',
            'smtp_port' => 587,
            'smtp_timeout' => '7',
            'smtp_user' => 'email@account.com',
            'smtp_pass' => 'emailPassword', or 'APPPASSWORD'
            'mailtype'  => 'html',
            'charset'   => 'iso-8859-1',
            'wordwrap'  => TRUE,
            'validation'   => TRUE
        );

This is the Phpmailer Config:

$mail->isSMTP();
$mail->Host     = 'smtp.office365.com';
$mail->SMTPAuth = false;
$mail->Username = 'email@account.com';
$mail->Password = 'emailPassword'; or 'APPPASSWORD'
$mail->SMTPSecure = 'tls', or 'startTls',
$mail->Port     =  587

anybody faced with type of problem ? Looking for some help !!!

1 Answers

I had some certificate issues and thats how I used it finally:

<?php
$mailusername= "******";
$mailpassword= "******";
$mailhost= "smtp.office365.com";
$to="*******";
$subject="test";
$body="abcdef";


require_once('PHPMailer-master/class.phpmailer.php');
require_once('PHPMailer-master/class.smtp.php');


$mail = new PHPMailer();


$mail->IsSMTP();
$mail->IsHTML(true);
$mail->Host       = $mailhost;
$mail->SMTPDebug  = 1;
$mail->SMTPAuth   = true;
$mail->Port       = 587;
$mail->SMTPSecure = 'tls';
$mail->SMTPOptions = array(
    'ssl' => array(
        'verify_peer' => false,
        'verify_peer_name' => false,
        'allow_self_signed' => true
    )
);
$mail->Username   = $mailusername;
$mail->Password   = $mailpassword;

$frommail = $mailusername;//$this->from;
$fromname = "Mailbot";
$mail->SetFrom($frommail, $fromname);


$address = $to;
$adrname = "";
$mail->AddAddress($address, $adrname);

$mail->Subject = $subject;
$mail->Body = $body;

if(!$mail->Send()) {
    //echo "Mailer Error: " . $mail->ErrorInfo;
    print( "sendViaSMTP() - failed to send email");
} else {
    print( "sendViaSMTP() - success sending email");
    // all good
}


?>

(1) For me the tricky part were the SMTPOptions().

(2) The other tricky part was to use the latest PHPMailer() lib. Because the SMTPOptions() is only supported by newer PHPMailer()

(3) Using the "no-verify" option is insecure. However on some servers needed due to setup / configuration issues.

updated my code

I am using PHPMailer

   public $Version = '5.2.8';
Related