MWN Website
ContactHome

Gagal mengirim email di skrip

Untuk berdiskusi dengan sesama programer dan peminat PHP, bergabunglah dengan milis id-php, milis PHP Indonesia paling aktif sejak 2002. Untuk subscribe, kunjungi halaman web milis atau kirimkan email kosong ke id-php-subscribe@yahoogroups.com.

Jika Anda lebih suka forum diskusi berbasis web, kunjungi Forum PHP Masterweb.

Contents

Masalah

Skrip PHP/CGI (contoh: skrip guestbook, formmail, contact us) gagal mengirim email. Pesan error antara lain:

  • Mail must have Subject header
  • Mail must not have multiple Subject header
  • Mail must not have multiple From header
  • Too many recipients to popular spam target domain: ...
  • Sender domain (...) does not belong to user, please use your own domain
  • (jika menggunakan SMTP ke localhost) Error Relaying Denied
  • dll

Penjelasan/Solusi

Di server hosting MWN, program sendmail yang dipasang di server (spanel-sendmail) diperlengkapi dengan beberapa pengecekan tambahan yang lebih strict. Tujuannya adalah mencegah dan mengurangi dampak spamming yang dilakukan oleh spammer yang memanfaatkan/mengeksploit skrip PHP/CGI milik klien hosting. Seperti diketahui, spammer kini banyak memanfaatkan kelemahan pada skrip PHP, terutama fungsi mail()-nya, untuk mengirim spam dari server hosting orang lain. Dengan pengecekan-pengecekan tambahan pada spanel-sendmail, skrip PHP/CGI Anda lebih terlindungi dari penyalahgunaan. Strategi ini terbukti berhasil menekan jumlah spam keluar, terlihat dari sudah jarangnya server-server hosting terdaftar di DNS blacklist seperti spamhaus/spamcop/dll sejak instalasi spanel-sendmail Juli 2006 hingga artikel ini ditulis.

Beberapa pengecekan tambahan yang dilakukan oleh spanel-sendmail:

  • mail harus mengandung header Subject.
  • pembatasan jumlah To/Cc per email.
  • pembatasan jumlah To/Cc ke domain-domain yang biasa dipakai untuk target spammer, mis: hotmail.com, aol.com, dll.
  • pelarangan header Subject: atau From: yang dobel (indikasi ada penyuntikan/exploit terhadap fungsi mail() PHP).
  • quota pengiriman email by default hanya beberapa puluh per jam dan beberapa ratus per 24 jam (namun jika aplikasi web Anda membutuhkan lebih, mis untuk pengiriman mailing list via web atau skrip shell, Anda dapat meminta staf kami untuk meningkatkan limit ini).
  • by default From: harus sama dengan domain yang terdaftar pada account hosting (contoh: skrip formmail PHP Anda ada di http://www.tokoku.com/formmail.php, maka Anda harus menggunakan alamat From: <sesuatu@tokoku.com>.
  • dll.

Agar skrip Anda terhindar dari pengecekan spanel-sendmail, pastikan agar bentuk email yang Anda gunakan "proper" dan tidak melanggar aturan-aturan yang ada, seperti tertera di atas.

Multiple header

Salah satu contoh kasus yang sering dijumpai adalah skrip yang menghasilkan header Subject atau From yang dobel, sehingga ditolak oleh spanel-sendmail. Contohnya, potongan skrip PHP berikut:

$to = "b@b.com";
$body = "Contoh bodi";
$subject = "Contoh subjek";
$headers  = "From: <a@a.com>\n";
$headers .= "Subject: FORM MAIL: $subject\n";
mail($to, $subject, $body, $headers);

Perhatikan baris kelima pada kode di atas, yaitu:

$headers .= "Subject: FORM MAIL: $subject\n";

Sebetulnya fungsi mail() sudah menerima argumen kedua berupa subjek, dan PHP akan menghasilkan header email seperti ini:

To: <b@b.com>
Subject: Contoh subjek

Sehingga jika ditambah dengan $headers, akan menjadi:

To: <b@b.com>
Subject: Contoh subjek
From: <a@a.com>
Subject: FORM MAIL: Contoh subjek

Walhasil, header Subject-nya dobel. Dan ini diasumsikan mencurigakan oleh spanel-sendmail dan ada kemungkinan skrip tereksploit/terinjeksi, sehingga ditolak.

Solusinya, buang baris kelima. Tidak perlu lagi memasukkan header Subject di extra headers (argumen ke-4), karena header Subject sudah akan dihasilkan oleh fungsi mail() PHP melalui argumen ke-2 fungsi mail().

Contoh Skrip yang dianjurkan

Misal nama domain e-mail Anda bernard.or.id

<?
$headers = "From: support@bernard.or.id\r\n";
$headers .= "Reply-to: me@yahoo.com.sg\r\n";
$mail_sent = @mail("you@yahoo.com", "Judul TEST", "Isi TEST", $headers);
echo $mail_sent ? "Terkirim" : "
Gagal"; ?>

From mesti menggunakan domain sendiri, dalam hal ini bernard.or.id. Skrip ini akan bisa mengirim dengan filter 'Wajibkan From berasal hanya dari domain klien' aktif di SPANEL

Mengirim email menggunakan SMTP

Jika skrip Anda menggunakan SMTP ke localhost untuk mengirim email, maka Anda akan menjumpai pesan kesalahan ERR_RELAYING_DENIED. Terkecuali jika Anda menggunakan otentikasi (user+password) atau Anda mengirim ke domain lokal yang ada di server yang sama. Ini karena, demi alasan keamanan, fasilitas merelay ke email luar via SMTP lokal ditutup untuk meminimasi spam misalnya via eksploit terhadap PHPBB.

Mengirimkan email lewat SMTP ke localhost saat ini tidak dianjurkan dulu. Gunakanlah sendmail (yaitu: fungsi mail() jika di PHP, atau modul Email::Send::Sendmail di Perl misalnya, dll).

Penutup

Jika Anda masih mengalami masalah, jangan ragu untuk menghubungi technical support.

Untuk berdiskusi dengan sesama programer dan peminat PHP, bergabunglah dengan milis id-php, milis PHP Indonesia paling aktif sejak 2002. Untuk subscribe, kunjungi halaman web milis atau kirimkan email kosong ke id-php-subscribe@yahoogroups.com.

Jika Anda lebih suka forum diskusi berbasis web, kunjungi Forum PHP Masterweb.


Navigasi

Feedback

Artikel Popular

  • Panduan pengguna Spanel
  • Peraturan dan Persetujuan
  • Email
  • Upload files
  • Panduan pengguna Masterkey
  • Kontak MWN
  • PHP
  • Setting SMTP
  • Tentang shared hosting
  • URL sementara
  • Email Manager
  • selengkapnya...
  • Artikel Terbaru

  • Sistem afiliasi
  • Artikel:Tool lama dengan wajah baru
  • Artikel:Mengenal link di Unix
  • Menggunakan TortoiseSVN
  • Peringatan dari browser untuk situs SSL yang tidak memiliki sertifikat sendiri
  • T:Pesan kesalahan: CGI Execution Error
  • Promosi
  • Menyimpan gambar (atau file lain) di database versus di filesystem
  • T:Pesan error: sendmail: Can't send mail: Sender domain (XXX.com) does not belong to user, please use your own domain
  • Tip keamanan akun hosting Spanel
  • Pembatasan pengiriman email
  • selengkapnya...
  • Hak cipta © 2006-2008 PT Master Web Network Konten ditulis dan dikoleksi oleh staf MWN. Artikel-artikel pada situs knowledge base ini dapat dikutip dan disalin secara bebas, namun mohon menyebutkan sumber dengan URL http://kb.masterweb.net/ atau teks "Knowledge Base MWN". MWN tidak bertanggung jawab atas akurasi dan/atau kekinian konten. MWN tidak bertanggung jawab atas komentar-komentar yang dikirim pembaca. Dengan memposting komentar Anda memberi hak penuh pada MWN untuk menampilkan komentar tersebut di manapun dan kapanpun, dan untuk mengedit atau menghapus komentar tersebut dengan cara bagaimanapun dan/atau karena alasan apapun.