2010-07-06 26 views

cevap

9

php'de posta göndermek tek adımlı bir işlem değildir. mail() true/false döndürür, ancak true döndürse bile, iletinin gönderileceği anlamına gelmez. Tüm posta(), (php.ini içinde ayarlamış olduğunuz her ne olursa olsun, sendmail'i kullanarak veya (php.ini içinde ayarladığınız her şeyi) kuyruğa iletiyi ekler. İletinin php'de gönderilip gönderilmediğini kontrol etmenin güvenilir bir yolu yoktur. Posta sunucusu kayıtlarına bakmanız gerekecek.

+0

Oh, tamam. Cevap için teşekkürler! – Rohan

0

mail() işleviyle ilişkili bir hata mesajı yoktur. E-postanın teslimat için kabul edilip edilmediği konusunda yalnızca bir true veya false döndürülür. Nihayetinde teslim edilip edilmeyeceği değil, temel olarak alanın mevcut olup olmadığı ve adresin geçerli biçimde biçimlendirilmiş bir e-posta adresi olup olmadığı.

-2

Diğerlerinin söylediği gibi, posta göndermek için hata izlemesi yoktur, postayı giden sıraya eklemenin boolean sonucunu döndürür. Gerçek başarı başarısızlığını izlemek istiyorsanız, SMTP'yi Swift Mailer, Zend_Mail veya phpmailer gibi bir posta kitaplığı ile kullanmayı deneyin.

2

Aynı arabirime sahip, ancak sorun olduğunda bir PEAR_Error döndüren PEAR mailer'u kullanabilirsiniz.

-1

Bunu deneyin. Herhangi bir dosyada herhangi bir hata varsa, e-posta kimliğimde hata postası aldım. Iki dosya index.php ve checkErrorEmail.php oluşturun ve bunları sunucunuza yükledi. Ardından tarayıcınızla index.php'u yükleyin.

Index.php

<?php 
    include('checkErrorEmail.php'); 
    include('dereporting.php'); 
    $temp; 
    echo 'hi '.$temp; 
?> 

checkErrorEmail.php

<?php 
    // Destinations 
    define("ADMIN_EMAIL", "[email protected]"); 
    //define("LOG_FILE", "/my/home/errors.log"); 

    // Destination types 
    define("DEST_EMAIL", "1"); 
    //define("DEST_LOGFILE", "3"); 

    /* Examples */ 

    // Send an e-mail to the administrator 
    //error_log("Fix me!", DEST_EMAIL, ADMIN_EMAIL); 

    // Write the error to our log file 
    //error_log("Error", DEST_LOGFILE, LOG_FILE); 

    /** 
    * my_error_handler($errno, $errstr, $errfile, $errline) 
    * 
    * Author(s): thanosb, ddonahue 
    * Date: May 11, 2008 
    * 
    * custom error handler 
    * 
    * Parameters: 
    * $errno: Error level 
    * $errstr: Error message 
    * $errfile: File in which the error was raised 
    * $errline: Line at which the error occurred 
    */ 

    function my_error_handler($errno, $errstr, $errfile, $errline) 
    { 
    echo "<br><br><br><br>errno ".$errno.",<br>errstr ".$errstr.",<br>errfile ".$errfile.",<br>errline ".$errline; 
     if($errno) 
     { 
       error_log("Error: $errstr \n error on line $errline in file $errfile \n", DEST_EMAIL, ADMIN_EMAIL); 
     } 
    /*switch ($errno) { 
     case E_USER_ERROR: 
     // Send an e-mail to the administrator 
     error_log("Error: $errstr \n Fatal error on line $errline in file $errfile \n", DEST_EMAIL, ADMIN_EMAIL); 

     // Write the error to our log file 
     //error_log("Error: $errstr \n Fatal error on line $errline in file $errfile \n", DEST_LOGFILE, LOG_FILE); 
     break; 

     case E_USER_WARNING: 
     // Write the error to our log file 
     //error_log("Warning: $errstr \n in $errfile on line $errline \n", DEST_LOGFILE, LOG_FILE); 
     break; 

     case E_USER_NOTICE: 
     // Write the error to our log file 
     // error_log("Notice: $errstr \n in $errfile on line $errline \n", DEST_LOGFILE, LOG_FILE); 
     break; 

     default: 
     // Write the error to our log file 
     //error_log("Unknown error [#$errno]: $errstr \n in $errfile on line $errline \n", DEST_LOGFILE, LOG_FILE); 
     break; 
    }*/ 

    // Don't execute PHP's internal error handler 
    return TRUE; 
    } 


    // Use set_error_handler() to tell PHP to use our method 
    $old_error_handler = set_error_handler("my_error_handler"); 


?> 
+2

ne içerir ('dereporting.php') ;? – Jon

72

kullanabilirsiniz error_get_last() zaman mail() döner false.

[tür] => 2
[mesaj] => posta(): print_r(error_get_last()) ile

$success = mail('[email protected]', 'My Subject', $message); 
if (!$success) { 
    $errorMessage = error_get_last()['message']; 
} 

, böyle bir şey olsun "xxxx" port 25 de Mailserver bağlanamadı \ www \ X \ X.php
[line] => 2

+7

Bu hata komutunu ilk duyduğum şey, ve bunu bilmeden, beklediğim şey, waaaay için çok uzun. Teşekkürler! –

+0

Bunu yalnızca SMTP (Windows?) Kullanıyorsanız çalışır. Linux'ta "sendmail" komutunu kullanırsanız, "mail()" fonksiyonu sadece o komutun çıkış durumunu döndürür: https://github.com/php/php-src/blob/PHP-5.6.25/ext/standard /mail.c#L404 Hata iletisini afaik almanın güvenilir bir yolu yok. Bu betikle denedim: https://gist.github.com/njam/a34ecd9ef195c37c8354ab58f7bfcc9b – njam

0
:
[file] => C) 'nu ("SMTP" doğrulayıp "smtp_port" php.ini içinde ayarlama veya ini_set kullanmak
$e=error_get_last(); 
if($e['message']!==''){ 
    // An error function 
} 

error_get_last(); - son hata oluştu

+6

Kodunuzla gelecekte başkalarına yardımcı olabilecek bazı açıklamalar eklemelisiniz. [cevap] – cosmoonot

+2

Önceki yorum ile katılıyorum. Lütfen bir açıklama eklemek için cevabınızı düzenleyin. Yalnızca kod yanıtları gelecekteki SO okuyucularını eğitmek için çok az şey yapar. Cevabınız düşük kaliteli olduğu için denetleme kuyruğunda. – mickmackusa

İlgili konular