Panduan mengirim email dari skrip

Di server hosting MWN berbasis Spanel, program email yang dipasang di server (spanel-sendmail dan spanel-smtpd) diperlengkapi dengan beberapa pengecekan tambahan yang lebih ketat, yang 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.

Karena itu ada beberapa hal yang perlu diperhatikan agar Anda berhasil mengirim email menggunakan skrip di server hosting, sbb:

Sendmail

  • Pastikan email mengandung header Subject
  • Pastikan email tidak mengandung header Subject dobel (lihat Contoh 1 di bawah)
  • Pastikan email tidak mengandung header From dobel (lihat Contoh 1 di bawah)
  • Pastikan Anda tidak memasukkan terlalu banyak recipient (To/Cc/Bcc), jika terlalu banyak silakan pecah menjadi beberapa email terpisah
  • Pastikan Anda tidak mengirim terlalu banyak dalam satu waktu, karena ada limit pengiriman (silakan baca artikel Pembatasan_pengiriman_email untuk lebih jelasnya)
  • Pastikan email Anda tidak berisi spam, karena jika ada terlalu banyak spam yang dikirim dari akun Anda, otomatis akun Anda akan diblokir tidak bisa mengirim email untuk sementara waktu.

Beberapa catatan lain:

  • domain pada header From harus sama dengan salah satu 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>, tidak bisa From: <sesuatulain@gmail.com> atau <sesuatulain@yahoo.com>. Hal ini untuk mencegah spoofing dan mempermudah pelacakan. Jika nilainya tidak sama, maka secara otomatis akan diubah menjadi <USERNAME@tokoku.com> oleh spanel-sendmail.
  • jika Return-Path diset, nilainya harus sama dengan header From. Hal ini untuk mencegah spoofing dan mempermudah pelacakan. Jika nilainya tidak sama, maka secara otomatis akan diubah menjadi sama oleh spanel-sendmail.
  • jika ada masalah/kegagalan pengiriman email lewat sendmail, coba lihatlah detil pesan kesalahannya di file log: direktori /u/USER/syslog/ (direktori /syslog di akun Anda) file sendmail-error.log dan sendmail-access.log.

SMTP

  • Gunakan otentikasi SMTP dengan username/password akun POP Anda saat mengirim menggunakan SMTP ke 127.0.0.1/IP server hosting. Jika tidak menggunakan password, maka Anda tidak dapat melakukan relaying (mengirim email ke luar/bukan domain sendiri)
  • Pastikan Anda tidak memasukkan terlalu banyak recipient (To/Cc/Bcc), jika terlalu banyak silakan pecah menjadi beberapa email terpisah
  • Pastikan email Anda tidak berisi spam, karena jika ada terlalu banyak spam yang dikirim dari akun Anda, otomatis akun Anda akan diblokir tidak bisa mengirim email untuk sementara waktu.

Contoh 1: header Subjek/From dobel

Salah satu contoh kasus yang sering dijumpai (terutama tahun 2006 saat ramai terjadi serangan injeksi terhadap fungsi mail() PHP) 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 2: Skrip yang dianjurkan

Misal nama domain e-mail Anda example.com:

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

Catatan: Jika Anda menggunakan layanan gmail.com atau yahoo.com, Anda dapat memasukkan alamat Anda di header Reply-To, bukan di header From (yang, berdasarkan restriksi, harus menggunakan alamat domain hosting sendiri).

Resita has written 705 articles