Langsung ke isi website
Langsung ke navigasi

Artikel PHP/MySQL

  • Home
    • » PHP/MySQL
      • » Mengirim email dengan PHP, mulai dari email biasa, email HTML sampai email dengan attachment

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

Oct 26 2007

Ditulis oleh Dhimas Ronggobramantyo
Kategori: PHP/MySQL
Dibaca 12682 kali

Langsung lihat komentar

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.

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...

Simpan artikel ini ke: Digg it Del.icio.us Furl Reddit

Komentar [51]

1
Komentar Dikirim oleh arif pada 31 Oktober 2007 07:55:50 WIB

amalan yang baik mas dhimas. saya dukung. walaupun free tapi pahalanya mengantar hidup bahagia dunia akhirat.

2
Komentar Dikirim oleh arif pada 31 Oktober 2007 07:59:57 WIB

kok susah di save as .. ? mata sakit kalo baca di monitor.

3
Komentar Dikirim oleh deni pada 05 November 2007 09:33:44 WIB

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.

4
Komentar Dikirim oleh anton pada 06 November 2007 02:05:34 WIB

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.

5
Komentar Dikirim oleh Yudhi pada 06 November 2007 06:44:13 WIB

Salut buat mas dimas tutorial yang bagus

6
Komentar Dikirim oleh stres pada 15 November 2007 10:16:28 WIB

lumayan....!!!!lumayan......

7
Komentar Dikirim oleh sukma pada 28 Januari 2008 11:43:59 WIB

di SMTP settingnya gimana? SMTP = localhost, port = 25 gituh ajah?

8
Komentar Dikirim oleh aidil pada 11 Februari 2008 11:29:16 WIB

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 big grin

9
Komentar Dikirim oleh ade pada 13 Februari 2008 11:52:32 WIB

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

10
Komentar Dikirim oleh Jarot pada 28 Februari 2008 01:49:22 WIB

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

11
Komentar Dikirim oleh Hadoitz pada 06 April 2008 05:50:23 WIB

dapet dari sini ya:

http://www.webcheatsheet.com/PHP/send_email_text_html_attachment.php

Hehhe....

12
Komentar Dikirim oleh nihen pada 19 Mei 2008 05:20:26 WIB

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

13
Komentar Dikirim oleh ihwan pada 26 Mei 2008 01:33:40 WIB

terimakasih ilmunya ...semoga Allah yang membalas ..amin ..

14
Komentar Dikirim oleh Aku pada 20 Juni 2008 08:13:47 WIB

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.

15
Komentar Dikirim oleh Irfan pada 30 Juni 2008 11:22:07 WIB

mas mau tanya,!!untuk testnya apakah kita harus upload file tersebut dahulu tau cukup lewat apache...

makasih........

16
Komentar Dikirim oleh famasya pada 31 Agustus 2008 11:39:34 WIB

Thanks for all mas. Ini sangat membantu

17
Komentar Dikirim oleh hendra pada 12 September 2008 09:10:38 WIB

maaf, coz masi newbie. di test di hostingan, terus berhasil di kirim. tapi di cek di email kok ga ada???

18
Komentar Dikirim oleh ghprod pada 20 September 2008 02:07:12 WIB

Wah .. keren neh artikelnya smile

Thnx

19
Komentar Dikirim oleh e-cooL pada 17 Oktober 2008 05:05:50 WIB

keren.... N-nya 16
Ditunggu postingan yang selanjutnya... n makasih tu postingan membantu bgt.

20
Komentar Dikirim oleh HILAL pada 30 Oktober 2008 10:04:30 WIB

Thanks for ur posting . . .

21
Komentar Dikirim oleh wowo pada 21 November 2008 08:23:13 WIB

artikelnya bagus...............
tapi maaf, saya pemula. setting file php.ini nya sich apa aja supaya kita bisa mengirim emailnya......

22
Komentar Dikirim oleh wowo pada 21 November 2008 08:23:28 WIB

artikelnya bagus...............
tapi maaf, saya pemula. setting file php.ini nya sich apa aja supaya kita bisa mengirim emailnya......

23
Komentar Dikirim oleh deface pada 19 Desember 2008 04:25:47 WIB

mas sungguh bahagianya bila setiap programmer seperti mas yang mau sedikit sharing ke temen2.

24
Komentar Dikirim oleh rayhangypsum pada 23 Desember 2008 10:59:16 WIB

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

25
Komentar Dikirim oleh ugie pada 11 Januari 2009 08:36:02 WIB

ewedwfr

26
Komentar Dikirim oleh m.syahrir pada 14 Januari 2009 04:33:46 WIB

terima kasih banyak dengan membaca artikel anda banyak ilmu website yang saya peroleh.upload truss ya artikel-artikelnya

27
Komentar Dikirim oleh apuy pada 20 Januari 2009 12:24:31 WIB

wah mas hebat uy... hehe makasih ya tutorial nya smile
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.... smile

28
Komentar Dikirim oleh supri pada 06 Februari 2009 10:36:57 WIB

kok masuknya ke junk email ???

gimana nih solusinya?

29
Komentar Dikirim oleh supri pada 06 Februari 2009 10:37:09 WIB

kok masuknya ke junk email ???

gimana nih solusinya?

30
Komentar Dikirim oleh eri aja pada 18 Februari 2009 08:16:57 WIB

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)

31
Komentar Dikirim oleh arie pada 30 Maret 2009 01:41:40 WIB

Sangat informatif sekali, terima kasih atas infonya mas, slm kenal..

32
Komentar Dikirim oleh welly pada 07 April 2009 05:06:52 WIB

mas saya udah coba script yang mas bikin, tapi koq muncul error " Connected Failed", kenapa ya ?

33
Komentar Dikirim oleh welly pada 07 April 2009 05:09:05 WIB

mas saya udah coba script yang mas bikin, tapi koq muncul error Failed to Connect, kenapa yach ?

34
Komentar Dikirim oleh A.Lambangsih pada 11 April 2009 02:16:59 WIB

Mudah2an berhasil ya. Biar aq g d bilang GAPTEK ....

35
Komentar Dikirim oleh Herawan pada 21 April 2009 10:07:45 WIB

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

36
Komentar Dikirim oleh Herawan pada 21 April 2009 10:11:06 WIB



gimana caranya yah masukin $count ke message?

thanks

37
Komentar Dikirim oleh sam pada 23 April 2009 05:40:17 WIB

keep it up!

38
Komentar Dikirim oleh sam pada 23 April 2009 05:41:11 WIB

Great thanks!

39
Komentar Dikirim oleh awan pada 24 April 2009 11:42:46 WIB

fuck

40
Komentar Dikirim oleh Putra pada 29 April 2009 01:43:15 WIB

terima kasih sama tutorialnya, tapi gimana sich klo buat script untuk terima email dari orang lain ???
mohon dibalas...

ini email aku puttra31@gmail.com

41
Komentar Dikirim oleh bogel pada 29 Mei 2009 06:12:07 WIB

kalau offline gak bisa terkirim ya mass?

42
Komentar Dikirim oleh kentha2021@liamakassar.co.id pada 03 Juni 2009 04:32:52 WIB

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

43
Komentar Dikirim oleh guntur pada 19 Juni 2009 02:21:48 WIB

Thx, mas...ini sangat membantu saya.....
sukses selalu

44
Komentar Dikirim oleh dedy pada 02 Juli 2009 02:42:20 WIB

thanks..berat bos, programnya bagus sya pakai hosting, masuk ke inbox, smoga amalnya diterima di sisi Alloh. maju terus dan berbagi ilmu

45
Komentar Dikirim oleh hendra pada 03 Juli 2009 01:41:12 WIB

Mantep bos... sukses selalu

46
Komentar Dikirim oleh pard1 pada 16 Juli 2009 05:36:48 WIB

nuhun boz... smile

47
Komentar Dikirim oleh akikarijut pada 21 Juli 2009 04:31:09 WIB

maaf mas saya mo tanya kalo script nya dah berhasil tetapi ga terkirim ke email kita kenapa ya....server pake ubuntu......trims

48
Komentar Dikirim oleh siswoyo pada 01 September 2009 09:00:44 WIB

mas dimas, mo nanya nih... bagaimana contohnya script php untuk mengirim email dari database mysql? thanks

49
Komentar Dikirim oleh Andi Reza pada 02 September 2009 09:44:08 WIB

sy dah coba yg attach file brhasil, tp knp ya messagenya ga ada?

thx bgt nih tutorial..

50
Komentar Dikirim oleh ydur pada 30 Oktober 2009 02:40:16 WIB

bagaimana menerima email aktifasi pake $_GET kok ga bisa ya?

51
Komentar Dikirim oleh nopryani santoso pada 04 Desember 2009 02:35:24 WIB

SMTP itu ap? ap itu sdh ada dikomputer kita ?
apa hrs kita download dulu? kalau pakai windows Vista ada SMTP-nya g?

Kembali keatas

Kirim Komentar:



Security Number