Banyak pengembang PHP perlu mengirim email dari kode mereka. Satu-satunya fungsi PHP yang mendukung hal ini secara langsung adalah mail()
. Namun, itu tidak memberikan bantuan apa pun untuk memanfaatkan fitur-fitur populer seperti enkripsi, otentikasi, pesan HTML, dan lampiran.
Memformat email dengan benar ternyata sangat sulit. Ada banyak sekali standar yang tumpang tindih (dan saling bertentangan), yang mengharuskan kepatuhan ketat terhadap aturan pemformatan dan pengkodean yang sangat rumit – sebagian besar kode yang Anda temukan online yang menggunakan fungsi mail()
secara langsung jelas-jelas salah, bahkan tidak aman!
Fungsi PHP mail()
biasanya dikirim melalui server email lokal, biasanya digawangi oleh biner sendmail
pada platform Linux, BSD, dan macOS, namun, Windows biasanya tidak menyertakan server email lokal; Klien SMTP terintegrasi PHPMailer memungkinkan pengiriman email di semua platform tanpa memerlukan server email lokal. Namun perlu diketahui, bahwa fungsi mail()
harus dihindari jika memungkinkan; lebih cepat dan aman menggunakan SMTP ke localhost.
Harap jangan tergoda untuk melakukannya sendiri – jika Anda tidak menggunakan PHPMailer, ada banyak perpustakaan bagus lainnya yang harus Anda lihat sebelum membuat perpustakaan Anda sendiri. Coba SwiftMailer , Laminas/Mail, ZetaComponents, dll.
Perangkat lunak ini didistribusikan di bawah lisensi LGPL 2.1, bersama dengan Komitmen Kerjasama GPL. Silakan baca LISENSI untuk informasi tentang ketersediaan dan distribusi perangkat lunak.
PHPMailer tersedia di Packagist (menggunakan versi semantik), dan instalasi melalui Composer adalah cara yang disarankan untuk menginstal PHPMailer. Cukup tambahkan baris ini ke file composer.json
Anda:
"phpmailer/phpmailer" : " ^6.9.2 "
atau lari
composer require phpmailer/phpmailer
Perhatikan bahwa folder vendor
dan skrip vendor/autoload.php
dibuat oleh Composer; mereka bukan bagian dari PHPMailer.
Jika Anda ingin menggunakan autentikasi XOAUTH2, Anda juga perlu menambahkan ketergantungan pada league/oauth2-client
dan paket adaptor layanan yang sesuai di composer.json
Anda, atau lihat pembungkus SendOauth2 @decomplexity, terutama jika Anda menggunakan layanan Microsoft.
Alternatifnya, jika Anda tidak menggunakan Composer, Anda dapat mengunduh PHPMailer sebagai file zip, (perhatikan bahwa dokumen dan contoh tidak disertakan dalam file zip), lalu salin konten folder PHPMailer ke salah satu direktori include_path
yang ditentukan dalam konfigurasi PHP Anda dan memuat setiap file kelas secara manual:
<?php
use PHPMailer PHPMailer PHPMailer ;
use PHPMailer PHPMailer Exception ;
require ' path/to/PHPMailer/src/Exception.php ' ;
require ' path/to/PHPMailer/src/PHPMailer.php ' ;
require ' path/to/PHPMailer/src/SMTP.php ' ;
Jika Anda tidak menggunakan kelas SMTP
secara eksplisit (mungkin tidak), Anda tidak memerlukan baris use
untuk kelas SMTP. Bahkan jika Anda tidak menggunakan pengecualian, Anda masih perlu memuat kelas Exception
seperti yang digunakan secara internal.
PHPMailer 5.2 (yang kompatibel dengan PHP 5.0 — 7.0) tidak lagi didukung, bahkan untuk pembaruan keamanan. Anda akan menemukan versi terbaru 5.2 di cabang 5.2-stable. Jika Anda menggunakan PHP 5.5 atau lebih baru (yang seharusnya), beralihlah ke rilis 6.x.
Perubahan terbesarnya adalah file sumber kini ada di folder src/
, dan PHPMailer kini mendeklarasikan namespace PHPMailerPHPMailer
. Ini memiliki beberapa efek penting – baca panduan peningkatan untuk lebih jelasnya.
Meskipun menginstal seluruh paket secara manual atau dengan Komposer itu sederhana, nyaman, dan dapat diandalkan, Anda mungkin ingin menyertakan hanya file penting dalam proyek Anda. Setidaknya Anda memerlukan src/PHPMailer.php. Jika Anda menggunakan SMTP, Anda memerlukan src/SMTP.php, dan jika Anda menggunakan POP sebelum SMTP ( sangat tidak mungkin!), Anda memerlukan src/POP3.php. Anda dapat melewati folder bahasa jika Anda tidak menampilkan kesalahan kepada pengguna dan dapat mengatasi kesalahan yang hanya berbahasa Inggris. Jika Anda menggunakan XOAUTH2, Anda memerlukan src/OAuth.php serta dependensi Komposer untuk layanan yang ingin Anda autentikasi. Sungguh, menggunakan Komposer jauh lebih mudah!
<?php
//Import PHPMailer classes into the global namespace
//These must be at the top of your script, not inside a function
use PHPMailer PHPMailer PHPMailer ;
use PHPMailer PHPMailer SMTP ;
use PHPMailer PHPMailer Exception ;
//Load Composer's autoloader
require ' vendor/autoload.php ' ;
//Create an instance; passing `true` enables exceptions
$ mail = new PHPMailer ( true );
try {
//Server settings
$ mail -> SMTPDebug = SMTP :: DEBUG_SERVER ; //Enable verbose debug output
$ mail -> isSMTP (); //Send using SMTP
$ mail -> Host = ' smtp.example.com ' ; //Set the SMTP server to send through
$ mail -> SMTPAuth = true ; //Enable SMTP authentication
$ mail -> Username = ' [email protected] ' ; //SMTP username
$ mail -> Password = ' secret ' ; //SMTP password
$ mail -> SMTPSecure = PHPMailer:: ENCRYPTION_SMTPS ; //Enable implicit TLS encryption
$ mail -> Port = 465 ; //TCP port to connect to; use 587 if you have set `SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS`
//Recipients
$ mail -> setFrom ( ' [email protected] ' , ' Mailer ' );
$ mail -> addAddress ( ' [email protected] ' , ' Joe User ' ); //Add a recipient
$ mail -> addAddress ( ' [email protected] ' ); //Name is optional
$ mail -> addReplyTo ( ' [email protected] ' , ' Information ' );
$ mail -> addCC ( ' [email protected] ' );
$ mail -> addBCC ( ' [email protected] ' );
//Attachments
$ mail -> addAttachment ( ' /var/tmp/file.tar.gz ' ); //Add attachments
$ mail -> addAttachment ( ' /tmp/image.jpg ' , ' new.jpg ' ); //Optional name
//Content
$ mail -> isHTML ( true ); //Set email format to HTML
$ mail -> Subject = ' Here is the subject ' ;
$ mail -> Body = ' This is the HTML message body <b>in bold!</b> ' ;
$ mail -> AltBody = ' This is the body in plain text for non-HTML mail clients ' ;
$ mail -> send ();
echo ' Message has been sent ' ;
} catch ( Exception $ e ) {
echo " Message could not be sent. Mailer Error: { $ mail -> ErrorInfo }" ;
}
Anda akan menemukan banyak hal untuk dimainkan di folder contoh, yang mencakup banyak skenario umum termasuk pengiriman melalui Gmail, membuat formulir kontak, mengirim ke milis, dan banyak lagi.
Jika Anda menggunakan kembali instance tersebut (misalnya saat mengirim ke milis), Anda mungkin perlu menghapus daftar penerima untuk menghindari pengiriman pesan duplikat. Lihat contoh milis untuk panduan lebih lanjut.
Itu saja. Anda sekarang harus siap menggunakan PHPMailer!
PHPMailer defaultnya adalah bahasa Inggris, tetapi di folder bahasa, Anda akan menemukan banyak terjemahan untuk pesan kesalahan PHPMailer yang mungkin Anda temui. Nama filenya berisi kode bahasa ISO 639-1 untuk terjemahannya, misalnya fr
untuk bahasa Prancis. Untuk menentukan bahasa, Anda perlu memberi tahu PHPMailer bahasa mana yang akan digunakan, seperti ini:
//To load the French version
$ mail -> setLanguage ( ' fr ' , ' /optional/path/to/language/directory/ ' );
Kami menerima koreksi dan bahasa baru – jika Anda mencari koreksi, jalankan skrip Language/TranslationCompletenessTest.php di folder tes dan itu akan menampilkan terjemahan yang hilang.
Mulailah membaca di wiki GitHub. Jika Anda mengalami masalah, buka panduan pemecahan masalah karena sering diperbarui.
Contoh cara menggunakan PHPMailer untuk skenario umum dapat ditemukan di folder contoh. Jika Anda mencari titik awal yang baik, kami sarankan Anda memulai dengan contoh Gmail.
Untuk mengurangi jejak kode yang diterapkan PHPMailer, contoh tidak disertakan jika Anda memuat PHPMailer melalui Composer atau melalui unduhan file zip GitHub, jadi Anda harus mengkloning repositori git atau menggunakan tautan di atas untuk mendapatkan contoh secara langsung.
Dokumentasi API lengkap yang dihasilkan tersedia online.
Anda dapat membuat dokumentasi tingkat API lengkap dengan menjalankan phpdoc
di folder tingkat atas, dan dokumentasi akan muncul di folder docs
, meskipun Anda harus menginstal PHPDocumentor. Anda mungkin menemukan pengujian unit sebagai referensi yang bagus tentang cara melakukan berbagai operasi seperti enkripsi.
Jika dokumentasi tidak mencakup apa yang Anda butuhkan, cari di banyak pertanyaan di Stack Overflow, dan sebelum Anda mengajukan pertanyaan tentang "Kesalahan SMTP: Tidak dapat terhubung ke host SMTP.", bacalah panduan pemecahan masalah.
Pengujian PHPMailer menggunakan PHPUnit 9, dengan polyfill agar pengujian gaya 9 dapat dijalankan pada versi PHPUnit dan PHP yang lebih lama.
Jika hal ini tidak berhasil, adakah yang dapat Anda lakukan untuk membantu?
Harap ungkapkan setiap kerentanan yang ditemukan secara bertanggung jawab – laporkan masalah keamanan kepada pengelola secara pribadi.
Lihat KEAMANAN dan saran keamanan PHPMailer di GitHub.
Silakan kirimkan laporan bug, saran, dan permintaan penarikan ke pelacak masalah GitHub.
Kami secara khusus tertarik untuk memperbaiki kasus-kasus edge, memperluas cakupan pengujian, dan memperbarui terjemahan.
Jika Anda menemukan kesalahan dalam dokumen, atau ingin menambahkan sesuatu, lanjutkan dan ubah wiki – siapa pun dapat mengeditnya.
Jika Anda memiliki klon git sebelum pindah ke organisasi GitHub PHPMailer, Anda harus memperbarui URL jarak jauh yang merujuk ke lokasi GitHub lama dengan perintah seperti ini dari dalam klon Anda:
git remote set-url upstream https://github.com/PHPMailer/PHPMailer.git
Mohon jangan gunakan proyek SourceForge atau Google Code lagi; mereka sudah usang dan tidak lagi dipelihara.
Waktu dan sumber daya pengembangan untuk PHPMailer disediakan oleh Smartmessages.net, satu-satunya sistem pemasaran email yang mengutamakan privasi di dunia.
Sumbangan sangat kami harapkan, baik dalam bentuk bir, kaos oblong, atau uang tunai dingin. Sponsor melalui GitHub adalah cara sederhana dan nyaman untuk mengucapkan "terima kasih" kepada pengelola dan kontributor PHPMailer – cukup klik tombol "Sponsor" di halaman proyek. Jika perusahaan Anda menggunakan PHPMailer, pertimbangkan untuk mengambil bagian dalam program dukungan perusahaan Tidelift.
Tersedia sebagai bagian dari Langganan Tidelift.
Pengelola PHPMailer dan ribuan paket lainnya bekerja sama dengan Tidelift untuk memberikan dukungan komersial dan pemeliharaan untuk paket sumber terbuka yang Anda gunakan untuk membangun aplikasi Anda. Menghemat waktu, mengurangi risiko, dan meningkatkan kesehatan kode, sekaligus membayar pengelola paket yang sama persis dengan yang Anda gunakan. Pelajari lebih lanjut.
Lihat log perubahan.
coolbru
di SF) dan Andy Prevost ( codeworxtech
) mengambil alih proyek ini pada tahun 2004.