2015-07-19 97 views
0

當本地主機上使用的PHPMailer(Windows的XAMPP),電子郵件發送確定,但劇本永遠掛起 - 沒有刷新。的PHPMailer發送電子郵件,然後掛起(在Windows,XAMPP)

PHP自己的mail()函數工作正常,而PHPMailer的工作正常使用sendmail,所以這只是SMTP模式的問題。

奇怪的是,與Xdebug的步進通過時,

I get "Fatal error: Maximum execution time of 0 seconds exceeded" in the console when I reach __destruct()

雖然我可以一步通過這一點,這讓我刷新並在瀏覽器中反映的錯誤。而且,一旦我這樣做了,我可以刷新瀏覽器,並且新電子郵件將正常發送,沒有錯誤,也不會掛起。退出調試模式並返回掛起行爲。

注:在php.ini: max_execution_time=60 max_input_time=60

require_once "PHPMailerAutoload.php"; 
$to = "[email protected]"; 
$to_name = "Me"; 
$from_name = "fromName"; 
$from = "[email protected]"; 
$subject = "This is a test email from php " . strftime("%T", time()); 
$message = "phpmailer using smtp"; 

$mail = new PHPMailer(); 
$mail->IsSMTP(); 
$mail->SMTPDebug = 2; 
$mail->Host  = "# censored #"; 
$mail->Port  = 587; 
$mail->SMTPAuth = true; 
$mail->SMTPSecure = 'tls'; 
$mail->Hostname = "myhost"; 
$mail->Username = '# censored #'; 
$mail->Password = '# censored #!'; 

$mail->FromName = $from_name; 
$mail->From  = $from; 
$mail->addAddress($to, $to_name); 
$mail->Subject = $subject; 
$mail->Body  = $message; 
$result = $mail->send(); 
echo $result ? 'Sent' : 'Error: ' . $mail->ErrorInfo; 

回答

0

與PHPMailer的開發本地主機服務器上的工作時,我有過類似的問題。經過大量研究,我克服這個問題的方式是手動要求PHPMailer類和SMTP類,例如:

require('../ vendor/phpmailer/phpmailer/class.phpmailer.php'); require(「../ vendor/phpmailer/phpmailer/class.smtp.php」);

作爲使用PHPMailerAutoload.php沒有完全要求所有類所需要,並投擲例外。您是否有現場服務器進行測試,因爲我發現了許多答案,例如「在正常運行和完全部署時工作正常」,但這是一個有風險的選擇。

我設法需要手動將文件克服「最大執行時間」。但是,在使用窗口和XAMPP的情況下,懸掛是間歇性的,有時它會立即發送,有時可能需要一段時間才能處理腳本。不知道這是否會奏效,但值得一試。

而且這個我研究了「class.smtp.php」文件中的PHPMailer,發現這個:

$this->edebug('Connection: opened', self::DEBUG_CONNECTION); 
    // SMTP server can take longer to respond, give longer timeout for first read 
    // Windows does not have support for this timeout function 
    if (substr(PHP_OS, 0, 3) != 'WIN') { 
     $max = ini_get('max_execution_time'); 
     // Don't bother if unlimited 
     if ($max != 0 && $timeout > $max) { 
      @set_time_limit($timeout); 
     } 
     stream_set_timeout($this->smtp_conn, $timeout, 0); 
    } 

在評論這上面定義它指出:「Windows不支持超時功能」。也許從這種理解中可以幫助你消除可能性?

+0

我試過要求你說的類,沒有運氣。電子郵件總是立即發送,但腳本之後掛起,與之前一樣。此外,單步執行代碼時,我發現您發佈的代碼段被跳過,因爲它應該在Windows機器上。 – brotherhutch

相關問題