Search code examples
phpcodeigniteremailcodeigniter-3

SMTP Mail not sending - Codeigniter Email Library


I'm having issues in sending mail through SMTP Protocol.

Welcome.php

$this->load->library('email');

$config = array();
$config['protocol'] = 'smtp';
$config['smtp_host'] = 'smtp.zoho.com';
$config['smtp_user'] = '[email protected]';
$config['smtp_pass'] = '**************';
$config['smtp_port'] = 465;
$config["smtp_crypto"] = "ssl";

$this->email->initialize($config);

$this->email->set_newline("\r\n");
$this->email->from('[email protected]', 'Support name'); // change it to yours
$this->email->to($to);// change it to yours
$this->email->subject($subject);
$this->email->message($message);

    if($this->email->send())
    {
      echo "Success! - An email has been sent to ".$to;
    }
    else
    { 
      show_error($this->email->print_debugger());
      return false;
    }
}

Here is the output error:

An Error Was Encountered
220 mx.zohomail.com SMTP Server ready June 29, 2018 5:16:40 AM PDT 

hello: 

The following SMTP error was encountered: 
Unable to send email using PHP SMTP. Your server might not be configured to send mail using this method.
Date: Fri, 29 Jun 2018 12:16:40 +0000
From: "Support Name" <[email protected]>
Return-Path: <[email protected]>
To: [email protected]
Subject: =?ISO-8859-1?Q?=43=6F=70=79=20=61=6C=6C=20=74=68=65?=
Reply-To: <[email protected]>
User-Agent: CodeIgniter
X-Sender: [email protected]
X-Mailer: CodeIgniter
X-Priority: 3 (Normal)
Message-ID: <[email protected]>
Mime-Version: 1.0


Content-Type: multipart/alternative; boundary="B_ALT_5b3623284061c"

This is a multi-part message in MIME format.
Your email application may not support this format.

--B_ALT_5b3623284061c
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit

Some


--B_ALT_5b3623284061c
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable

Some Email Description=0A=0A Some Email Description

--B_ALT_5b3623284061c--

Note: The script is working fine on localhost, as well as multiple other hostings but not working on VPS Hosting.

These are the things to remember:

  1. The code is fine (Tried in different hosting and it works)
  2. Changing $config['protocol'] = "smtp"; to $config['protocol'] = "sendmail"; it works. But i want to send mail only through SMTP Protocol.
  3. Using Zoho Mail SMTP Protocols (smtp.zoho.com)
  4. Tried, Google SMTP, Still not sending. (Used PHPMailer Library to test with the credentials. It's working on them.)

Solution

  • Solution: The problem was fixed! The culprit was Valid Hostname & Reverse DNS.

    Detailed info: Due to misconfiguration, SMTP was responding around 7 - 10 secs. According to docs, if we don't specify the smtp_timeout, it will take default which is 5 sec. So I changed the smtp_timeout from default 5 sec to 10 sec and it works.

    After figuring out what was the problem, found that the SMTP responding slow. There was no valid hostname, Reverse DNS added. So added that. Now it's working as expected. Now I removed the smtp_timeout field. It's working now.