Asumsikan kita memiliki situs WP kosong dan kami ingin mengatur pengaturan SMTP secara terprogram dalam plugin atau tema kami. Apa cara termudah untuk melakukannya tanpa mengubah file inti?
18
Pertama-tama, jika kita melihat implementasi wp_mail
fungsi, kita akan melihat bahwa fungsi ini menggunakan PHPMailer
kelas untuk mengirim email. Kita juga bisa melihat bahwa ada panggilan fungsi kode keras $phpmailer->IsMail();
, yang mengatur untuk menggunakan mail()
fungsi PHP . Itu berarti bahwa kita tidak dapat menggunakan pengaturan SMTP dengannya. Kita perlu memanggil isSMTP
fungsi PHPMailer
kelas. Dan juga kita perlu mengatur pengaturan SMTP kita juga.
Untuk mencapainya kita perlu mendapatkan akses ke $phpmailer
variabel. Dan di sini kita phpmailer_init
bertindak yang dipanggil sebelum mengirim email. Jadi kita dapat melakukan apa yang kita butuhkan dengan menulis penangan tindakan kita:
add_action( 'phpmailer_init', 'wpse8170_phpmailer_init' );
function wpse8170_phpmailer_init( PHPMailer $phpmailer ) {
$phpmailer->Host = 'your.smtp.server.here';
$phpmailer->Port = 25; // could be different
$phpmailer->Username = '[email protected]'; // if required
$phpmailer->Password = 'yourpassword'; // if required
$phpmailer->SMTPAuth = true; // if required
// $phpmailer->SMTPSecure = 'ssl'; // enable if required, 'tls' is another possible value
$phpmailer->IsSMTP();
}
Dan itu saja.
wp_mail
fungsi penulisan ulang .Tambahan untuk jawaban @EugeneManuilov.
Pengaturan SMTP
Secara default mereka hanya bisa mendapatkan - sebagai @EugeneManuilov sudah menjawab - diatur oleh selama callback melekat pada
do_action_ref_array()
. Sumber / inti .Pengecualian SMTP
Per default WordPress tidak memberikan Anda hasil debug. Alih-alih hanya mengembalikan
FALSE
jika terjadi kesalahan. Ini plugin kecil untuk memperbaikinya:Gudang
Plugin keduanya tersedia di GistHub ini pada GitHub , jadi pertimbangkan untuk mengecek plugin tersebut dari sana untuk mendapatkan pembaruan.
sumber
Jawaban lain untuk posting ini, sambil memberikan solusi yang berfungsi, jangan mengatasi masalah keamanan menyimpan kredensial SMTP Anda dalam file plugin atau functions.php. Dalam beberapa kasus mungkin OK, tetapi praktik terbaik akan menentukan penyimpanan informasi ini dengan cara yang lebih aman. Sebenarnya tidak ada alasan bagus untuk tidak mengikuti praktik terbaik ketika datang untuk melindungi kredensial Anda.
Beberapa menyarankan menyimpannya ke DB sebagai opsi, tetapi juga menyediakan masalah keamanan yang sama tergantung pada jumlah pengguna administratif yang dimiliki situs Anda dan apakah pengguna tersebut harus dapat melihat kredensial login ini. Ini juga alasan yang sama untuk tidak menggunakan plugin untuk ini.
Cara terbaik untuk melakukannya adalah dengan mendefinisikan konstanta untuk info phpmailer di file wp-config.php Anda. Ini sebenarnya telah dibahas sebagai fitur di Komponen Email , tetapi belum diterima sebagai perangkat tambahan aktual saat ini. Tapi Anda bisa melakukannya sendiri dengan menambahkan yang berikut ke wp-config.php:
Setelah ini didefinisikan dalam wp-config.php, mereka dapat digunakan di mana saja dengan menggunakan konstanta yang didefinisikan. Jadi Anda bisa menggunakannya di file plugin atau di functions.php Anda. (Khusus untuk OP, gunakan file plugin.)
Ada sedikit lebih detail tentang ini di posting ini dan intisari tentang github di sini .
sumber
.env
file gitignored sebagai gantinya. Tapi tak seorang pun yang menempatkan sesuatu yang sensitifwp-config.php
menggunakan kontrol versi, bagaimanapun ...