Baru-baru ini saya menerapkan area komentar di situs web saya dan mencoba agar pemberitahuan email berfungsi. Tampaknya tidak ingin mengirim pemberitahuan email ketika komentar baru dibuat.
Hanya untuk melihat apakah PHP dapat mengirim email, saya mencoba mengatur ulang kata sandi (karena Anda akan mendapatkan kata sandi baru melalui surat), dan saya mendapat pesan:
Email tidak bisa dikirim. Kemungkinan alasannya: host Anda mungkin telah menonaktifkan fungsi mail ()
Saya telah mencentang kotak centang di Pengaturan -> Diskusi, dan email itu valid, jadi itu bukan masalah pengaturan. Saya mencoba membuat file PHP dan mengirim menggunakan mail()
, dan berhasil dikirim. Jadi pasti ada sesuatu yang aneh dengan WordPress.
Ada ide?
Jawaban:
Langkah demi langkah: Pertama cari file tempat pesan kesalahan muncul. Saya menggunakan Notepad ++ dan perintah CTRL+ Funtuk mencari file. Adalah ide yang baik untuk mencari hanya beberapa kata pertama dari pesan kesalahan, karena beberapa pesan kesalahan digabungkan dari pesan yang berbeda.
Pesan kesalahan Anda muncul
wp-login.php
dan semoga beruntung, hanya di sana. Jadi mari kita lihat mengapa kesalahan ini bisa terjadi.Ada dua syarat.
$message
harus benar (bukan string kosong, tidak salah, bukan nol, dll). Danwp_mail()
seharusnya tidak kembali salah.Satu baris di atas, ada filter
$message = apply_filters('retrieve_password_message', $message, $key);
, jadi ada kemungkinan bahwa plugin (atau tema) menggunakan filter ini dan mengembalikan nilai yang tidak benar (string kosong, false, null, dll.).Tetapi lebih mudah untuk memeriksa apakah
wp_mail()
berfungsi atau tidak. Tulis sebuah plugin kecil untuk mengirim surat uji kepada diri Anda sendiri:(Ini adalah kode PHP5.3. Jika Anda menjalankan PHP5.2, hapus hal-hal namespace)
Plugin harus mengirim testmail segera setelah aktivasi. Jika tidak, memanggil beberapa halaman backend (mis. Dasbor) harus melakukannya.
Jika testmail tidak tiba, maka Anda mungkin memiliki masalah dengan
wp_mail()
. Jadi aktifkan debugging:Masukkan kode ini ke Anda
wp-config.php
dan coba ulangi sendiri sebuah testmail. Sekarang Anda harus mendapatkan beberapa pesan kesalahan dan mereka juga harus loginwp-content/debug.log
(Log debug dapat tumbuh sangat besar jika ada lebih banyak kesalahan yang disebabkan oleh plugin dan / atau tema).Pada titik ini, Anda mendapat informasi bagus jika
wp_mail()
gagal dan jika demikian, mengapa. Jikawp_mail()
berfungsi dengan benar dan testmail tiba, kembali ke atas dan cari tahu mengapa$message
itu tidak benar.Jika Anda memiliki masalah dengan
wp_mail()
, jadi ingatlah bahwawp_mail()
tidak menggunakanmail()
fungsi PHP . WordPress menggunakan kelas PHP ( PHPMailer ). Mungkin Anda hanya perlu plugin untuk menggunakan SMTP daripada sendmail. Atau masalahnya terletak di tempat lain. Kami tidak tahu. Anda harus menyelidikinya.sumber
mail()
. Setidaknya dalam beberapa kasus (lihat baris 732 masukwp-includes/class-phpmailer.php
. Saya tidak memiliki akses ke ftp atm tetapi saya akan mencoba saran Anda sesegera mungkin. Tentunya ini harus membawa saya ke suatu tempat. Terima kasih banyak!wp_mail()
dan tampaknya berfungsi dengan baik, saya menerima surat seperti yang diharapkan. WP masih tidak akan mengirim email pengaturan ulang kata sandi /, dan saya tidak mendapatkan apa pun dalam file log (itu tidak dibuat), jadi saya mencoba menginstal plugin surat SMTP dan mengatur akun email baru untuk Wordpress. Ini berfungsi sekarang tetapi saya masih tidak mengerti mengapa itu tidak dapat dikirim sebelumnya. Terima kasih!Ini adalah pesan kesalahan yang sangat menjengkelkan karena bisa jadi banyak hal, dan itu tidak mengungkapkan kesalahan yang sebenarnya (yang sering dibungkam di bagian lain dari kode).
Kesalahan ini muncul ketika
wp_mail()
fungsi mengembalikan false, yang pada gilirannya bisa terjadi jikaphpmailer->Send()
mengembalikan false atau memunculkan pengecualian.Cara menampilkan peringatan dari
mail()
fungsi PHPIni biasanya dibungkam secara default, tetapi sayangnya WordPress tidak pernah menangkapnya. Untuk menunjukkan kepada mereka, cukup menghapus
@
tanda-tanda dari@mail(...
diwp-includes/class-phpmailer.php
dalammailPassthru()
fungsi:Cara memburu penyebab lain yang mungkin:
Tambahkan satu baris ke bagian bawah
wp_mail()
di/wp-includes/pluggable.php
:Ini akan membuang detail lengkap dari tempat pengecualian itu diajukan. Sayangnya terkadang termasuk pesan pengecualian yang tidak membantu ini: " Tidak dapat membuat fungsi email ". Ya terima kasih WordPress, itu sangat membantu.
Dengan melihat pengecualian, Anda dapat menemukan nomor baris kesalahan, dan mudah-mudahan dapat melacaknya kembali melalui kode untuk menemukan penyebab sebenarnya.
Semoga berhasil. Semoga WordPress meningkatkan penanganan kesalahan email di beberapa titik di masa depan.
sumber
Saya memiliki masalah yang sama dengan server Ubuntu di Amazon EC2.I mendapatkan masalah saat menggunakan tautan reset kata sandi dan juga email pemberitahuan lainnya tidak berfungsi.
Jadi di sini adalah solusi yang bekerja untuk saya. Tekan-tekan
wp_mail()
fungsi yang digunakan untuk mengirim email yang membutuhkanPHPMailer
kelas yang digunakan menyimpan mailer php/usr/sbin/sendmail
.Gunakan fungsi php sederhana ini terlebih dahulu untuk memeriksa email php
Jika ini tidak berhasil maka Anda perlu menginstal mailer php. Gunakan perintah ini untuk menginstal email php di server Ubuntu.
Kemudian periksa fungsi email kata-pers.
sumber
Jika jawaban hebat lainnya di sini tidak membantu, coba ini:
Saya mengalami masalah yang sama dan tidak ada yang dapat saya temukan di salah satu saran untuk WordPress yang menyelesaikannya untuk saya.
Kemudian saya mulai menyelidiki apakah instalasi PHP itu sendiri yang telah menonaktifkan fungsi mail, tetapi tidak ada yang berhasil. Semuanya tampak seperti sudah dikonfigurasikan dengan benar.
Semua masalah ini dimulai untuk saya setelah saya memutakhirkan server saya ke CentOS 7 yang menggunakan SELinux (Security Enhanced Linux) dan apa yang saya pelajari dalam beberapa minggu terakhir dengan SELinux adalah bahwa jika sesuatu tidak berfungsi, tetapi semuanya tampak seperti itu harus berfungsi ... itu berarti SELinux diam-diam dan diam-diam memblokir Anda di latar belakang.
Dan biola.
Jika Anda menjalankan dan OS yang menggunakan SELinux, jalankan saja perintah berikut sebagai root:
setsebool -P httpd_can_sendmail=1
Ada pengaturan keamanan yang secara inheren mencegah server web mengirim email. Ketika Anda membalik sakelar itu dan memberi tahu SELinux bahwa server web boleh mengirim email, semuanya tiba-tiba berfungsi.
sumber
Saya mengalami ini hari ini; dalam kasus saya situasinya terjadi karena file host server memiliki nama domain yang sama dengan alamat email, menunjuk ke localhost. Catatan mx menunjuk ke server yang berbeda, tetapi file host menimpa DNS dan WP mencoba mengirimkan email secara lokal. Menghapus domain dari file host dan memulai kembali sendmail menyelesaikan masalah ini.
sumber
Saya tidak tahu apakah ini masih relevan untuk Anda atau tidak, tetapi karena tidak ada jawaban yang dipilih, saya pikir izinkan saya mencobanya sekali.
Sebenarnya, saya telah menghadapi masalah yang sama persis sejak tuan rumah openshift saya tiba-tiba memberi jalan hari ini dan berhenti mengirim surat. Menggali kode dan kodeks, saya jadi tahu tentang fungsi wp_mail () dan akhirnya google membawa saya ke sini dan saya melihat bagaimana itu bisa diganti.
Berdasarkan jawaban @ Ralf912, saya sedikit memodifikasi skrip sehingga kodenya menggunakan api web sendgrid.com untuk mengirim email alih-alih wordpress default one (yang saya kira:
Dan itu berhasil!
sumber
Saya memiliki kesalahan yang sama, kedua fungsi (mail dan wp_mail) berfungsi, tetapi saya masih memiliki kesalahan yang mengganggu ini. Cara mengatasinya sangat mudah, tetapi saya butuh beberapa jam untuk menemukan alasannya. Jadi saya akan berbagi di sini solusi saya pada masalah yang mungkin (atau mungkin tidak) sama dengan Anda.
Saya mencoba fungsi mail () dan berhasil, tetapi ketika Anda mengujinya, Anda tidak menentukan parameter terakhir yang disebut fungsi 'parameter' di mail (). Dan WP menggunakannya.
Jadi, pada dasarnya, parameter ini ("[email protected]") dengan flag "-f" membuat fungsi mail () memeriksa apakah alamat email "[email protected]" tercantum dalam daftar "email tepercaya".
Jadi jika tidak, ia mengembalikan false, yang membuat wp_mail () mengembalikan false dan mengarah ke pesan kesalahan.
Jadi, solusinya adalah meminta hoster untuk melakukan ini untuk Anda, atau jika Anda menggunakan cPanel, cukup tambahkan akun email untuk alamat ini dan secara otomatis akan menambahkannya ke "daftar tepercaya".
sumber
itu disebut -Kelola Email-Id Terdaftar Untuk Mengirim Email melalui Script yaitu. (Wordpress)
sumber
Saya memiliki kesalahan ini sejak lama dan mencoba banyak solusi yang tidak berhasil. Saya memiliki instalasi Wordpress khusus di AWS EC2. Pertama memastikan email AWS SES Anda diaktifkan melalui dukungan, mereka harus berada di wilayah yang sama (atau dekat) di SES dan EC2. Saya menggunakan Google suite (gsuite) untuk email untuk menerima / mengirim email.
Pastikan email pengujian dikirim dalam AWS SES dan Gsuite.
Instal plugin Wordpress WP Mail SMTP, gunakan opsi "Other SMTP", ambil kredensial SMTP Anda dari AWS SES, di sinilah saya terjebak.
Anda harus mengaktifkan kotak centang "SSL" untuk Enkripsi, ini mengubah port menjadi 465 untuk saya. Akhirnya tes email saya berhasil dikirim dari Worpdress.
sumber