terug naar     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": "https://forum.codeigniter.com/",
		"wiki": "https://github.com/bcit-ci/CodeIgniter/wiki",
		"slack": "https://codeigniterchat.slack.com",
		"source": "https://github.com/bcit-ci/CodeIgniter"
	},
	"require": {
		"php": ">=5.4.8"
	},
	"suggest": {
		"paragonie/random_compat": "Provides better randomness in PHP 5.x"
	},
	"scripts": {
		"test:coverage": [
			"@putenv XDEBUG_MODE=coverage",
			"phpunit --color=always --coverage-text --configuration tests/travis/sqlite.phpunit.xml"
		],
		"post-install-cmd": [
			"sed -i s/name{0}/name[0]/ vendor/mikey179/vfsstream/src/main/php/org/bovigo/vfs/vfsStream.php"
		],
		"post-update-cmd": [
			"sed -i s/name{0}/name[0]/ vendor/mikey179/vfsstream/src/main/php/org/bovigo/vfs/vfsStream.php"
		]
	},
	"require-dev": {
		"mikey179/vfsstream": "1.6.*",
		"phpunit/phpunit": "4.* || 5.* || 9.*"
	}
}

 

Deze passen we aan tot

 

{
	"description": "The CodeIgniter framework",
	"name": "codeigniter/framework",
	"type": "project",
	"homepage": "https://codeigniter.com",
	"license": "MIT",
	"support": {
		"forum": "https://forum.codeigniter.com/",
		"wiki": "https://github.com/bcit-ci/CodeIgniter/wiki",
		"slack": "https://codeigniterchat.slack.com",
		"source": "https://github.com/bcit-ci/CodeIgniter"
	},
	"require": {
		"php": ">=5.4.8",
        "phpmailer/phpmailer": "~6.0"
	},
	"suggest": {
		"paragonie/random_compat": "Provides better randomness in PHP 5.x"
	},
	"scripts": {
		"test:coverage": [
			"@putenv XDEBUG_MODE=coverage",
			"phpunit --color=always --coverage-text --configuration tests/travis/sqlite.phpunit.xml"
		],
		"post-install-cmd": [
			"sed -i s/name{0}/name[0]/ vendor/mikey179/vfsstream/src/main/php/org/bovigo/vfs/vfsStream.php"
		],
		"post-update-cmd": [
			"sed -i s/name{0}/name[0]/ vendor/mikey179/vfsstream/src/main/php/org/bovigo/vfs/vfsStream.php"
		]
	},
	"require-dev": {
		"mikey179/vfsstream": "1.6.*",
		"phpunit/phpunit": "4.* || 5.* || 9.*"
	},
    "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 (v6.1.0) 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


 

    //  functie
    public function functie()
    {       
        //  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!";
        } 
        
        redirect('dankje', 'refresh');
    }
    //--/functie

 

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

// 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';

 

Dit wordt al door Codeigniter geregeld.

Als in de config.php de volgende waarde op TRUE wordt gezet.

$config['composer_autoload'] = TRUE;

 

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.

    //  verstuurEmail
    //  $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'; 
            
            //  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() ;  
        //== PHPMailer       
    }
    //--/verstuurEmail
    
    

 

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

 

Ook van VanWijhe.Web

Responsiveframework.nl