Cara Kirim Email dari Localhost dengan Codeigniter dan PHPMailer

2 Juni 2019 5.261x
Cara Kirim Email dari Localhost dengan Codeigniter dan PHPMailer

Sebelumnya kita telah belajar tentang Cara Kirim Email dari Localhost dengan PHP Native dan PHPMailer, nah pada kali ini akan dibahas dalam versi Codeigniternya. Tulisan kali ini akan membutuhkan beberapa hal antara lain:

  1. Framework Codeigniter, download disini
  2. Composer, ikuti cara instalasinya disini
  3. Library PHPMailer, download disini (versi stable 5.2) atau download langsung via composer
  4. Allow Less Secure Apps Access, baca disini

Setelah Anda mengikuti 4 poin diatas, masih ada 2 tahap lagi untuk persiapannya yaitu setup di file codeigniter dan instalasi PHPMailer menggunakan Composer pada project yang kita buat. 

Caranya adalah seperti berikut:

Instalasi PHPMailer

Selanjutnya kita akan mulai instalasi PHPMailernya dengan cara:

  1. Bukalah terminal pada direktori project Anda, misal: htdocs/namaproject/disini 
  2. Isikan dengan perintah:

    composer require phpmailer/phpmailer 
  3. Apabila pada saat instalasi muncul error seperti ini:


    Scroll ke atas setelah perintah instalasi dijalankan sehingga Anda akan menemukan problemnya yaitu:


    Problem diatas dikarenakan kita belum menginstall extensi ext-dom.
  4. Solusi dari problem no.3 diatas yaitu dengan menginstallnya menggunakan perintah:

    sudo apt-get install php-xml
  5. Kemudian isikan lagi perintah untuk menginstall phpmailernya yaitu:

    composer require phpmailer/phpmailer
  6. Sehingga nantinya akan muncul tampilan pada terminal yang menyatakan telah selesai/sukses seperti ini:


 

Pembuatan File Controller

Disini saya menggunakan file Welcome.php bawaan Codeigniter tapi dengan perubahan untuk dapat menjalankan script pengiriman email dengan PHPMailer

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

// Import PHPMailer classes into the global namespace
// These must be at the top of your script, not inside a function
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;
use PHPMailer\PHPMailer\Exception;

// Load Composer's autoloader
require 'vendor/autoload.php';

class Welcome extends CI_Controller
{

	/**
	 * Index Page for this controller.
	 *
	 * Maps to the following URL
	 * 		http://example.com/index.php/welcome
	 *	- or -
	 * 		http://example.com/index.php/welcome/index
	 *	- or -
	 * Since this controller is set as the default controller in
	 * config/routes.php, it's displayed at http://example.com/
	 *
	 * So any other public methods not prefixed with an underscore will
	 * map to /index.php/welcome/<method_name>
	 * @see https://codeigniter.com/user_guide/general/urls.html
	 */
	public function index()
	{
		$this->load->view('welcome_message');
	}

	public function kirim()
	{
		$this->load->view('kirim');
	}

	public function kirim_proses()
	{
		if (isset($_POST['submit'])) {
			// Instantiation and passing `true` enables exceptions
			$mail = new PHPMailer(true);

			$no_invoice         = $this->input->post('no_invoice');
			$nama_pengirim      = $this->input->post('nama_pengirim');
			$email              = $this->input->post('email');

			//Server settings
			// $mail->SMTPDebug = SMTP::DEBUG_SERVER;                      // Enable verbose debug output
			$mail->isSMTP();                                            // Send using SMTP
			$mail->Host       = 'smtp.gmail.com';                    // Set the SMTP server to send through
			$mail->SMTPAuth   = true;                                   // Enable SMTP authentication
			$mail->Username   = 'namaEmailAnda';                     // SMTP username
			$mail->Password   = 'passwordEmailAnda';                               // SMTP password
			// $mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;         // Enable TLS encryption; `PHPMailer::ENCRYPTION_SMTPS` encouraged
			$mail->Port       = 587;                                    // TCP port to connect to, use 465 for `PHPMailer::ENCRYPTION_SMTPS` above

			//Recipients
			$mail->setFrom('asalemailPengirim');
			$mail->addAddress($email, $nama_pengirim);     // Add a recipient

			$mail->addReplyTo('asalemailPengirim');
			// $mail->addCC('[email protected]');
			// $mail->addBCC('[email protected]');

			// Attachments
			// $mail->addAttachment('/var/tmp/file.tar.gz');         // Add attachments
			// $mail->addAttachment('/tmp/image.jpg', 'new.jpg');    // Optional name

			// Content
			$mail->isHTML(true);                                  // Set email format to HTML
			$mail->Subject = 'Konfirmasi Pembayaran dari Localhost dengan Codeigniter';
			$mail->Body    = '<h1>Halo, Admin.</h1> <p>Ada pesanan baru dengan nomor invoice ' . $no_invoice . '</p> ';

			if ($mail->send()) {
				echo 'Konfirmasi pembayaran telah berhasil';
			} else {
				echo "Message could not be sent. Mailer Error: {$mail->ErrorInfo}";
			}
		} else {
			echo "Tekan dulu tombolnya bos";
		}
	}
}

Ketika Anda telah mengisikan username, password, setFrom dan addReplyTo maka coba akses dengan alamat URL: localhost/namaproject/

Apabila berhasil maka akan masuk pesan yang dikirim ke email tujuan seperti berikut:

Bagi yang ingin belajar dalam format video/live coding bisa mengikuti video berikut ini:

 

Anda bisa mendownload semua filenya disini

Silahkan ajukan pertanyaan di kolom komentar apabila menemukan problem saat Anda mencobanya dan semoga bermanfaat.

Referensi:

SatuDua, Tiga

Bagikan

Artikel Terkait

Mengatur Default Routes di Codeigniter pada Sub Folder

Mengatur Default Routes di Codeigniter pada Sub Folder

Routes merupakan suatu fitur yang disediakan oleh Codeigniter untuk mempermudah dalam mengelola URL pada aplikasi web yang dibuat. Contoh pola yang bi...

Selengkapnya
Cara Upload Project Codeigniter ke Server Shared Hosting

Cara Upload Project Codeigniter ke Server Shared Hosting

Dalam pembuatan suatu aplikasi web, seseorang biasanya dihadapkan dengan 2 pilihan yaitu kerjakan di localhost atau langsung di server. Bagi Anda yang...

Selengkapnya
Mengatasi Error Number 1055 Expression Select List di Codeigniter 3

Mengatasi Error Number 1055 Expression Select List di Codeigniter 3

Bagi teman-teman yang pernah menemui problem seperti pada gambar yang ada dibawah ini, maka dapat diselesaikan dengan mengganti sql_mode dari phpmyadm...

Selengkapnya
Cara Insert Multiple Data dengan Select2 di Codeigniter 3 dan MySQL

Cara Insert Multiple Data dengan Select2 di Codeigniter 3 dan MySQL

Pada tutorial sebelumnya kita sudah belajar tentang bagaimana cara menggunakan Select2 dalam project yang kita buat. Select2 sangat membantu kita seba...

Selengkapnya