Kemajuan teknologi – begitu juga dunia setiap hari. Tetapi beberapa hal tetap selamanya. Seperti mengirim email dengan PHP. Anda mungkin skeptis dan berpikir bahkan di tahun 2022? . W3Techs melaporkan bahwa, per Januari 2022, “PHP digunakan oleh 78 orang. 1% dari semua situs web yang bahasa pemrograman sisi servernya kami ketahui. ”
Karena itu, mari kita lihat tutorial ini yang akan membantu Anda mengirim email dari PHP hari ini
Kirim email dari PHP. tiga hal penting yang perlu Anda ketahui segera
Pertama, ada fungsi built-in PHP mail() dan cukup sederhana
Kedua, meskipun fungsi surat bawaan PHP () sangat sederhana, ia menyediakan fungsionalitas terbatas untuk mengirim email. Anda tidak akan dapat menambahkan lampiran ke email Anda, dan membuat template HTML yang indah dengan gambar tersemat juga akan menjadi tugas yang rumit.
Tiga, fungsi surat PHP () mengirim email dari situs web Anda yang dapat menyebabkan masalah pengiriman karena masalah keamanan seperti kecurigaan spam dan daftar hitam. PHP mail() juga biasanya tidak mengizinkan Anda mengirim email menggunakan server SMTP secara eksternal, dan tidak mendukung autentikasi SMTP
Opsi apa yang Anda miliki untuk mengirim email dalam PHP?
Ada empat yang populer
- Fungsi mail() PHP bawaan;
- PHPMailer;
- Mailer Symfony;
- Layanan pengiriman email pihak ketiga seperti Mailtrap, Sendgrid, Mailgun dll
Kami akan membahasnya selangkah demi selangkah
Fungsi surat bawaan PHP ()
Mail() adalah pembungkus di atas utilitas sendmail, jadi sendmail harus diinstal di sistem terlebih dahulu
Inilah yang dapat Anda lakukan dengan fungsi surat bawaan PHP ().
- buat pesan HTML/teks sederhana tanpa lampiran dan gambar
- mengirimkannya ke satu atau beberapa penerima
- sertakan tajuk tambahan ke pesan
- tambahkan parameter tambahan ke perintah `sendmail`
Perlu diingat bahwa ketika Anda mengirim email dengan mail(), Anda mungkin menemukan beberapa masalah keterkiriman yang parah. Pesan yang dikirim tidak akan mendapat manfaat dari penyiapan SPF dan DKIM di domain Anda, oleh karena itu, pesan kemungkinan besar akan diperlakukan sebagai spam oleh MTA (Mail Transfer Agent) penerima. Dengan demikian, pengiriman keseluruhan pesan email yang dikirim melalui surat PHP () tidak dijamin. Selain itu, Anda tidak akan menerima pesan pengembalian jika terjadi kegagalan pengiriman
Jika Anda masih berkomitmen pada fungsi email bawaan PHP() dan siap menerima tantangan, mari kita lihat sintaks dasar skrip PHP dan parameter utamanya.
Sintaks dan parameter
Sintaks surat PHP cukup sederhana
<?php mail($to,$subject,$message,[$headers],[$parameters]); ?>Ini menggunakan parameter berikut.
- “$to” = your message recipient(s). The email address format may be user@example.com or User . In general, it needs to comply with RFC 2822. It is mandatory.
- “$subjek” = subjek pesan Anda.
- “$message” = badan pesan Anda. Garis harus dipisahkan dengan LF (\n). Setiap baris tidak boleh melebihi 70 karakter
- “[$headers]” = yang wajib adalah header “dari”. itu harus ditentukan, jika tidak, Anda akan menerima pesan kesalahan seperti Peringatan. surat(). "sendmail_from" tidak disetel di php. ini atau kebiasaan “Dari. ” tajuk hilang
Header tambahan menunjukkan penerima lain atau salinan pesan Anda seperti CC atau BCC. Mereka bisa berupa array di mana key adalah nama header dan nilai adalah nilai header. Atau mereka bisa menjadi string. Dalam hal ini header harus dipisahkan dengan CRLF (\r\n)
- [$parameters] = untuk menentukan parameter tambahan yang ditentukan dalam pengaturan konfigurasi sendmail_path
Untuk detail lebih lanjut dan parameter tambahan, lihat dokumentasi PHP.
Mengirim email HTML menggunakan fungsi PHP mail()
Badan pesan dapat ditulis dalam HTML. Namun, seperti yang telah kami sebutkan di atas, itu harus sederhana.
Dalam fungsi email PHP(), bagian pesan HTML akan terlihat seperti ini
// Message $message = ' <html> <head> <title>Review Request Reminder</title> </head> <body> <p>Here are the cases requiring your review in December:</p> <table> <tr> <th>Case title</th><th>Category</th><th>Status</th><th>Due date</th> </tr> <tr> <td>Case 1</td><td>Development</td><td>pending</td><td>Dec-20</td> </tr> <tr> <td>Case 1</td><td>DevOps</td><td>pending</td><td>Dec-21</td> </tr> </table> </body> </html> ';_Penting untuk diingat bahwa untuk mengirim email HTML, Anda perlu mengatur header Content-type
$headers[] = 'Versi MIME. 1. 0’;
$headers[] = 'Tipe konten. teks/html;
Protokol Transmisi Sederhana (SMTP)
Di mana saya menentukan pengaturan SMTP? . Buka folder instalasi file PHP dan konfigurasikan di file php. file ini. Tetapi ini hanya akan berfungsi untuk solusi seperti localhost atau XAMPP karena seperti yang telah kami sebutkan, fungsi PHP mail() tidak mendukung autentikasi SMTP dan tidak mengizinkan pengiriman pesan melalui server eksternal.
Untuk mengirim email tanpa SMTP, Anda juga dapat merujuk ke layanan pihak ketiga seperti Mailtrap, SendGrid, atau Mailgun.
Mengirim banyak email
Untuk mengirim pesan Anda ke beberapa penerima, tentukan alamat email mereka di parameter “$to” = pisahkan dengan koma(-s).
Ini satu-satunya metode yang cocok dengan fungsi mail() asli. Jika Anda perlu mengirim pesan dalam jumlah besar dalam satu lingkaran, coba paket surat eksternal seperti Symfony Mailer. Atau solusi pihak ketiga
Bagaimana cara mengirim email menggunakan PHP melalui formulir kontak?
Ada juga beberapa cara untuk melakukan ini. Dan topik ini membutuhkan tutorial khusus. Baik Anda menjalankan situs web WordPress, atau memerlukan formulir kontak sederhana, lihat penyandian ini untuk formulir kontak PHP dengan Google reCaptcha.
Kami menjelaskan cara kerjanya secara detail, plus kami melalui banyak cara lain untuk membuat formulir kontak di PHP dalam panduan khusus kami tentang kode PHP untuk mengirim email dari formulir kontak. Dengarkan
<?php $errors = []; $errorMessage = ''; $successMessage = ''; $secret = 'your site key'; if (!empty($_POST)) { $name = $_POST['name']; $email = $_POST['email']; $message = $_POST['message']; $recaptchaResponse = $_POST['g-recaptcha-response']; $recaptchaUrl = "//www.google.com/recaptcha/api/siteverify?secret={$secret}&response={$recaptchaResponse}"; $verify = json_decode(file_get_contents($recaptchaUrl)); if (!$verify->success) { $errors[] = 'Recaptcha failed'; } if (empty($name)) { $errors[] = 'Name is empty'; } if (empty($email)) { $errors[] = 'Email is empty'; } else if (!filter_var($email, FILTER_VALIDATE_EMAIL)) { $errors[] = 'Email is invalid'; } if (empty($message)) { $errors[] = 'Message is empty'; } if (!empty($errors)) { $allErrors = join('<br/>', $errors); $errorMessage = "<p style='color: red;'>{$allErrors}</p>"; } else { $toEmail = 'example@example.com'; $emailSubject = 'New email from your contant form'; $headers = ['From' => $email, 'Reply-To' => $email, 'Content-type' => 'text/html; charset=iso-8859-1']; $bodyParagraphs = ["Name: {$name}", "Email: {$email}", "Message:", $message]; $body = join(PHP_EOL, $bodyParagraphs); if (mail($toEmail, $emailSubject, $body, $headers)) { $successMessage = "<p style='color: green;'>Thank you for contacting us :)</p>"; } else { $errorMessage = "<p style='color: red;'>Oops, something went wrong. Please try again later</p>"; } } } ?> <html> <body> <script src="//www.google.com/recaptcha/api.js"></script> <form action="/form.php" method="post" id="contact-form"> <h2>Contact us</h2> <?php echo((!empty($errorMessage)) ? $errorMessage : '') ?> <?php echo((!empty($successMessage)) ? $successMessage : '') ?> <p> <label>First Name:</label> <input name="name" type="text"/> </p> <p> <label>Email Address:</label> <input style="cursor: pointer;" name="email" type="text"/> </p> <p> <label>Message:</label> <textarea name="message"></textarea> </p> <p> <button class="g-recaptcha" type="submit" data-sitekey="your site key" data-callback='onRecaptchaSuccess' > Submit </button> </p> </form> <script> function onRecaptchaSuccess() { document.getElementById('contact-form').submit() } </script> </body> </html>Bagaimana cara mengirim email dengan PHPMailer?
PHPMailer adalah perpustakaan pengiriman email klasik dan paling populer untuk PHP. Itu layak mendapatkan artikel dan tutorial terpisah. Untuk mendapatkan ikhtisar mendetail tentang kode php di PHPMailer, baca panduan kami tentang cara mengirim email menggunakan PHPMailer
Apa yang dapat Anda lakukan dengan PHPMailer
- buat template HTML/multipart yang kompleks
- tambahkan lampiran dan gambar tersemat
- kirim email dari SMTP yang diautentikasi.
PHPMailer dilindungi dari serangan injeksi header dan secara otomatis memvalidasi email.
Sekarang kirim, katakanlah, konfirmasi pemesanan hotel dengan PHPMailer
Perhatian. untuk pesan email ini kami menggunakan potongan kode berikut
$mail->isSMTP(); $mail->Host = 'smtp.mailtrap.io'; $mail->SMTPAuth = true; $mail->Username = '1a2b3c4d5e6f7g'; $mail->Password = '1a2b3c4d5e6f7g'; $mail->SMTPSecure = 'tls'; $mail->Port = 528;_untuk menyetel server email, port SMTP, dan mengaktifkan autentikasi email.
paket surat PHP
Seperti yang telah kami sebutkan, fungsi PHP mail() asli tidak dirancang untuk membuat template email dan mengirim email dalam jumlah besar. Selain itu, ini menyebabkan beberapa masalah pengiriman yang serius. Jadi kami akan merekomendasikan menggunakan beberapa paket surat eksternal sebagai gantinya. Untuk tahun 2022, Pear. Mail dan Swift Mailer bukan barang lagi (karena sudah ketinggalan jaman sekarang), jadi pilihan yang jelas adalah Symfony Mailer.
Komponen Symfony Mailer & Mime membangun sistem yang solid untuk membuat dan mengirim email – lengkap dengan dukungan untuk pesan multi-bagian, integrasi Twig, inlining CSS, lampiran file, dll. Kami telah membuat panduan langkah demi langkah untuk Mengirim email di Symphony. mulai dari penginstalan hingga penyiapan transportasi, serta pembuatan dan pengiriman pesan. Jangan ragu untuk menggunakannya untuk keuntungan Anda. Jangan ragu untuk beralih ke arus 6. 1 dokumentasi versi untuk detail spesifik
Ingatlah bahwa di sini kami menunjukkan penggunaan mandiri dari paket ini, dan itu sudah terintegrasi ke dalam Symfony dan ke dalam framework Laravel. Jadi menggunakannya lebih sederhana saat bekerja dengan kerangka kerja sama sekali
<?php use Symfony\Component\Mailer\Mailer; use Symfony\Component\Mailer\Transport\Smtp\EsmtpTransport; use Symfony\Component\Mime\Email; require_once './vendor/autoload.php'; $transport = (new EsmtpTransport('smtp.mailtrap.io', 2525, false)) ->setUsername('155d3ee688e2b6') ->setPassword('1ca3b8a278cf32'); $mailer = new Mailer($transport); $email = (new Email()) ->from('hello@example.com') ->to('you@example.com') ->subject('Time for Symfony Mailer!') ->text('Sending emails is fun again!') ->html('<p>See Twig integration for better HTML integration!</p>'); $mailer->send($email);Mengirim email dalam PHP dengan layanan email pihak ketiga
Jika aplikasi Anda memerlukan pengiriman email otomatis dan analitik email, selalu lebih baik menggunakan layanan email pihak ketiga. Mengapa? . ini memberi Anda lebih banyak kendali atas infrastruktur email
Ada banyak layanan email pihak ketiga yang dapat Anda integrasikan dengan aplikasi Anda, seperti Sendgrid, Mailgun, dll. Tapi, Platform Pengiriman Email Mailtrap mungkin bisa dibilang yang Anda butuhkan
Menggunakan Mailtrap untuk mengirim email dengan PHP
Jika Anda mencari layanan pengiriman email yang andal dan bebas repot dengan PHP, Anda mungkin harus mempertimbangkan Pengiriman Email Mailtrap. Ini adalah layanan API/SMTP Email yang memungkinkan hingga 60 hari log email untuk pemecahan masalah yang lebih baik (menyimpan data keras Anda selama rentang waktu ini).
Dasbor dengan snapshot yang jelas tentang keadaan infrastruktur email Anda selalu tersedia untuk analitik.
Keuntungan lain Pengiriman Email Mailtrap adalah peringatan keterkiriman email kami yang tepat waktu yang memberi Anda kontrol lebih besar atas infrastruktur email dan otoritas domain Anda. Artinya, jika ada yang salah dengan keterkiriman Anda, Anda mendapatkan peringatan dengan tabel berkode warna plus wawasan tentang tempat untuk memeriksa masalah keterkiriman. Namun, Mailtrap mengirimi Anda laporan mingguan reguler tentang kinerja keterkiriman Anda agar Anda tetap mendapatkan informasi terbaru tentang kinerja pengiriman dan keterkiriman email Anda
Integrasi Mailtrap API untuk PHPBuka tab Sending Domains, pilih API/SMTP Integration, pilih API one, dan pilih PHP dari library
Anda akan menemukan kredensial yang diperlukan di sana, cukup salin dan tempel
Sekarang Anda dapat mulai mengirim
Coba Mengirim Email dalam PHP dengan Mailtrap Gratis
Konfigurasi server
Berikut adalah bagaimana konfigurasi server SMTP Anda untuk mulai mengirim dengan PHP akan terlihat seperti di Mailtrap untuk PHPMailer (buka kredensial SMTP di antarmuka Mailtrap, lalu cukup salin dan tempel)
Coba Mailtrap Gratis
Tiga masalah umum dengan email PHP
Kami hanya akan membahas masalah dasar di sini. Jika Anda memiliki masalah khusus yang tidak disebutkan di sini, lihat dokumentasi PHP, atau dukungan penyedia layanan pengiriman
Karakter yang ditampilkan salah
Katakanlah email tidak menampilkan karakter bahasa Jerman (umlaut) dengan benar
Kemudian, Anda perlu mengatur Content-Type dan Charset di header email
<?php $headers = 'Content-Type: text/plain; charset=utf-8' . "\r\n"; ?>_Sebagian besar, UTF-8 adalah pilihan terbaik Anda
Kemudian, tambahkan tajuk berikut juga
<?php $headers .= 'Content-Transfer-Encoding: base64' . "\r\n"; ?> _Sekarang, Anda dapat menggunakan UTF-8 dan Base64 untuk menyandikan baris subjek atau nama penerima dengan benar jika memerlukan karakter tertentu
// Message $message = ' <html> <head> <title>Review Request Reminder</title> </head> <body> <p>Here are the cases requiring your review in December:</p> <table> <tr> <th>Case title</th><th>Category</th><th>Status</th><th>Due date</th> </tr> <tr> <td>Case 1</td><td>Development</td><td>pending</td><td>Dec-20</td> </tr> <tr> <td>Case 1</td><td>DevOps</td><td>pending</td><td>Dec-21</td> </tr> </table> </body> </html> ';_0Dan jangan lupa untuk menyandikan pesan email Base64 juga
// Message $message = ' <html> <head> <title>Review Request Reminder</title> </head> <body> <p>Here are the cases requiring your review in December:</p> <table> <tr> <th>Case title</th><th>Category</th><th>Status</th><th>Due date</th> </tr> <tr> <td>Case 1</td><td>Development</td><td>pending</td><td>Dec-20</td> </tr> <tr> <td>Case 1</td><td>DevOps</td><td>pending</td><td>Dec-21</td> </tr> </table> </body> </html> ';_1Konfigurasi Windows dan Linux
Masalah mungkin muncul jika PHP Anda tidak dikonfigurasi dengan benar di php. file ini.
Untuk pengguna Windows, seharusnya terlihat seperti ini
// Message $message = ' <html> <head> <title>Review Request Reminder</title> </head> <body> <p>Here are the cases requiring your review in December:</p> <table> <tr> <th>Case title</th><th>Category</th><th>Status</th><th>Due date</th> </tr> <tr> <td>Case 1</td><td>Development</td><td>pending</td><td>Dec-20</td> </tr> <tr> <td>Case 1</td><td>DevOps</td><td>pending</td><td>Dec-21</td> </tr> </table> </body> </html> ';_2Pengguna Linux hanya perlu memberi tahu PHP lokasi aplikasi sendmail mereka. Jalur dan semua sakelar yang diinginkan harus ditentukan ke direktif sendmail_path
Konfigurasi untuk Linux akan terlihat seperti ini
// Message $message = ' <html> <head> <title>Review Request Reminder</title> </head> <body> <p>Here are the cases requiring your review in December:</p> <table> <tr> <th>Case title</th><th>Category</th><th>Status</th><th>Due date</th> </tr> <tr> <td>Case 1</td><td>Development</td><td>pending</td><td>Dec-20</td> </tr> <tr> <td>Case 1</td><td>DevOps</td><td>pending</td><td>Dec-21</td> </tr> </table> </body> </html> ';_3Fungsi surat PHP tidak mengirim email
Ini bisa sangat rumit. Namun, berikut adalah beberapa hal yang dapat Anda lakukan untuk mengatasinya
- Pastikan fungsi mail() Anda dipanggil dengan benar. (Jika salah satu dari tiga parameter tidak benar, pengiriman akan gagal);
- Periksa koneksi port (Jika Anda berbagi server hosting, port 25 dan 587 tetap diblokir secara default. Kemudian, Anda perlu menggunakan port 2525);
- Pastikan semua tajuk tersedia dan memiliki sintaks yang benar;
- Periksa apakah pengaturan MTA/server web Anda sudah benar. Anda dapat menggunakan Mailtrap untuk tujuan ini
Bagaimanapun, pemecahan masalah dan pengujian membutuhkan perhatian khusus dan analisis mendalam. Di sini, Anda dapat mengetahui lebih lanjut tentang cara menguji email yang dikirim dari PHP
Pertimbangan terakhir
Pada artikel ini, kami telah menjelaskan prinsip, sintaks, dan parameter pengiriman email PHP dasar. Kami juga meninjau cara utama mengirim email dengan PHP. fungsi surat bawaannya dan paket surat eksternal paling populer.
Namun, dalam banyak situasi, Anda dapat mempertimbangkan untuk menggunakan integrasi layanan email pihak ketiga seperti Mailtrap untuk menghemat waktu, uang, dan tenaga