WordPress posta göndermeyi reddediyor, “… sunucunuz posta () işlevini devre dışı bırakmış olabilir”


9

Kısa bir süre önce web siteme bir yorum alanı ekledim ve e-posta bildirimi almaya çalıştım. Yeni yorumlar yapıldığında e-posta bildirimleri göndermek istemiyor gibi görünüyor.

PHP'nin e-posta gönderip gönderemeyeceğini görmek için şifreyi sıfırlamaya çalıştım (çünkü posta yoluyla yeni bir şifre alacaksınız) ve mesajı aldım:

E-posta gönderilemedi. Olası neden: sunucunuz posta () işlevini devre dışı bırakmış olabilir

Ayarlar -> Tartışma'daki onay kutularını işaretledim ve e-posta geçerli, bu yüzden bir ayar sorunu değil. Bir PHP dosyası oluşturmaya ve kullanarak göndermeye çalıştım mail()ve başarıyla gönderildi. Bu yüzden WordPress ile garip bir şey olmalı.

Herhangi bir fikir?


Yanıtlar:


9

Adım adım: İlk olarak hata mesajının göründüğü dosyayı bulun. Dosyalarda aramak için Notepad ++ ve CTRL+ Fkomutunu kullanıyorum. Hata mesajının yalnızca ilk birkaç sözcüğünü aramak iyi bir fikirdir, çünkü bazı hata mesajları farklı mesajlarla birleştirilir.

Hata mesajınız wp-login.phpsadece orada, kutsal şans olarak görünür . Şimdi bu hatanın neden ortaya çıkabileceğine bir göz atalım.

if ( $message && !wp_mail($user_email, $title, $message) )

İki koşul vardır. $messagedoğru olmalıdır (boş bir dize değil, yanlış değil, boş değil, vb.). Ve wp_mail()yanlış döndürmemelidir.

Yukarıdaki bir satırda bir filtre vardır $message = apply_filters('retrieve_password_message', $message, $key);, bu nedenle bir eklentinin (veya temanın) bu filtreyi kullanması ve doğru olmayan bir değer döndürmesi mümkündür (boş dize, yanlış, null vb.).

Ancak wp_mail()çalışıp çalışmadığını kontrol etmek çok daha kolaydır . Kendinize test postası göndermek için küçük bir eklenti yazın:

<?php
/**
 * Plugin Name: Stackexchange Testplugin
 * Plugin URI:  http://yoda.neun12.de
 * Description: Send me a test email
 * Version:     0.1
 * Author:      Ralf Albert
 * Author URI:  http://yoda.neun12.de
 * Text Domain:
 * Domain Path:
 * Network:
 * License:     GPLv3
 */

namespace WordPressStackexchange;

add_action( 'init', __NAMESPACE__ . '\plugin_init' );

function plugin_init(){
    $to      = 'your-email-adress@some-domain.tld';
    $subject = 'Testemail';
    $message = 'FooBarBaz Testmail is working';

    wp_mail( $to, $subject, $message );
}

(Bu PHP5.3 kodudur. PHP5.2 çalıştırıyorsanız, ad alanı öğelerini kaldırın)

Eklenti, etkinleştirmeden hemen sonra bir test postası göndermelidir. Değilse, bazı arka uç sayfalarını (ör. Gösterge tablosu) aramak bunu yapmalıdır.

Test postası gelmezse, muhtemelen bir sorununuz vardır wp_mail(). Hata ayıklamayı açın:

define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );
define( 'WP_DEBUG_DISPLAY', true );
@ini_set( 'display_errors',1 );

Bu kodu wp-config.phpkendinize ekleyin ve kendinize bir testmail göndermeyi deneyin. Şimdi bazı hata mesajları almalısınız ve bunlar da oturum açılmalıdır wp-content/debug.log(Eklentilerin ve / veya temaların neden olduğu daha fazla hata varsa hata ayıklama günlüğü çok büyüyebilir).

Bu noktada, wp_mail()başarısız olursa ve eğer öyleyse, neden iyi bilgiler aldınız . Doğru wp_mail()çalışırsanız ve testmail gelirse, başa dönün ve neden $messagedoğru olmadığını öğrenin .

İle ilgili sorunlarınız varsa wp_mail(), wp_mail()PHP mail()işlevini kullanmadığını unutmayın . WordPress bir PHP sınıfı ( PHPMailer ) kullanır. Belki sendmail yerine SMTP kullanmak için bir eklentiye ihtiyacınız var . Veya sorun başka bir yerde. Bilmiyoruz. Araştırmalısın.


Evet ben çekirdeğin içine kazma çalıştı ve aynı zamanda PHPMailer bana yol ve aslında yapar kullanımı php en mail(). En azından bazı durumlarda (bkz. Satır 732 in wp-includes/class-phpmailer.php. Ftp atm'ye erişimim yok ama önerilerinizi mümkün olan en kısa sürede deneyeceğim. Elbette bu beni bir yere götürmeli. Çok teşekkürler!
qwerty

Test ettim wp_mail()ve iyi çalışıyor gibi görünüyor, beklendiği gibi posta aldım . WP yine de yorum / şifre sıfırlama e-postalarını göndermezdi ve günlük dosyasında hiçbir şey alamadım (oluşturulmadı), bu yüzden bir SMTP posta eklentisi yüklemeyi denedim ve yeni bir e-posta hesabı oluşturdum Wordpress. Şimdi çalışıyor ama neden daha önce gönderemediğini hala anlamıyorum. Teşekkürler!
qwerty

Herhangi bir hata almıyorum ve posta bile almıyorum
baldraider

2

Bu, birçok şey olabileceği için süper can sıkıcı bir hata mesajıdır ve gerçek hatayı ortaya çıkarmaz (genellikle kodun diğer bölümlerinde susturulur).

Bu hata, wp_mail()işlev false değerini phpmailer->Send()döndürdüğünde görünür; bu da false değerini döndürür veya bir istisna oluşturursa gerçekleşebilir.


PHP mail()işlevinden uyarılar nasıl görüntülenir?

Bunlar normalde varsayılan olarak susturulur, ancak ne yazık ki WordPress onları asla yakalamaz. Basitçe kaldırmak göstermek için @gelen işaretler @mail(...de wp-includes/class-phpmailer.phpyer mailPassthru()işlevi:

if (ini_get('safe_mode') || !($this->UseSendmailOptions)) {
    $rt = @mail($to, $this->encodeHeader($this->secureHeader($subject)), $body, $header);
} else {
    $rt = @mail($to, $this->encodeHeader($this->secureHeader($subject)), $body, $header, $params);
}


Diğer olası nedenler nasıl avlanır:

  1. Dibine tek bir satır ekleyin wp_mail()içinde /wp-includes/pluggable.php:

    // Send!
    try {
        return $phpmailer->Send();
    } catch ( phpmailerException $e ) {
        //------------- This next line is the one to add -------------------
        if (WP_DEBUG) echo '<pre>' . esc_html(print_r($e, TRUE)) . '</pre>';
        return false;
    }
  2. İstisnanın nerede ortaya çıktığıyla ilgili tüm ayrıntıları dökecektir. Ne yazık ki bazen bu yararsız özel durum iletisini içerir: " Posta işlevi somutlaştırılamadı ". Evet teşekkürler WordPress, bu gerçekten yararlı.

  3. İstisnaya bakarak hatanın satır numarasını bulabilir ve umarım gerçek nedeni bulmak için koddan geriye doğru izleyebilirsiniz.

İyi şanslar. Umarım WordPress, gelecekte bir noktada e-posta hatası işlemeyi geliştirir.


2

Ben Amazon EC2 Ubuntu sunucusu ile aynı sorunu var. Sıfırlama şifre bağlantısı kullanırken sorun alıyorum ve ayrıca diğer bildirim e-posta çalışmıyor.

İşte benim için çalışan çözümler.Word-press, depolanan php mailler kullanılan sınıfa wp_mail()ihtiyaç duyan e-posta göndermek için kullanılan işlevi PHPMailerkullandı /usr/sbin/sendmail.

Önce php posta kontrol etmek için bu basit php işlevini kullanın

<?php
$to = "example@gmail.com";
$subject = "Test Email Function";
$txt = "Hello world!";
$headers = "From: webmaster@example.com" . "\r\n" .
"CC: xyz@example.com";

mail($to,$subject,$txt,$headers);
?>

Bu çalışmıyorsa o zaman php mailler yüklemeniz gerekir. Ubuntu sunucusuna php mail yüklemek için bu komutu kullanın.

sudo apt-get install sendmail

Sonra word-press e-posta işlevlerini kontrol edin.


bu cevap herkesin başka cevaplardan önce denemesi gereken cevap, bu yol
hatenine

1

Buradaki diğer harika yanıtlar yardımcı olmazsa şunu deneyin:

Aynı sorunla karşılaştım ve WordPress için önerilerin hiçbirinde bulamadığım hiçbir şey benim için çözülmedi.

Sonra posta işlevini devre dışı bırakmış PHP kurulum kendisi olup olmadığını araştırmaya başladı, ama hiçbiri de işe yaramadı. Her şey düzgün yapılandırılmış gibi görünüyordu.

Sunucumu SELinux (Security Enhanced Linux) kullanan CentOS 7'ye yükselttiğimde ve SELinux ile son birkaç hafta içinde öğrendiğim şey, bir şey işe yaramazsa, ancak her şey benziyor çalışıyor olmalı ... yani SELinux sessizce ve gizlice sizi arka planda engelliyor demektir.

Ve viyola.

SELinux kullanan bir işletim sistemi ve işletim sistemi kullanıyorsanız, root olarak şu komutu yürütün:

setsebool -P httpd_can_sendmail=1

Web sunucusunun doğal olarak e-posta göndermesini engelleyen bir güvenlik ayarı vardır. Bu anahtarı çevirip SELinux'a web sunucusunun e-posta göndermesinin uygun olduğunu söylediğinizde, her şey aniden çalışır.


0

Bugün bununla karşılaştım; benim durumumda, sunucunun anasistemleri e-posta adresinin aynı etki alanı adına sahip olması ve localhost'a işaret etmesi nedeniyle durum gerçekleşti. Mx kaydı farklı bir sunucuya işaret eder, ancak hosts dosyası DNS'yi geçersiz kılar ve WP e-postayı yerel olarak teslim etmeye çalışır. Alan adını hosts dosyasından kaldırmak ve sendmail'i yeniden başlatmak bu sorunu çözdü.


0

Bunun hala sizin için geçerli olup olmadığını bilmiyorum, ancak seçilen bir yanıt olmadığından, bir kez deneyeyim diye düşündüm.

Aslında, aynı problemle karşı karşıya kaldım çünkü openhift sunucum aniden bugün birden yol verdi ve posta göndermeyi bıraktı. Kod ve kodeks kazma, ben wp_mail () işlevi hakkında bilmek geldi ve nihayet google beni buraya götürdü ve nasıl geçersiz kılınmış gördüm.

@ Ralf912'nin cevabına dayanarak, betiği biraz değiştirdik, böylece kod wordpress varsayılan bir yerine posta göndermek için sendgrid.com'un web API'sini kullanıyor (varsayılan:

<?php

function sendgridmail($to, $subject, $message, $headers)
{
    $url = 'https://api.sendgrid.com/';
    //$user = 'yourUsername';
    //$pass = 'yourPassword';

    $params = array(
        'api_user'  => $user,
        'api_key'   => $pass,
        'to'        => $to,
        'subject'   => $subject,
        'html'      => '',
        'text'      => $message,
        'from'      => 'abc@hotmail.com',
      );


    $request =  $url.'api/mail.send.json';

    // Generate curl request
    $session = curl_init($request);
    // Tell curl to use HTTP POST
    curl_setopt ($session, CURLOPT_POST, true);
    // Tell curl that this is the body of the POST
    curl_setopt ($session, CURLOPT_POSTFIELDS, $params);
    // Tell curl not to return headers, but do return the response
    curl_setopt($session, CURLOPT_HEADER, false);
    curl_setopt($session, CURLOPT_RETURNTRANSFER, true);

    // obtain response
    $response = curl_exec($session);
    curl_close($session);

    // print everything out
    //print_r($response);
}

//only for testing:
/*$to      = 'abc@yahoo.com';
$subject = 'Testemail';
$message = 'It works!!';
echo 'To is: ' + $to;
#wp_mail( $to, $subject, $message, array() );
sendgridmail($to, $subject, $message, $headers);
print_r('Just sent!');*/

if (!function_exists('wp_mail')) {
    function wp_mail($to, $subject, $message, $headers = '', $attachments = array())
    {
        // use the PHP GnuPG library here to send mail.
        sendgridmail($to, $subject, $message, $headers);
    }
}

function plugin_init()
{
   /* $to      = 'xyz@yahoo.com';
    $subject = 'Testemail';
    $message = 'It works Live!';
    //echo 'To is: ' + $to;
    wp_mail( $to, $subject, $message, array() );
    //print_r('Just sent!');*/
}

Ve işe yaradı!


0

Aynı hatayı aldım, her iki işlev de (posta ve wp_mail) çalıştı, ancak yine de bu can sıkıcı hatayla karşılaştım. Düzeltme çok kolaydı, ama sebebini bulmak birkaç saatimi aldı. Bu yüzden, sizinle aynı olabilecek (veya olmayabilir) sorunla ilgili çözümümü burada paylaşacağım.

Mail () işlevini denedim ve çalıştı, ancak test ettiğinizde mail () işlevinde 'parametreler' olarak adlandırılan son parametreyi belirtmezsiniz. Ve WP bunu kullanıyor.

@mail("example@exmaple.com",$title,$body,$headers,"-fexample@exmaple.com");

Bu nedenle, temel olarak, "-f" işaretli bu parametre ("-fexample@exmaple.com") mail () işlevinin "güvenilir e-postalar" listesinde listelenen "example@exmaple.com" e-posta adresinin kontrol edilip edilmediğini kontrol eder.

Bu durumda, false döndürür, bu da wp_mail () işlevinin false değerini döndürür ve hata iletisine yol açar.

Bu nedenle, çözüm, barındırıcıdan bunu sizin için yapmasını istemektir veya cPanel kullanıyorsanız, bu adres için e-posta hesabı eklemeniz yeterlidir ve otomatik olarak "güvenilir listeye" eklenir.


0

Komut Dosyaları aracılığıyla Posta Göndermek için -Kayıtlı E-postaları Yönetin (Wordpress)

  1. Cpanel hesabınıza giriş yapın.
  2. E-posta Bölümü'ne gidin> ardından Kayıtlı E-posta Kimlikleri'ni tıklayın.
  3. ardından (wordpress@alanadiniz.com) veya wordpress'inizin barındırıldığı yere ekleyin. yani (wordpress@blog.alanadiniz.com.tr). sonra gönderin, barındırma sağlayıcınıza bağlı olarak 15 dakika ila 1 saat bekleyin etkinleştirmek için birkaç dakika sürer, o zaman işe yarayacak.

0

Yaşları boyunca bu hatayı aldım ve işe yaramayan birçok çözüm denedim. AWS EC2'ye özel bir Wordpress yüklemem var. Öncelikle AWS SES postanızın destek yoluyla etkinleştirildiğinden emin olun, SES ve EC2'de aynı (veya kapalı) bölgede olmalıdır. Posta almak / göndermek için e-posta olarak Google suite (gsuite) kullandım.

Test e-postasının AWS SES ve Gsuite olarak gönderildiğinden emin olun.

Wordpress eklentisini WP Mail SMTP'yi yükleyin, "Diğer SMTP" seçeneğini kullanın, AWS SES'den SMTP kimlik bilgilerinizi alın, burada sıkıştım.

Şifreleme için "SSL" onay kutusunu etkinleştirmeniz gerekir, bu bağlantı noktasını benim için 465 olarak değiştirir. Sonunda e-posta testim Worpdress'ten başarıyla gönderildi.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.