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
- Accessing the Form: Open your browser and navigate to
http://yourdomain.com/email/composeto access the form for composing an email. - Sending the Email: Fill in the recipient’s email, subject, and message, then click “Send Email.” The data is sent to the
send_emailmethod in theEmailcontroller. - 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.
