M K H U D A B L O G
Mail dengan link konfirmasi

Artikel Day 2 sebelumnya telah menjelaskan dan memberikan sedikit pengetahuan bagaimana melakukan pengiriman email secara otomatis setelah user melakukan pendaftaran di form. Untuk artikel tutorial kali ini, penulis akan melakukan sedikit modifikasi di beberapa bagian untuk menambahkan modul sistem aktivasi.

Cara kerja sistem aktivasi pendaftaran ini cukup sederhana :

  1. Jika user mendaftar untuk pertama kalinya, kolom “confirm” pada database otomatis bernilai “no“. Itu artinya user belum melakukan registrasi
  2. Sistem akan mengirimkan link notifikasi jika user telah melakukan pengisian form.
  3. Link notifikasi ini berisi id unique,
  4. Jika link notifikasi di klik, user akan dibawa ke halaman confirm.php, selanjutnya sistem akan melakukan pemrosesan kolom “confirm” di database menjadi “yes“.

Mari kita lanjutkan tutorial Day 3. Silahkan ikuti tutorial berikut :

1Modifikasi mail.php

File mail.php yang telah dibuat sebelumnya telah berhasil kita manfaatkan untuk melakukan proses input data ke database dan mengirimkan email notifikasi (tanpa link konfirmasi). Modifikasi kali ini bertujuan agar file mail.php dapat memproses data sekaligus mengirim email notifikasi beserta link konfirmasinya.

Berikut adalah source code mail.php yang bisa Anda tulis :

<?php
error_reporting(0);

function rand_string( $length ) {
	$chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";	

	$size = strlen( $chars );
	for( $i = 0; $i < $length; $i++ ) {
		$str .= $chars[ rand( 0, $size - 1 ) ];
	}

	return $str;
}

include 'config.php';
$nama = $_POST['nama'];
$email = $_POST['email'];
$id = rand_string( 10 );
if (!isset($nama)) {
echo "Lengkap form";
}
elseif (!isset($email)) {
	echo "Lengkapi form";
} 
else {

	// cek apakah email sudah terdaftar
	$query = "SELECT email FROM user WHERE email='$email'";
	$find = mysql_query($query);

	if ($find && mysql_num_rows($find) > 0) {
		echo "user telah terdaftar";
	}
	else {
		$add = "insert into user set id='$id', name='$nama', email='$email', confirm='no'";
		$set = mysql_query($add);
		if ($set) {
			echo "sukses db <br>";
		} else {
			echo "gagal database <br>";
		}
		require_once('library/class.phpmailer.php'); //menginclude librari phpmailer

		$mail             = new PHPMailer();
		$body             = 
		"<body style='margin: 10px;'>
		<div style='width: 640px; font-family: Helvetica, sans-serif; font-size: 13px; padding:10px; line-height:150%; border:#eaeaea solid 10px;'>
		<br>
		<strong>Terima Kasih Telah Mendaftar</strong><br>
		<b>Nama Anda : </b>".$nama."<br>
		<b>Email : </b>".$email."<br>
		<b>URL Konfirmasi : </b>http://domain-anda.com/mailer/confirm.php?id=".$id."<br>
		<br>
		</div>
		</body>";
		$body             = eregi_replace("[\]",'',$body);
		$mail->IsSMTP(); 	// menggunakan SMTP
		$mail->SMTPDebug  = 1;   // mengaktifkan debug SMTP

		$mail->SMTPAuth   = true;   // mengaktifkan Autentifikasi SMTP
		$mail->Host 	= 'mail.mkhuda.com'; // host sesuaikan dengan hosting mail anda
		$mail->Port       = 25;  // post gunakan port 25
		$mail->Username   = "hello@mkhuda.com"; // username email akun
		$mail->Password   = "coretwoduo";        // password akun

		$mail->SetFrom('hello@mkhuda.com', 'Hello Mkhuda');

		$mail->Subject    = "Hello";
		$mail->MsgHTML($body);

		$address = $email; //email tujuan
		$mail->AddAddress($address, "Hello (Reciever name)");

		if(!$mail->Send()) {
			echo "Oops, Mailer Error: " . $mail->ErrorInfo;
		} else {
			echo "Mail Sukses";
		}
	}

}

?>

Penjelasan :

  • Penambahan kode ada di baris 52, dimana berisi alamat url link beserta id yang di-create otomatis berdasarkan id user yang telah mendaftar.
  • Untuk meneruskannya ke email admin, pembaca bisa melakukan modifikasi sendiri pada source diatas di baris 77.

2Membuat halaman confirm (konfirmasi)

Sebelumnya kita telah membuat file php bernama confirm.php, seperti yang telah kita edit pada file mail.php bahwa file ini akan memproses link konfirmasi yang dikirimkan ke email user. Berikut adalah file confirm.php yang penulis buat :

<?php
include 'config.php';
$confirm = $_GET['id'];
if (isset($confirm)) {
	$query = "SELECT id FROM user WHERE id='$confirm'";
	$find = mysql_query($query);

	if ($find && mysql_num_rows($find) > 0) {
		$update = "update user set confirm='yes' where user.id='$confirm'";
		$set = mysql_query ($update);
		if ($set) {
			echo "Konfirmasi sukses";
		}
	} else {
		echo "ID tidak dikenali";
	}
} else {
	echo "Nothing to do";
}

?>

Penjelasan kode :

  • Baris nomor 3 kita membuat variabel $confirm, yang berasal dari $_GET[‘id’] (lihat url link konfirmasi).
  • Baris 5 dan 6, melakukan pengecekan pada tabel database apakah ID tersebut ada di dalam data.
  • Jika data ID tersedia, maka baris 8 sampai 13 akan memproses dengan mengeset data confirm “no” menjadi “yes“.
  • Jika data ID tidak ada, maka akan ada notifikasi error.

3Uji coba

Berikut adalah tampilan email notifikasi beserta penambahan link konfirmasinya :

  • Tampilan email beserta link konfirmasi :
Mail dengan link konfirmasi
Mail dengan link konfirmasi
  • Informasi tabel database dari kolom “confirm” berubah menjadi “yes“, setelah dilakukan konfirmasi.
Cek konfirmasi di database
Cek konfirmasi di database

Dengan berakhirnya tutorial Form Registrasi dan Sistem Aktivasi Day 3, maka berakhirlah rangkaian day to day tutorial sederhana namun cukup kompleks mengenai PHP Mailer ini. Silahkan uji coba sistem yang baru saja pembaca buat, sekaligus implementasikan dengan sebaik mungkin.

Berikut adalah link tutorial day to day penulis mengenai PHP Mailer ini :

  1. Day 1 (Hari Pertama)Untuk persiapan class, database dan konfigurasi sistem
  2. Day 2 (Hari Kedua)Pembuatan form dan sistem
  3. Day 3 (Hari Ketiga) – Implementasi PHP Mailer untuk aktivasi melalui email

Terima kasih. Semoga bermanfaat, Caaooo ! 😀

14 Comments

  • blabla

    March 24, 2014

    Itu Cara ngedit Mail Php nya Gimana Gan ?!

    Reply
    • Muhammad K Huda

      March 24, 2014

      Mau nambahin variabel gitu mas ?

      Reply
  • shafira

    May 5, 2014

    Kok muncul ini kenapa ya?
    SMTP ERROR: Password command failed: 535 Incorrect authentication data 2014-05-05 09:25:43 CLIENT -> SERVER: QUIT SMTP connect() failed. Oops, Mailer Error: SMTP connect() failed.

    Reply
  • Ambar

    May 5, 2014

    Kalau bikin lupa password via email gimana ya? Terimakasih 🙂

    Reply
  • nida

    July 3, 2014

    Mas, saya sudah coba tapi ada error seperti ini

    “sukses db
    SMTP connect() failed. Oops, Mailer Error: SMTP connect() failed.”

    DImana ya letak kesalahannya ? Mohon bantuannya . Terimakasih banyak.

    Reply
    • Muhammad K Huda

      July 17, 2014

      smtp-nya pakai hosting atau dari google mbak ?

      Reply
  • erin

    July 20, 2014

    Oops, Mailer Error: SMTP connect() failed.
    saya dapat pesan tersebut kenapa ya?
    saya pakai idhostinger hostingnya..

    Reply
    • Muhammad K Huda

      July 27, 2014

      beberapa penyedia hosting sekarang tidak memperkenankan penggunaan smtp spertinya

      Reply
  • Riandy

    April 10, 2015

    Makasih Kang Huda Infonya ,
    saya sudah coba tapi kok email nya gak masuk ke Gmaill saya yaa?
    saya pakai Email dari hosting web saya port nya say rubah dari 25 ke 465 pun masih gak masuk juga email nya ke email gmail yg diinput ??

    Kenapa yaa mass ??

    Reply
  • Adi Maryanto

    May 17, 2015

    Halo mas,

    Jika php mailer di injek kedalam framework ini : https://github.com/derek-lu/Entitlement-Admin

    Ada Grup (Grup 1, Grup 2, Grup 3, Grup 4, Grup 5)
    Ada User yang terkelompok dalam Grup
    Ada Product Id yang terkelompok ke Grup & User.

    Itu Cara Injectnya gimana mas ?

    Reply
    • Muhammad K Huda

      July 9, 2015

      Saya lihat struktur di framework tersebut cukup bagus dan kemungkinan bisa di inject dengan phpmailer.
      Caranya :

      1. Copas PHPMailer.php ke php folder
      2. Buat file baru di php folder dgn nama apapun
      3. Include PhpMailer.php ke file baru tersebut, dan buat script untuk melakukan request mail.

      Bisa dicoba dahulu mas.

      Reply
  • dedi

    June 10, 2015

    saya sudah mengaplikasinya di hosting dgn konfig dari hosting dapurhosting.com
    Incoming Server: mail.lovanoz.com
    IMAP Port: 143
    POP3 Port: 110
    Outgoing Server: mail.lovanoz.com
    SMTP Port: 26
    Kalo input form sudah masuk ke database, tapi pada saat kirim email tidak ada pesan error ataupun apa ? tapi berulang kali di coba tidak terkirim ke email, gimana cara perintah cek fungsi phpmailer nya bekerja tidak nya

    trima kasih

    Reply
    • Muhammad K Huda

      July 9, 2015

      coba mas dedy pakai gmail dulu

      $mail->SMTPAuth = true;
      $mail->Host = 'smtp.gmail.com';
      $mail->Port = 465;
      $mail->SMTPSecure = 'ssl';

      Reply
  • rahmad nurularifin

    May 31, 2016

    saya mau ngubah variabelnya gan,, email dijadikan nohp.. jadi nama dan no hp.. apa yang harus diubah atau ditambah coding gan… mohon bantuannya

    Reply

Leave A Comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.