Terug..   naar de blogs.


 

  PHPMailer

Soms kom je het tegen.

Een klant vraagt een e-mail functionaliteit maar is gebonden aan specifieke instellingen van zijn SMTP server.

En Codeigniter werkt even niet mee. Dan kan PHPMailer uitkomst bieden.

Dit pakket kan op een vrij eenvoudige manier binnen Codeigniter geïntegreerd worden door middel van Composer.

 

  De uitleg van de specifieke onderdelen.

Je dient wel eerst Composer in je eigen ontwikkelomgeving te intergreren.

Lees hiertoe de uitleg op https://getcomposer.org/doc/00-intro.md .

 

Het gebruiken van pakketten via Composer draait om het gebruik van de file   composer.json

Standaard zit bij Codeigniter al zo'n file.

 

{
	"description": "The CodeIgniter framework",
	"name": "codeigniter/framework",
	"type": "project",
	"homepage": "https://codeigniter.com",
	"license": "MIT",
	"support": {
		"forum": "http://forum.codeigniter.com/",
		"wiki": "https://github.com/bcit-ci/CodeIgniter/wiki",
		"irc": "irc://irc.freenode.net/codeigniter",
		"source": "https://github.com/bcit-ci/CodeIgniter"
	},
	"require": {
		"php": ">=5.2.4"
	},
	"suggest": {
		"paragonie/random_compat": "Provides better randomness in PHP 5.x"
	},
	"require-dev": {
		"mikey179/vfsStream": "1.1.*"
	}
}

 

Deze passen we aan tot

 

{
    "description": "The CodeIgniter framework",
    "name": "codeigniter/framework",
    "type": "project",
    "homepage": "https://codeigniter.com",
    "license": "MIT",
    "support": {
        "forum": "http://forum.codeigniter.com/",
        "wiki": "https://github.com/bcit-ci/CodeIgniter/wiki",
        "irc": "irc://irc.freenode.net/codeigniter",
        "source": "https://github.com/bcit-ci/CodeIgniter"
    },
    "require": {
        "php": ">=5.2.4",
        "phpmailer/phpmailer": "~5.2"
    },
    "suggest": {
        "paragonie/random_compat": "Provides better randomness in PHP 5.x"
    },
    "require-dev": {
        "mikey179/vfsStream": "1.1.*"
    },
    "config": {
        "vendor-dir": "application/vendor"
    }
}

 

PHPMailer is toegevoegd aan de sectie  "require"

De  vendor-dir  is nodig om de autoload functie van Codeigniter voor Composer te kunnen gebruiken.

Dit is het enige.

 

In de root van je project geef je het commando

 

composer install

 

 Je krijgt dan

 

Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 2 installs, 0 updates, 0 removals
  - Installing mikey179/vfsstream (v1.1.0) Loading from cache
  - Installing phpmailer/phpmailer (v5.2.22) Loading from cache
phpmailer/phpmailer suggests installing league/oauth2-google (Needed for Google XOAUTH2 authentication)
Writing lock file
Generating autoload files

 

PHPMailer is dan klaar voor gebruik.

 

  Hoe te gebruiken?

Hieronder een voorbeeld.

Het voorbeeld komt rechtstreekst uit de documentatie van PHPMailer  mail.phps.

Deze staan in de map  ./application/vendor/phpmailer/phpmailer/examples

Voor voorbeelden met betrekking tot SMTP zie bijvoorbeeld  smtp.phps

 

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

class Verstuur_email extends CI_Controller
{


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

    }
    //-----/__construct
    
    
    //  Index
    public function index()
    {       
        //  Create a new PHPMailer instance
        $mail = new PHPMailer;        
       
        //  Set who the message is to be sent from       
        $mail->setFrom('voornaam@uwDomein.nl', 'Voornaam Achternaam');
       
        //  Set an alternative reply-to address
        // $mail->addReplyTo('replyto@example.com', 'First Last');
        
        //  Set who the message is to be sent to
        $mail->addAddress('iemand@EenAnderDomein.nl', 'Iemand Anders');
        
        //  Set the subject line
        $mail->Subject = 'PHPMailer mail() test';
        
        //  Read an HTML message body from an external file, convert referenced images to embedded,
        //  convert HTML into a basic plain-text alternative body
        $mail->msgHTML( '<p>Dit is een test</p>');
        
        //  Replace the plain text body with one created manually
        //  $mail->AltBody = 'This is a plain-text message body';
        
        //  Attach an image file
        //  $mail->addAttachment('images/phpmailer_mini.png');

        //  send the message, check for errors
        if ( !$mail->send() ) 
        {
            echo "PHPMailer Fout: " . $mail->ErrorInfo;
        } 
        else 
        {
            echo "Bericht verstuurd!";
        }
        //-----/                
    }
    //-----/Index

    
    
}
/* End of controller Verstuur_email */
/* Location: ./application/controllers/Verstuur_email.php */  

 

Bij gebruik in Codeigniter zullen de volgende zinnen niet nodig zijn.

Dit wordt al door Codeigniter geregeld.

 

//SMTP needs accurate times, and the PHP time zone MUST be set
//This should be done in your php.ini, but this is how to do it if you don't have access to that
date_default_timezone_set('Etc/UTC');

require '../PHPMailerAutoload.php';

 

En nu een stap verder.

Je wilt het e-mail script vaker gebruiken.

Het zou dan handig zijn om het verzend gedeelte in een model te hebben en een controller om deze aan te roepen.

 

Eerst het model.

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

//  Algemeen
class Algemeen extends CI_Model 
{ 

    //   __construct
    function __construct()
    {       
        parent::__construct();
        
    }
    //-----/__construct 
    

    //  verstuurEmail
    //
    //      $emailNaarEmail   =   ''  ;
    //      $emailNaarNaam    =   ''  ;
    //      $onderwerp        =   ''  ;
    //      $bericht          =   ''  ;
    //      $cc               =   ''  ;
    //      $bcc              =   ''  ;
    //  $this->Algemeen->verstuurEmail( $emailNaarEmail, $onderwerp, $bericht, $emailNaarNaam=NULL, $cc=NULL, $bcc=NULL ) ;
    public function verstuurEmail( $emailNaarEmail, $onderwerp, $bericht, $emailNaarNaam=NULL, $cc=NULL, $bcc=NULL )
    {
        //===== PHPMailer            
            //----- Init ->  PHPMailer
            $emailVanEmail      =  'voornaam-achternaam@organisatie.nl' ;
            $emailVanNaam       =  'Voornaam Achternaam' ; 
            //-----/Init ->  PHPMailer            

            
            //----- Send  ->  PHPMailer   
            $mail           = new PHPMailer(); 
            
            //  De volgende 3 regels kunnen uitgezet worden als er geen SMTP server is
            $mail->IsSMTP();  
            $mail->Host     =  'smtp.naam_van_uw_smtp_server.nl';
            $mail->Port     =  '25';  

            
            $mail->AddReplyTo( $emailVanEmail, $emailVanNaam );
            $mail->SetFrom( $emailVanEmail, $emailVanNaam );  

            if( isset($emailNaarNaam)          &&  
                strlen($emailNaarNaam) > '3'       )
            {    
                $mail->AddAddress( $emailNaarEmail, $emailNaarNaam);  
            }   
            else
            {
                $mail->AddAddress( $emailNaarEmail);                  
            }    
            
            if( isset($cc)          &&  
                strlen($cc) > '3'       )
            {    
                $mail->AddCC( $cc );   
            }  
            
            if( isset($bcc)         &&
                strlen($bcc) > '3'      )
            {             
                $mail->AddBCC( $bcc );               
            } 
            
            $mail->Subject  =  $onderwerp;      
            $mail->MsgHTML( $bericht );  

            $mail->send() ;     		
            //-----/Send  ->  PHPMailer
        //=====/PHPMailer       
    }
    //-----/verstuurEmail
    
    
} 
/* End of model Algemeen */
/* Location: ./application/models/Algemeen.php */     

 

en dan de controller

 

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

// Voorbeeld
class Voorbeeld extends CI_Controller
{

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

        $this->load->model('Algemeen') ; 
    }
    //-----/__construct

        
    //  verstuurEmail
    public function verstuurEmail()
    {
        //
        $email_2                =  'voornaam-achternaam@organisatie.nl' ;
		$email   				=  $this->input->post('email', TRUE) ;
		$naam_doc 				=  $this->input->post('naam_doc', TRUE) ;
		$reactie_doc 			=  $this->input->post('reactie_doc', TRUE) ;	        
        
         //===== PHPMailer
            $emailNaarEmail   =   $email  ;
            $emailNaarNaam    =   ''  ;
            $onderwerp        =   'Reactie op '.$naam_doc  ;
            $bericht          =   $reactie_doc  ;
            $cc               =   $email_2  ;
            $bcc              =   ''  ; 
        $this->Algemeen->verstuurEmail( $emailNaarEmail, $onderwerp, $bericht, $emailNaarNaam, $cc, $bcc) ; 
        //=====/PHPMailer 
    }
    //-----/verstuurEmail
    
    
}
/* End of controller Voorbeeld */
/* Location: ./application/controllers/Voorbeeld.php */    

 

 

 

   Download link

Klik hier om de scripts te downloaden



Tags: Codeigniter, Email, Composer       23-01-2017



Reacties:

 


Uw reactie

Uw naam
Uw e-mail
Uw bericht
  Beveiliging     Neem deze over aub.
   
     

 

Contact:

van Wijhe Web

Frederikastraat 102

7543 CW Enschede

053 - 431 78 76

06 - 511 828 79

Ontvang tips, nieuws en andere interessante feitjes
in je mailbox.

2017 * van Wijhe Web