Artikel PHP/MySQL
Mengirim email dengan PHP, mulai dari email biasa, email HTML sampai email dengan attachment
Ditulis oleh Dhimas Ronggobramantyo
Kategori: PHP/MySQL
Dibaca 12682 kali
Mengirim email dengan PHP bukan merupakan hal yang sulit, PHP telah menyediakan fungsi mail() 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.
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" .
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.
"Content-type: text/html; charset=iso-8859-1");
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).
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...
Komentar [51]
amalan yang baik mas dhimas. saya dukung. walaupun free tapi pahalanya mengantar hidup bahagia dunia akhirat.
kok susah di save as .. ? mata sakit kalo baca di monitor.
menurut pengalama , jika menggunakan teknik dasar seperti diatas email yang dikirim masih tergolong spam dgn masuk di folder spam, dan akhirnya ip global untuk mengirimkan mail tersebut akan masuk daftar ip yang mengirimkan spam di spam house, shg bisa2 tidak akan masuk ke email tertentu jika suatu setting email di perusaahn itu tidak mengizinkan email dari ip yg terlist dispam house.
setelah saya coba ternyata gak masuk difolder spam kok, seperti email biasa. tapi saya nyobanya pake gmail, gak tau deh kalo email yang lain hehehe.
Salut buat mas dimas tutorial yang bagus
lumayan....!!!!lumayan......
di SMTP settingnya gimana? SMTP = localhost, port = 25 gituh ajah?
terima kasih mas, penjelasan dari mas dengan bahasa yang sederhana berikut contohnya membuat saya lebih mudah mengerti. sekali lagi terima kasih, oh ya tambah semangat lagi mas nulisnya
wah, keren...
sangat membantu mas, kebetulan saya sedang cari2 tutorial tentang mail di PHP
saya tanya di luar topik ya mas ..
kalo mo kasih security number seperti di form GB ini ada plugin khusus ya mas?
makasih ilmunya :0
salam kenal
adam
www.duniadesain.multiply.com
Mas Dhimas saya coba di tempat hosting yang saya sewa tapi perintah mail() nggak jalan, OS tempat hosting saya pakai Debian GNU/Linux. Perintah yang saya coba seperti berikut:
Terimakasih bantuannya
dapet dari sini ya:
http://www.webcheatsheet.com/PHP/send_email_text_html_attachment.php
Hehhe....
kalau memang di dapat dr
http://www.webcheatsheet.com/PHP/send_email_text_html_attachment.php
thanks bgt ya mas da ditranslate..
good job...
cz msh byk orang indo yg bhs inggrisnya pas2an spt saya... dan sumber bljr yg pki bhs indo msh terbatas.
artikel berikutnya di tunggu ya...
thx
terimakasih ilmunya ...semoga Allah yang membalas ..amin ..
Mau Tanya : kalau ngirim email pake attachment tapi TANPA harus upload file gmn caranya..??
Kita asumsikan file nya itu SUDAH ada di server di direktori tertentu.
Mohon Pencerahannya.
mas mau tanya,!!untuk testnya apakah kita harus upload file tersebut dahulu tau cukup lewat apache...
makasih........
Thanks for all mas. Ini sangat membantu
maaf, coz masi newbie. di test di hostingan, terus berhasil di kirim. tapi di cek di email kok ga ada???
Wah .. keren neh artikelnya 
Thnx
keren.... N-nya 16
Ditunggu postingan yang selanjutnya... n makasih tu postingan membantu bgt.
Thanks for ur posting . . .
artikelnya bagus...............
tapi maaf, saya pemula. setting file php.ini nya sich apa aja supaya kita bisa mengirim emailnya......
artikelnya bagus...............
tapi maaf, saya pemula. setting file php.ini nya sich apa aja supaya kita bisa mengirim emailnya......
mas sungguh bahagianya bila setiap programmer seperti mas yang mau sedikit sharing ke temen2.
sebelumnya saya mohon maaf karena telah mengganggu kegiatan Anda.
Saya hanya inginmenanyakan, bagaimana cara kita membuat formulir yang bisa langsung dikirimkan ke email kita ?
seperti contoh yang aku buat di http://keunggulangypsum.webs.com.
Tapi isian formulir dari temen - temen gak ada yang masuk.
perlu diketahui...saya memasukan website menggunakan HTML.
terima kasih
ewedwfr
terima kasih banyak dengan membaca artikel anda banyak ilmu website yang saya peroleh.upload truss ya artikel-artikelnya
wah mas hebat uy... hehe makasih ya tutorial nya 
Rata-rata Programer pelit2 trs sombong bangeeeettt, alias belagu baru bisa segitu2 nya udah sombong banget!! nget nget!! - mudah2'an semua programer baik hati kaya mas ya....
kok masuknya ke junk email ???
gimana nih solusinya?
kok masuknya ke junk email ???
gimana nih solusinya?
kl kirim ke yahoo masuk ke spam. ini kan yg biasa ada di phpmanual.
mgkn ada yg bisa bikin supaya ga masuk k spam? (yahoo, kl hotmail sih engga)
Sangat informatif sekali, terima kasih atas infonya mas, slm kenal..
mas saya udah coba script yang mas bikin, tapi koq muncul error " Connected Failed", kenapa ya ?
mas saya udah coba script yang mas bikin, tapi koq muncul error Failed to Connect, kenapa yach ?
Mudah2an berhasil ya. Biar aq g d bilang GAPTEK ....
halo, mau nanya dong, mail send udh bisa tp gimana caranya masukin variabel ke message yg di kirim? misal :
nah bagaimana masukin $count ke message? pake echo?
thanks
gimana caranya yah masukin $count ke message?
thanks
keep it up!
Great thanks!
fuck
terima kasih sama tutorialnya, tapi gimana sich klo buat script untuk terima email dari orang lain ???
mohon dibalas...
ini email aku puttra31@gmail.com
kalau offline gak bisa terkirim ya mass?
Hebat mas, cuman kalau bisa buat tutor yang luarbiasa donk. misalnya saja nih, bagaimana membaca email masuk.???
kalau bisa di post ke forum atau e-mail q yah mas.
thanks
Thx, mas...ini sangat membantu saya.....
sukses selalu
thanks..berat bos, programnya bagus sya pakai hosting, masuk ke inbox, smoga amalnya diterima di sisi Alloh. maju terus dan berbagi ilmu
Mantep bos... sukses selalu
nuhun boz...
maaf mas saya mo tanya kalo script nya dah berhasil tetapi ga terkirim ke email kita kenapa ya....server pake ubuntu......trims
mas dimas, mo nanya nih... bagaimana contohnya script php untuk mengirim email dari database mysql? thanks
sy dah coba yg attach file brhasil, tp knp ya messagenya ga ada?
thx bgt nih tutorial..
bagaimana menerima email aktifasi pake $_GET kok ga bisa ya?
SMTP itu ap? ap itu sdh ada dikomputer kita ?
apa hrs kita download dulu? kalau pakai windows Vista ada SMTP-nya g?