Cara Kirim Email Dengan Codeigniter (Mengirim Pesan Text dan File)

Cara Kirim Mengirim Email Dengan Codeigniter (Mengirim Pesan Text dan File). - Pada tutorial kali ini saya anggap anda sudah bisa melakukan konfigurasi codeigniter ya, jadi admin akan langsung memberikan contoh mengenai tutorial kirim email di codeigniter ini.


Tapi jika anda belum paham mengenai framework codeigniter anda dapat belajar terlebih dahulu di sini. Ok, untuk dapat membuat fitur kirim email di codeigniter baik data yang dikirim berupa pesan text atau disertai file (attrachment) kita memerlukan library php yang bernama PHPMailer.


Anda dapat mengunduh library tersebut di github resmi PHPMailer di https://github.com/PHPMailer/PHPMailer ukurannya tidak sampai 500kB. Jika anda sudah mendownload / clone library tersebut, kemudian extract lalu ganti nama foldernya menjadi PHPMailer lalu pindahkan ke folder application/third_party pada aplikasi codeigniter anda.

Lalu klik kanan pada folder application/libraries lalu klik new file. Kemudian setting dan isi file tersebut dengan script di bawah ini :

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

use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
class PHPMailer_Lib
{
    public function __construct(){
        log_message('Debug', 'PHPMailer class is loaded.');
    }

    public function load(){
        // Include PHPMailer library files
        require_once APPPATH.'third_party/PHPMailer/src/Exception.php';
        require_once APPPATH.'third_party/PHPMailer/src/PHPMailer.php';
        require_once APPPATH.'third_party/PHPMailer/src/SMTP.php';

        $mail = new PHPMailer;
        return $mail;
    }
} 

Langkah tersebut untuk meload library PHPMailer. Kita ketahui bersama bahwasanya terdapat 3 file utama exception.php, phpmailer.php dan SMTP.php untuk bisa menjalankan fitur kirim email ini. Lalu save file tersebut dengan nama Phpmailer_lib.php .


Ok, lanjut kita akan membuat function dengan nama sendEmail() untuk melakukan konfigurasi kirim email dengan PHPMailer. Tapi sebelumnya mari kita membuat layout dahulu, untuk mempermudah proses pembuatan layout saya menggunakan bantuan libarary dari admin2 yang telah terintregasi dengan library bootstrap 4. 

Ok, berikut ini merupakan script layout yang admin buat :

<!DOCTYPE html>
<html lang="en">

<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">

  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
  <meta name="description" content="">
  <meta name="author" content="">

  <title>Finance - Forgot Password</title>

  <!-- Custom fonts for this template-->
  <link href="<?php echo base_url('assets/vendor/fontawesome-free/css/all.min.css')?>" rel="stylesheet" type="text/css">
  <link href="https://fonts.googleapis.com/css?family=Nunito:200,200i,300,300i,400,400i,600,600i,700,700i,800,800i,900,900i" rel="stylesheet">

  <!-- Custom styles for this template-->
  <link href="<?php echo base_url('assets/css/sb-admin-2.min.css') ?>" rel="stylesheet">
  <style media="screen">
    .card {
      background-image: url('assets/img/wave.svg') !important;
      background-size: cover;
      background-position: left;
    }
  </style>

</head>

<body>

  <div class="container">

    <!-- Outer Row -->
    <div class="row justify-content-center">

      <div class="col-xl-10 col-lg-12 col-md-9">
        <form action="<?php echo base_url('Inponow/sendEmail') ?>" method="post" enctype="multipart/form-data">

          <div style="margin-top: 15%;" class="card o-hidden border-0 shadow-lg">
            <div class="card-body p-0">
              <!-- Nested Row within Card Body -->
              <div class="row">
                <div class="col-lg">
                  <div class="text-center">
                    <h1 style="color:white" class="h3 mb-4 mt-4">Inponow Send Message</h1>
                  </div>
                </div>
              </div>
              <div class="row">
                <div class="col-lg">
                  <div class="p-5">
                    <div class="form-group">
                      <label for="pesan" style="color:black">Pesan Anda :</label>
                      <textarea class="form-control" name="pesan" rows="6" style="width:100%"></textarea>
                    </div>
                  </div>
                </div>
                <div class="col-lg-6">
                  <div class="p-5">
                    <?php echo $this->session->flashdata('message'); ?>
                    <div class="form-group ">
                      <label for="username" style="padding-left:1px;color:black">Ketikan Email Anda</label>
                      <input type="email" class="form-control form-control-user" id="exampleInputEmail" placeholder=" Email Anda..." name="email" value="<?php echo set_value('username') ?>">
                      <br>
                      <input type="file" style="height:45px" class="form-control form-control-user" id="" name="uploaded_file">
                    </div>
                    <button type="submit" style="background:#0099ff !important;border-color:#0099ff !important" class="btn btn-primary btn-user btn-block shadow">
                      Kirim Sekarang
                    </button>
                    <br>
                  </div>
                </div>
              </div>
            </div>
          </div>
        </form>
      </div>
    </div>
  </div>

  <!-- Bootstrap core JavaScript-->
  <script src="<?php echo base_url('assets/vendor/jquery/jquery.min.js') ?>"></script>
  <script src="<?php echo base_url('assets/vendor/bootstrap/js/bootstrap.bundle.min.js') ?>"></script>
  <!-- Core plugin JavaScript-->
  <!-- Custom scripts for all pages-->
  <script src="<?php echo base_url('assets/js/sb-admin-2.min.js') ?>"></script>
  <!-- Page level custom scripts -->
  <script type="text/javascript">
    var baseurl = '<?php echo base_url(); ?>';
  </script>


</body>

</html>


Simpan script layout diatas dengan nama file V_SendEmail.php . Kemudian buat function untuk meload layout tersebut jangan lupa setting urlnya di routesnya juga. Berikut ini merupakan hasil layout yang admin buat.

Tutorial send email codeigniter 1.1
Kita lihat di script layout diatas terdapat terdapat inputan yang bertipe file. Oleh karena itu jangan lupa untuk menambahkan atribut di <form … enctype="multipart/form-data"></form>. Pastikan juga link action pada form juga mengarah ke function yang akan kita buat yaitu sendEmail().


Kita mulai membuat function sendEmail. Berikut ini merupakan script function yang admin buat :

public function sendEmail()
    {
      $data = $this->input->post('email');
      $pesan = $this→input→post('pesan');

      $cek = $this->db->select('name, password')->where('name', $data)->limit(1)->get('user_finances')->row();

      if (!empty($cek)) {
        $this->load->library('phpmailer_lib');
        // PHPMailer object
        $mail = $this->phpmailer_lib->load();
        // SMTP configuration
        $mail->isSMTP();
        $mail->Host     = 'smtp.gmail.com';
        $mail->SMTPAuth = true;
        $mail->Username = 'official.smartfinance@gmail.com';
        $mail->Password = 'isi_dengan_password_kalean';
        $mail->SMTPSecure = 'tls';
        $mail->Port     = 587;

        $mail->setFrom('official.smartfinance@gmail.com', 'SmartFinance');
        $mail->addReplyTo('official.smartfinance@gmail.com', 'SmartFinance Official Admin');

        // email tujuan mu
        $mail->addAddress($data);

        // Attracmhent File
        if (!empty($_FILES['uploaded_file']['tmp_name'])) {
          if (isset($_FILES['uploaded_file']) && $_FILES['uploaded_file']['error'] == UPLOAD_ERR_OK) {
                $mail->AddAttachment($_FILES['uploaded_file']['tmp_name'],
                                     $_FILES['uploaded_file']['name']);
          }
        }

        // Email subject
        $mail->Subject = 'Pesan untuk mu...';

        // Set email format to HTML
        // $mail->isHTML(true);

        // Email body content / isi
        $mail->Body = $pesan;

        // Send email
        if(!$mail->send()){
            $this->session->set_flashdata('message', '
              <div   class="alert alert-success" role="alert">
                  Gagal melakukan pengiriman email, cek baik baik email anda !!!
              </div>');
              redirect('Inponow');
        }else{
            $this->session->set_flashdata('message', '
              <div   class="alert alert-success" role="alert">
                  Sukses mengirim email ke '.$data.' cek email anda sekarang.
              </div>');
            redirect('Inponow');
        }

      }else {
        echo "<pre>";
        print_r('sorry, email tidak di temukan di database');
        die;
      }
    }

Admin akan jelaskan sedikit mengenai konfigurasi script funtion kirim email diatas. Variable data dan pesan digunakan untuk mengambil value dari form input

Untuk variable cek anda dapat tidak menggunakannya, opsional saja, di variable cek admin hanya melakukan pengecekan dengan kondisi apakah email ada di database? Jika tidak user tidak dapat melakukan pengiriman email. Jika anda tidak menginginkan pembatasan ini anda cukup komen saja script kondisi tersebut atau hapus saja.


Untuk pelampiran file di email, saya membuatnya secara dinamis. Jadi jika file ada/diupload akan ikut dikirim dan jika tidak, file tidak akan ikut terkirim. Pemberian kondisi tersebut penting, karna jika tidak  bisa jadi system akan gagal dalam melakukan pengiriman email. 

Untuk script $mail->Subject = '...; anda dapat custom sendiri, contohnya membuat 1 form input lagi untuk subject. Sengaja saya isi static data agar proses pembuatan lebih cepat.

Di bagian akhir function sendEmail admin membuat semacam alert peringatan yang nantinya alert peringatan akan dikirimkan melawati session kemudian dimunculkan dengan memangil perintah $this->session->flashdata('message'); .

Langkah akhir yaitu dengan mengaktifkan fitur Akses aplikasi yang kurang aman di setelah akun google yang digunakan sebagai sender email. Cara mengaktifkannya di https://myaccount.google.com/security

Tutorial send email codeigniter 1.2

Dan berikut ini merupakan hasil akhir coding hari ini yang berjudul tutorial kirim email di codeigniter :

Tutorial send email codeigniter 1.3
Tutorial send email codeigniter 1.4
Tutorial send email codeigniter 1.5

Ok sekian untuk artikel Tutorial Cara Kirim Email Dengan Codeigniter (Mengirim Pesan dan File). Kurang lebihnya saya mohon maaf. Terimakasih.

2 comments

  1. bang saya kok saya mlh muncul terus notif sorry, email tidak di temukan di database, itu kira" kesalahannya dimana ya?

    1. coba perhatikan variable $cek, di $cek berisi query untuk mengambil data name dan password di database (user_finances) kemudian dilakukan pengecekan,
      apakah ada di table user_finances dengan kolom name yang memiliki value $data('ini variable untuk menampung emailnya')
      jika kosong maka tampilkan pesan "sorry, email tidak di temukan di database",
      jika tidak kirim email

      jika anda tidak memerlukan pengecekan ini, anda dapat menonaktifkan variable $cek beserta kondisi nya..

      semoga terbantu.

Baca juga artikel menarik lainnya