In CodeIgniter 3, sending emails can be enhanced using the external library PHPMailer, which provides a more powerful and flexible way to handle email operations than the built-in email class. This tutorial will guide you through the steps to set up PHPMailer in CodeIgniter 3, send emails using it, and create a form for composing emails.

 

Step 1: Install PHPMailer Using Composer

To use PHPMailer in your CodeIgniter 3 project, you need to install it using Composer. Navigate to your project’s root directory and run the following command:

Example:

composer require phpmailer/phpmailer

 

This command will download PHPMailer into your project’s vendor directory.

 

Step 2: Configure Composer Autoload in CodeIgniter

After installing PHPMailer, you need to enable Composer’s autoload functionality in CodeIgniter. Open the config/config.php file and change the composer_autoload setting:

1. Add the following lines in config/config.php

$config['composer_autoload'] = FALSE;
// to
$config['composer_autoload'] = TRUE;

This setting will allow CodeIgniter to automatically load Composer dependencies, including PHPMailer.



Step 3: Create a Controller for Sending Emails

Create a new controller file named Email.php inside the application/controllers directory. This controller will handle composing and sending emails using PHPMailer.

 

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

class Email extends CI_Controller {
    
    public function __construct() {
		parent::__construct();
    }
    
    public function compose() {
    
        $this->load->view('compose');
    
    }
    
    public function send_email() {
    
        $email          = $this->input->post('email');
        $subject        = $this->input->post('subject');
        $message        = $this->input->post('message');
        
        $mail = new PHPMailer(true);  
		try {
		    
		    $mail->isSMTP();  
		    $mail->Host         = 'mail.infovistar.in'; 
		    $mail->SMTPAuth     = true;     
		    $mail->Username     = 'infovitar';  
		    $mail->Password     = 'inf0v!st@r';
			$mail->SMTPSecure   = 'tls';  
			$mail->Port         = 587;  
			$mail->Subject      = $subject;
			$mail->Body         = $message;
			$mail->setFrom('infovistarindia@gmail.com', 'Infovistar');
			
			$mail->addAddress($email);  
			$mail->isHTML(true);      
			
			if(!$mail->send()) {
			    echo "Something went wrong. Please try again.";
			}
		    else {
			    echo "Email has been sent successfully.";
		    }
		    
		} catch (Exception $e) {
		    echo "Something went wrong. Please try again.";
		}
        
    }
    
}

 

Step 4: Create the Email Composition Form

Create a compose.php file inside the application/views directory. This file will contain a simple HTML form that allows users to input the recipient’s email, subject, and message.

 

<form 
    action="<?php echo base_url('email/send_email') ?>" 
class="form-horizontal" id="add_email_form"
autocomplete="off" method="post" accept-charset="utf-8"> <div class="form-group"> <label for="inputName" class="col-sm-2 control-label">Recipient Email</label> <div class="col-sm-10"> <input type="hidden" name="id" value="9" id="id" /> <input type="hidden" name="source_id" value="2" id="source_id" /> <input type="text" name="email" value="" id="email" placeholder="Recipient Email Address" class="form-control" required /> </div> </div> <div class="form-group"> <label for="inputName" class="col-sm-2 control-label">Subject</label> <div class="col-sm-10"> <input type="text" name="subject" value="" id="subject" placeholder="Subject" class="form-control" required /> </div> </div> <div class="form-group"> <label for="inputName" class="col-sm-2 control-label">Message</label> <div class="col-sm-10"> <textarea class="form-control" name="message" id="message"></textarea> </div> </div> <div class="form-group"> <div class="col-sm-offset-2 col-sm-10"> <button type="submit" class="btn btn-info">Send Email</button> </div> </div> </form>

 

How It Works

  1. Accessing the Form: Open your browser and navigate to http://yourdomain.com/email/compose to access the form for composing an email.
  2. Sending the Email: Fill in the recipient’s email, subject, and message, then click “Send Email.” The data is sent to the send_email method in the Email controller.
  3. PHPMailer Handling: PHPMailer will use the SMTP settings specified in the controller to send the email. If the email is sent successfully, you will see a success message; otherwise, an error message will be displayed.

 

Using PHPMailer with CodeIgniter 3 is a robust way to manage email functionality in your applications. It provides more control over the email-sending process compared to CodeIgniter’s built-in email class, including better error handling and more configuration options for different SMTP services.