About Lesson
A PHPMailer library is used to send an email using CodeIgniter. You can install the PHPMailer using Composer.
PHPMailer is a code library used to send emails safely and easily via PHP code from a web server. Sending emails directly via PHP code requires a high-level familiarity with SMTP standard protocol and related issues and vulnerabilities about Email injection for spamming.
Run the following command in the root directory of your project.
Example:
composer require phpmailer/phpmailer
1. Copy and Paste the following lines in app/Config/Routes.php
$routes->add('email/compose', 'Email::compose'); $routes->post('email/send-email', 'Email::send_email');
2. Create a compose.php file in the app/Views/ directory
<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>
3. Create a controller file Email.php in the app/Controllers/ directory.
<?php namespace App\Controllers; use App\Controllers\BaseController; use PHPMailer\PHPMailer\PHPMailer; use PHPMailer\PHPMailer\Exception; class Email extends BaseController { public function __construct() { } public function compose() { echo view('compose'); } public function send_email() { $email = $this->request->getPost('email'); $subject = $this->request->getPost('subject'); $message = $this->request->getPost('message'); $mail = new PHPMailer(true); try { $mail->isSMTP(); $mail->Host = 'host'; //smtp.google.com $mail->SMTPAuth = true; $mail->Username = 'username'; $mail->Password = 'password'; $mail->SMTPSecure = 'tls'; $mail->Port = 587; $mail->Subject = $subject; $mail->Body = $message; $mail->setFrom('username', 'display_name'); $mail->addAddress($email); $mail->isHTML(true); if(!$mail->send()) { echo "Something went wrong. Please try again."; } else { echo "Email sent successfully."; } } catch (Exception $e) { echo "Something went wrong. Please try again."; } } }