Featured Video

Jumat, 19 Agustus 2011

Mengirim email dengan PHP, mulai dari email biasa, email HTML sampai email dengan attachment


Mengirim email dengan PHP bukan merupakan hal yang sulit, PHP telah menyediakan fungsimail() untuk mengirim email dengan PHP. Anda dapat mengirim email teks biasa, email HTML bahkan email dengan attachment dengan mudah.

Fungsi mail()

Pertama-tama kita pelajari dulu fungsi mail(). Sintaksnya seperti ini:
mail ( string to, string subject, string message [, string additional_headers [, string additional_parameters]])
Fungsi mail() memiliki 3 parameter wajib dan satu parameter opsional. Ke 3 parameter tersebut adalah email tujuan, judul email dan isi email, serta 1 parameter opsional yaitu header email.
Anda perlu mengubah setting php.ini pada bagian SMTP agar fungsi mail() dapat bekerja pada komputer anda. Jika anda menggunakan Unix/Linux maka fungsi mail() menggunakan Sendmail pada Linux, sedangkan pada Windows fungsi mail() akan menggunakan remote SMTP mail server untuk mengirim email. Saran saya jika anda ingin mencoba fungsi mail(), cobalah di hosting anda. Semua layanan hosting yang mendukung PHP dapat menjalankan fungsi mail() tanpa masalah.
Oke daripada bingung, langsung saja kita praktek membuat fungsi mail() sederhana:
<?
mail("admin@websitesaya.com", "Selamat Datang", "Halo admin \n Terima kasih \n atas respon anda");
?>
Jika anda coba contoh diatas maka PHP akan mengirim email ke admin@websitesaya.com dengan judul "Selamat datang" dan isi emailnya seperti ini:

Halo admin
Terima kasih
atas respon anda
Bagaimana saya bisa membuat baris baru pada isi email? tentu saja dengan menggunakan \n (New Line) yang dapat kita masukkan kedalam isi email. Jika anda mencoba kode tersebut di komputer anda (localhost) dan anda belum melakukan setting SMTP, maka akan muncul pesan error PHP. Jika kita ingin pesan error yang lebih manusiawi jika email berhasil terkirim atau gagal, anda dapat menggunakan if seperti pada contoh berikut ini:
<?
if (mail("admin@websitesaya.com", "Selamat Datang", "Halo admin \n Terima kasih \n atas respon anda")) {
echo "Email sudah terkirim";
} else {
echo "Email gagal terkirim";
}
?>
Dengan kode tersebut, apabila karena suatu hal email gagal terkirim, maka akan muncul pesan bahwa email gagal terkirim. Sekarang kita coba kode yang lebih kompleks.
<?
if (mail("admin@websitesaya.com", "Selamat Datang", "Halo ini isi email", ,"From: Dhimas <tes@dhimasronggobramantyo.com>")) {
echo "Email sudah terkirim";
} else {
echo "Email gagal terkirim";
}
?>
Dengan menggunakan kode seperti itu, maka si penerima email akan mendapat informasi bahwa pengirimnya adalah Dhimas dengan alamat email tes@dhimasronggobramantyo.com. Mudah kan? sekarang kita belajar yang lebih sulit lagi.

Email HTML

Untuk mengirim email dalam bentuk HTML juga tidaklah sulit. Kita hanya perlu memberitahukan email tujuan bahwa email yang kita kirim bentuknya HTML. Bagaimana caranya? tentu saja dengan menambahkan header untuk menunjukkan bahwa email kita email HTML. Oke daripada bingung langsung saja coba kode php berikut ini:
<?php 
mail('admin@websitesaya.com', 'Judul Email', 
'<html><body><p>Halo <i>dunia</i>, ini email HTML lho.</p></body></html>', 
"To: The Receiver <admin@websitesaya.com>\n" . 
"From: The Sender <adadeh@gmail.com>\n" . 
"MIME-Version: 1.0\n" . 
"Content-type: text/html; charset=iso-8859-1"); 
Header yang kita gunakan untuk mengirim email HTML adalah:
"MIME-Version: 1.0\n" .
"Content-type: text/html; charset=iso-8859-1"); 
Dengan Header seperti itu, maka email tersebut akan dibaca sebagai file HTML dan tentu saja karena email kita HTML kita bisa memasukkan kode HTML apa saja kedalam email.
Ingat, jika email klien/tujuan tidak mensupport HTML, maka email tersebut tidak akan terbuka. Tetapi sebagian besar alamat email saat ini sudah mendukung HTML. Ingat, sebagian besar, berarti masih ada yang belum mendukung HTML.

Email dengan Attachment

Sekarang mungkin anda bertanya? bisa nggak ngirim email dengan attachment? Jawabannya bisa? Lalu bagaimana caranya? tentu saja dengan mengubah Header nya. Pertama-tama yang kita lakukan kita memerlukan form untuk mengupload filenya, dan kita kemudian mengambil variabel file yang diupload tersebut (lihat artikel tentang upload file dengan php).
Semua email menggunakan encoding base64 untuk mengencoding attachment baik dalam bentuk file binary ataupun file text.
Karena kita perlu mengencoding file attachment kita dengan Base64 encoding, maka kita memerlukan fungsi PHP base64_encode(). Setelah di encode, kita masukkan hasilnya ke header dan kita kirim emailnya.
Oke, daripada bingung kita coba saja langsung. Kita akan membuat 2 file, yang pertama adalah form.html yang berisi form pengiriman email. Dan yang kedua adalah mail.php yang berisi fungsi untuk mengirimkan email kita. Langsung saja kita buat form.html dan isilah dengan kode berikut:
<html>
<head>
<title>Kirim email dengan attachment</title>
</head>
<body>
<h1>Kirim Email dengan Attachment</h1>
<form action="mail.php" method="POST" enctype="multipart/form-data">
<p>Kepada: <input type="text" name="to" value="" /><br />
Dari: <input type="text" name="from" value="" /><br />
Judul: <input type="text" name="subject" value="" /></p>
<p>Pesan:<br />
<textarea cols="70" rows="20" name="message"></textarea></p>
<p>File: <input type="file" name="fileatt" /></p>
<p><input type="submit" value="Kirim" /></p>
</form>
</body>
</html>
Oke anda pasti sudah paham kode tersebut, karena kode tersebut hanya merupakan kode HTML biasa. Dimana ketika tombol kirim diklik, maka kita memanggil file mail.php. Sekarang buatlah mail.php dan isilah dengan kode berikut ini:
<html>
<head>
<title> Mengirim Email dengan Attachment </title>
</head>
<body>
<?
$to = $_POST['to'];
$from = $_POST['from'];
$subject = $_POST['subject'];
$message = $_POST['message'];

$fileatt = $_FILES['fileatt']['tmp_name'];
$fileatt_type = $_FILES['fileatt']['type'];
$fileatt_name = $_FILES['fileatt']['name'];

$headers = "From: $from";

if (is_uploaded_file($fileatt)) {
$file = fopen($fileatt,'rb');
$data = fread($file,filesize($fileatt));
fclose($file);
$semi_rand = md5(time());
$mime_boundary = "==Multipart_Boundary_x{$semi_rand}x";
$headers .= "\nMIME-Version: 1.0\n" .
"Content-Type: multipart/mixed;\n" .
" boundary=\"{$mime_boundary}\"";
$message = "Email dengan attachment dan MIME format.\n\n" .
"--{$mime_boundary}\n" .
"Content-Type: text/plain; charset=\"iso-8859-1\"\n" .
"Content-Transfer-Encoding: 7bit\n\n" .
$message . "\n\n";
$data = chunk_split(base64_encode($data));

$message .= "--{$mime_boundary}\n" .
"Content-Type: {$fileatt_type};\n" .
" name=\"{$fileatt_name}\"\n" .
"Content-Transfer-Encoding: base64\n\n" .
$data . "\n\n" .
"--{$mime_boundary}--\n";
}

$ok = @mail($to, $subject, $message, $headers);
if ($ok) {
echo "<p>Email sudah dikirim</p>";
} else {
echo "<p>Email gagal terkirim!</p>";
}
?>
</body>
</html>
Jika sudah, jalankan form.html, isilah form-form yang tersedia. Jangan lupa untuk mengambil file dari komputer anda, kemudian kirimkan email tersebut. Mudah kan? yang perlu diingat kita perlu mengencoding file attachment kita dengan encoding base64. Selamat mencoba...

1 komentar:

makasih sharing ilmunya.. sangat bermanfaat

Posting Komentar

Twitter Delicious Facebook Digg Stumbleupon Favorites More