Search code examples
phpcodeigniterphpmailer

How to integrate PHPMailer with Codeigniter 3


Hi I am trying to use PHPMailer Library from GitHUB in my Codeigniter application.

I downloaded the code and unzipped in my application\library folder. So there I have a folder called vendor inside which resides the source code for PHPMailer.

Now I created a File named Bizmailer_Controller.php.

<?php defined('BASEPATH') OR exit('No direct script access allowed');

/**
* 
*/
class Bizmailer_Controller extends CI_Controller
{

    public function __construct()
    {
        parent::__construct();

        require "vendor\phpmailer\phpmailer\PHPMailerAutoload";
        $this->Bizmailer = new PHPMailer();
        //Set the required config parameters
        $this->Bizmailer->isSMTP();                                      // Set mailer to use SMTP
        $this->Bizmailer->Host = 'smtp1.example.com;smtp2.example.com';  // Specify main and backup SMTP servers
        $this->Bizmailer->SMTPAuth = true;                               // Enable SMTP authentication
        $this->Bizmailer->Username = '[email protected]';                 // SMTP username
        $this->Bizmailer->Password = 'secret';                           // SMTP password
        $this->Bizmailer->SMTPSecure = 'tls';                            // Enable TLS encryption, `ssl` also accepted
        $this->Bizmailer->Port = 465;    
        //return $api;
    }
}

Now in my controllers I am trying to load it like this :

$this->load->library('Bizmailer');
$mail = new Bizmailer();

And I Get this error :

An Error Was Encountered

Unable to load the requested class: Bizmailer

So Please guide me how I can load or integrate this library in Codeigniter.


Solution

  • here is a guide

    1. installing PHP Mailer

    Download the latest PHPMailer Build from Github. You can find the project here

    Click now on "clone or download" and download it as zip - as in the image below is shown. PHP Mailer Download as ZIP

    The folder in the zip is called PHPMailer-master. Unzip this in your application/third_party/ folder and rename the folder to phpmailer. You should see something like this enter image description here

    2. PHP Mailer Library

    Imho its best to create a library which handles your PHPMailer Object (Phpmailer_library.php) This library could look like

    class Phpmailer_library
    {
        public function __construct()
        {
            log_message('Debug', 'PHPMailer class is loaded.');
        }
    
        public function load()
        {
            require_once(APPPATH."third_party/phpmailer/PHPMailerAutoload.php");
            $objMail = new PHPMailer;
            return $objMail;
        }
    }
    

    3. Using this library in one of your controllers, models etc.

    class Welcome extends CI_Controller {
    
    
        public function index()
        {
            $this->load->library("phpmailer_library");
            $objMail = $this->phpmailer_library->load();
        }
    }
    

    i think this should pretty much do the job. If you've any troubles, don't hesitate to ask ;)


    Update 25.06.2018

    Since the PHPMailer guys removed the autoloader you've two options now:

    1.) via Composer

    for those who didn't know - Codeigniter supports Composer - you simply have to activate the autoload - you can find this in your config.php

    $config['composer_autoload'] = true;
    

    For more informations take a look here

    After that - run composer like

    composer require phpmailer/phpmailer
    

    You now should have within your application/vendor folder the phpmailer files.

    The library should look like

    class Phpmailer_library
    {
        public function __construct()
        {
            log_message('Debug', 'PHPMailer class is loaded.');
        }
    
        public function load()
        {
            $objMail = new PHPMailer\PHPMailer\PHPMailer();
            return $objMail;
        }
    }
    

    2.) download

    follow step 1

    The library should look like

    class Phpmailer_library
    {
        public function __construct()
        {
            log_message('Debug', 'PHPMailer class is loaded.');
        }
    
        public function load()
        {
            require_once(APPPATH.'third_party/phpmailer/src/PHPMailer.php');
            require_once(APPPATH.'third_party/phpmailer/src/SMTP.php');
    
            $objMail = new PHPMailer\PHPMailer\PHPMailer();
            return $objMail;
        }
    }
    

    and everything else should remain the same