M K H U D A B L O G
Pengisian Form

Pada artikel Day 1 beberapa hari yang lalu, kita telah mempersiapkan konfigurasi database, dan persiapan class PHPMailer. Untuk artikel Day 2, penulis akan mencoba membuat tampilan form dan juga sistem Mailer secara sederhana (belum termasuk aktivasi).

Sebelum memulai tutorial, penulis mengingatkan untuk mengikuti tutorial sebelumnya disini, agar pembaca dapat mengikuti langkah demi langkah secara beruntun. Berikut adalah lanjutannya :

1File yang diperlukan

Pada hari pertama (Day 1), kita telah memasukkan library PHPMailer ke dalam sistem root aplikasi web kita. Kali ini kita akan membuat beberapa file yang nantinya akan mendukung kerja dari sistem. File yang telah dibuat dapat langsung diupload ke server hosting melalui FTP dan mengeditnya menggunakan editor.

File yang Diperlukan
File yang Diperlukan

Berikut adalah file yang dibutuhkan :

  • Index.php, Untuk membuat tampilan utama form pendaftaran, terdiri dari 2 input yaitu input nama dan email.
  • Config.php, File yang dipergunakan untuk konfigurasi sistem aplikasi dengan database MySQL
  • Mail.php, Inilah file yang akan memproses hasil inputan form dan memasukkannya ke database. File ini juga berfungsi sebagai controller pengirim email dengan menginclude library yang telah kita taruh di root sistem aplikasi
  • Confirm.php, file yang akan dipanggil saat user melakukan klik link aktivasi yang dikirim di email pendaftar. (Tutorial Day 3)

2Membuat Halaman Index

Halaman index kita merupakan halaman utama form registrasi. Form ini terdiri dari 2 input yakni input nama dan input email beserta tombol submit. Sebenarnya pembaca bisa membuat sendiri tampilan maupun source form di bagian ini sesuai kehendak. Berikut adalah script index.php yang bisa pembaca tulis :

<html>
<head>
	<meta name="viewport" content="width=device-width">
	<title>PHP Mailer by Mkhuda</title>
	<meta name="description" content="PHP Mailer by Mkhuda">
	<link href="http://fonts.googleapis.com/css?family=Open+Sans+Condensed:700,300" rel="stylesheet" type="text/css">
	<link href="style.css" type="tex/css" rel="stylesheet" media="all">
	<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>

</head>	
<body>

<div id="form">
	<form method="post" action="mail.php" class="form-horizontal">
	<label class="detik">Nama Anda</label><br>
	<input class="input" type="text" name="nama" placeholder="Masukkan Nama Angka"><br>
    <label class="detik">Nama Email Anda</label><br>
    <input class="input" type="text" name="email" placeholder="Masukkan Email Anda"><br>
	<button type="submit" name="submit" class="btn">Submit</button>
</form>
</div>
<div id="mk-link">
	<a class="link" href="http://mkhuda.com" title="Mkhuda Blog">Back to Site</a>
</div>
</body>
</html>

CSS bisa pembaca sesuaikan sendiri.

3File Konfigurasi Database

Config.php bertugas untuk menjembatani aplikasi web mailer kita dengan database MySQL yang sebelumnya telah dibuat pada Day 1. Seperti script konfigurasi pada artikel saya yang lain, berikut adalah script config.php yang bisa penulis pakai :

<?php
	$host="localhost";
	$user="nama_user_anda";
	$password="password_user";	
	$koneksi=mysql_connect($host,$user,$password) or 
	die("Gagal Cuy ! :D");

	mysql_select_db("nama_database_anda");
?>

Silahkan sesuaikan variabel $user dan $password beserta database sesuai konfigurasi database yang telah pembaca buat pada masing-masing phpmyadmin. Jangan sampai salah untuk konfigurasi ini.

4Membuat Sistem Utama

Pada script index.php, kita telah merujuk action ke file mail.php. File mail.php inilah yang menjadi kunci dan kontrol email sistem aplikasi kita. Terdiri dari beberapa Class berbasis OOP yang merupakan default dari PhpMailer. Berikut adalah script, beserta penjelasannya :

<?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) {

		} else {

		}
		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>
		<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 	= '49.xxx.xxx.xxx'; // Gunakan Ip Shared Address Hosting Anda
		$mail->Port       = 25;  // post gunakan port 25
		$mail->Username   = "hello@mkhuda.com"; // username email akun
		$mail->Password   = "passwordanda";        // 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";
		}
	}

}

?>

Perlu diperhatikan. Sebelum pembaca menulis script untuk mail.php di atas, sebaiknya pembaca membuat terlebih dahulu akun email yang akan difungsikan untuk konfigurasi SMTP pada class phpMailer kita. Port yang digunakan umumnya menggunakan Port 25, pembaca bisa mengikuti tutorial ini untuk melihat detail konfigurasi SMTP email pada hosting.

– Mail.php diatas juga telah penulis lengkapi dengan fungsi untuk membuat id secara otomatis bernama rand_string() (lihat baris 4 sampai 13). Fungsi rand_string dimanfaatkan oleh variabel $id (lihat baris 18).

– File diatas juga telah dilengkapi dengan pengecekan apakah user yang dipakai email sudah terdaftar. Jika sudah terdaftar, maka email tidak dapat dipakai untuk melakukan pendaftaran kembali.

– Tambahan baru, bilamana ada masalah dengan port smtp di hosting, coba gunakan Ip shared Address untuk hosting Anda pada bagian $mail->Host, dan untuk $mail->Port tetap gunakan port 25

5Uji Coba

Jika pembaca sudah mengikuti tutorial di atas dengan baik, silahkan melakukan uji coba dengan mengakses aplikasi sekaligus mengisi form pendaftaran. Pastikan juga email yang kita registrasikan adalah email aktif, untuk mengecek apakah sistem PHP Mailer sukses mengirim email ke pendaftar.

Berikut adalah screenshot hasil uji coba dan notifikasi email yang diterima :

Pengisian Form
Pengisian Form

Email Notifikasi PHPMailer
Email Notifikasi PHPMailer

Cek Database PhpMyAdmin
Cek Database PhpMyAdmin

Selamat mencoba !

Pada tutorial selanjutnya (Day 3), penulis akan mengaplikasikan sistem aktivasi agar user dapat melakukan aktivasi melalui email yang dikirim oleh sistem.

19 Comments

  • irwan

    March 12, 2014

    gan, ane bingung disini gan.
    $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’);

    ane gk mudeng hosting mail itu apa. tapi ane udah siapin akun gmail 2, 1 buat pengirim n satu penerima . . . ane udah pake hosting gratisan, cuma bingung mailnya itu mana . . . n keluar erro gini
    Invalid address: a7240555SMTP -> ERROR: EHLO not accepted from server:
    SMTP -> ERROR: HELO not accepted from server:
    SMTP -> ERROR: AUTH not accepted from server: 421 Cannot connect to SMTP server 31.170.162.22 (31.170.162.22:25), NB connect error 1460
    SMTP -> ERROR: RSET failed:
    SMTP -> NOTICE: EOF caught while checking if connectedThe following From address failed: root@localhost : Called Mail() without being connected Oops, Mailer Error: The following From address failed: root@localhost : Called Mail() without being connected

    mohon penceran . . -_-

    Reply
  • erik

    May 11, 2014

    email suda masuk database dan suda masuk ke email gmail tester
    tapi kenapa page sendingnya jadi ancur ya?

    2014-05-11 11:49:52 CLIENT -> SERVER: EHLO sanmotor.esy.es 2014-05-11 11:49:52 CLIENT -> SERVER: AUTH LOGIN 2014-05-11 11:49:52 CLIENT -> SERVER: YWRtaW5Ac2FubW90b3IuZXN5LmVz 2014-05-11 11:49:52 CLIENT -> SERVER: a2V0b2ttYWdpYzE= 2014-05-11 11:49:52 CLIENT -> SERVER: MAIL FROM: 2014-05-11 11:49:52 CLIENT -> SERVER: RCPT TO: 2014-05-11 11:49:53 CLIENT -> SERVER: DATA 2014-05-11 11:49:53 CLIENT -> SERVER: Date: Sun, 11 May 2014 11:49:52 +0000 2014-05-11 11:49:53 CLIENT -> SERVER: To: “Hello (Reciever name)” 2014-05-11 11:49:53 CLIENT -> SERVER: From: Hello User 2014-05-11 11:49:53 CLIENT -> SERVER: Subject: Hello 2014-05-11 11:49:53 CLIENT -> SERVER: Message-ID: 2014-05-11 11:49:53 CLIENT -> SERVER: X-Priority: 3 2014-05-11 11:49:53 CLIENT -> SERVER: X-Mailer: PHPMailer 5.2.7 (https://github.com/PHPMailer/PHPMailer/) 2014-05-11 11:49:53 CLIENT -> SERVER: MIME-Version: 1.0 2014-05-11 11:49:53 CLIENT -> SERVER: Content-Type: multipart/alternative; 2014-05-11 11:49:53 CLIENT -> SERVER: boundary=”b1_1cfa1209c7bdc67e54be3edac7e3216b” 2014-05-11 11:49:53 CLIENT -> SERVER: Content-Transfer-Encoding: 8bit 2014-05-11 11:49:53 CLIENT -> SERVER: 2014-05-11 11:49:53 CLIENT -> SERVER: –b1_1cfa1209c7bdc67e54be3edac7e3216b 2014-05-11 11:49:53 CLIENT -> SERVER: Content-Type: text/plain; charset=us-ascii 2014-05-11 11:49:53 CLIENT -> SERVER: 2014-05-11 11:49:53 CLIENT -> SERVER: Terima Kasih Telah Mendaftar 2014-05-11 11:49:53 CLIENT -> SERVER: Nama Anda : erik 2014-05-11 11:49:53 CLIENT -> SERVER: Email : waterseven92@gmail.com 2014-05-11 11:49:53 CLIENT -> SERVER: 2014-05-11 11:49:53 CLIENT -> SERVER: 2014-05-11 11:49:53 CLIENT -> SERVER: –b1_1cfa1209c7bdc67e54be3edac7e3216b 2014-05-11 11:49:53 CLIENT -> SERVER: Content-Type: text/html; charset=us-ascii 2014-05-11 11:49:53 CLIENT -> SERVER: 2014-05-11 11:49:53 CLIENT -> SERVER: 2014-05-11 11:49:53 CLIENT -> SERVER:
    2014-05-11 11:49:53 CLIENT -> SERVER:
    2014-05-11 11:49:53 CLIENT -> SERVER: Terima Kasih Telah Mendaftar
    2014-05-11 11:49:53 CLIENT -> SERVER: Nama Anda : xxxxxx
    2014-05-11 11:49:53 CLIENT -> SERVER: Email : xxxxxxx@gmail.com
    2014-05-11 11:49:53 CLIENT -> SERVER:
    2014-05-11 11:49:53 CLIENT -> SERVER:
    2014-05-11 11:49:53 CLIENT -> SERVER: 2014-05-11 11:49:53 CLIENT -> SERVER: 2014-05-11 11:49:53 CLIENT -> SERVER: 2014-05-11 11:49:53 CLIENT -> SERVER: 2014-05-11 11:49:53 CLIENT -> SERVER: –b1_1cfa1209c7bdc67e54be3edac7e3216b– 2014-05-11 11:49:53 CLIENT -> SERVER: 2014-05-11 1
    seperti itu

    Reply
    • riza sauqi

      July 18, 2014

      sama gan,, ane juga gitu,, ancurr, knapa ya?

      Reply
      • Muhammad K Huda

        July 19, 2014

        smtp pakai host dari hosting atau google ya ?

        Reply
  • johny darmawan

    December 11, 2014

    Heloo mas, mohon pencerahannya.
    Untuk data masuk ke database. Tapi untuk email aktivasinya tidak terkirim.
    port SMPT saya sudah setting pake 26 karena default hostingnya begitu.
    Untuk phpmailer nya disimpan di hosting di folder root? atau dibuatkan folder baru library itu??

    untuk classsmtp.php apa port nya perlu saya rubah? atau tetap biarkan default 25??

    Terima kasih

    Reply
    • Muhammad K Huda

      January 3, 2015

      Sesuaikan dengan port smtp di hosting mas. Tapi pada umumnya hosting menggunakan port 25 utk SMTP. Thanks

      Reply
  • alvian david

    June 5, 2015

    mas, kok setelah diklik submit halaman mail.php menjadi blank dan email juga nggak terkirim. solusinya bagaimana ya? mohon balasannya.

    Reply
    • Muhammad K Huda

      July 8, 2015

      biasanya terjadi karna setting mailer maupun incoming belum tepat..

      Reply
    • Muhammad K Huda

      July 9, 2015

      bisa diperlihatkan scriptnya seperti gimana ? thanks

      Reply
  • Syahrul

    June 10, 2015

    Gan phpmailer nya di rubah juga tidak? Kalau iya sekalian posting nya dong.

    Reply
  • anggie ahmad

    September 8, 2015

    AssalamualaikumWr. Wb.

    Pak Mohon pencerahannya

    halaman login sudah muncul tapi ketika di submit blank dan tidak ada email confirm di sisi pendaftar. berikut scriptnya :

    <?php
    error_reporting(0);

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

    $size = strlen( $chars );
    for( $i = 0; $i 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) {

    } else {

    }
    require_once(‘library/class.phpmailer.php’); //menginclude librari phpmailer

    $mail = new PHPMailer();
    $body =

    Terima Kasih Telah Mendaftar
    Nama Anda : “.$nama.”
    Email : “.$email.”

    “;
    $body = eregi_replace(“[]”,”,$body);
    $mail->IsSMTP(); // menggunakan SMTP
    $mail->SMTPDebug = 1; // mengaktifkan debug SMTP

    $mail->SMTPAuth = true; // mengaktifkan Autentifikasi SMTP
    $mail->Host = ‘********’; // Gunakan Ip Shared Address Hosting Anda
    $mail->Port = **; // post gunakan port 25
    $mail->Username = “anggie.ahmad@stpsahid.info”; // username email akun
    $mail->Password = “**********”; // password akun

    $mail->SetFrom(‘anggie.ahmad@stpsahid.info’, ‘Hello Anggie’);

    $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”;
    }
    }

    }

    ?>

    Reply
    • Muhammad K Huda

      September 12, 2015

      ubah error_reporting dari (0) ke (-1)
      error yg ditampilin apa mas ?

      Reply
    • Muhammad K Huda

      September 12, 2015

      coba ganti reportingnya ke error_reporting(-1)
      kira2 error apa yg terlihat mas ?

      Reply
      • sastra

        October 20, 2015

        Notice: Undefined variable: str in /home/u292104380/public_html/daftar/mail.php on line 9

        Deprecated: mysql_query(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead in /home/u292104380/public_html/daftar/mail.php on line 29

        Deprecated: Function eregi_replace() is deprecated in /home/u292104380/public_html/daftar/mail.php on line 55

        Fatal error: Class ‘SMTP’ not found in /home/u292104380/public_html/daftar/library/class.phpmailer.php on line 1303

        Reply
  • sastra

    October 20, 2015

    Eror gini mas kalo di ganti (-1)

    Notice: Undefined variable: str in /home/u292104380/public_html/daftar/mail.php on line 9

    Deprecated: mysql_query(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead in /home/u292104380/public_html/daftar/mail.php on line 29

    Deprecated: Function eregi_replace() is deprecated in /home/u292104380/public_html/daftar/mail.php on line 55

    Fatal error: Class ‘SMTP’ not found in /home/u292104380/public_html/daftar/library/class.phpmailer.php on line 1303

    Reply
    • Muhammad K Huda

      November 9, 2015

      class phpmailernya coba diupdate ya mas .

      Reply
  • pools

    March 15, 2016

    bos bisa pakai jasa anda bos…
    kirimi pin.BB atau no.HP
    makasih sebelumnya…

    Reply
    • Muhammad K Huda

      March 25, 2016

      Email aja ya pak. Biar enak. (mhmmd.huda@gmail.com)

      Reply

Leave A Comment

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