2017-04-12 47 views
0

我曾嘗試下面的腳本通過PHPMailer的梅勒錯誤:無法實例化郵件功能

<?php 
     $sendfrm_name = 'Balakumar B'; 
     $sendfrm_id = '[email protected]'; 

     $sendtoname = 'myself'; 
     $sendto = '[email protected]'; 

     //$cc = ''; 

     include("mail/PHPMailerAutoload.php"); 
     include("mail/class.PHPMailer.php"); 
     include("mail/class.smtp.php"); 

     $mail = new PHPMailer; 
     //$mail-> isSMTP(); 
     $mail-> Host = 'mail.mydomain.com'; //smtp.gmail.com 
     $mail->SMTPDebug = 2; 
     $mail-> SMTPAuth = true; 
     $mail->smtpConnect = array(
     'ssl' => array(
     'verify_peer' => false, 
     'verify_peer_name' => false, 
     'allow_self_signed' => true 
     ) 
     ); 
     $mail-> Username = '[email protected]'; 
     $mail-> Password = 'balakumar1`2345'; 
     $mail-> SMTPSecure = 'tls'; 
     $mail-> Port = 465; //587 
     $mail-> setFrom($sendfrm_id, $sendfrm_name); 
     $mail-> addAddress($sendto, $sendtoname); 
     $mail-> addReplyTo($sendto, $sendtoname); 
     //$mail->addCC($cc); 
     $mail->WordWrap = 50; 
     $mail->isHTML(true); 
     $mail->Subject = "Test Mail"; 
     $mail->Body = "Name: ".$sendfrm_name ."<br /> Email: ".$sendfrm_id; 
     if(!$mail->send()) 
     { 
      echo "Mailer Error: ".$mail->ErrorInfo; 
     } 
     else 
     { 
      echo ("<p>Message successfully sent!</p>"); 
       echo "E-mail: ", $sendto, "<br />"; 
       echo "Name: ", $sendtoname, "<br />"; 
       echo "Subject: Test Mail<br />"; 
       echo "Body: Body Of the Mail<br />"; 

     } 
?> 

發送郵件,但我得到的郵件錯誤:

Could not instantiate mail function.

如何解決這個問題?上面我已經提到我的郵件服務器(mail.mydomain.com)和端口465

回答

0

您正在使用的代碼是PHP的默認mail()功能。你需要使用SMTP。

您禁用了SMTP。

$mail = new PHPMailer; 
//$mail-> isSMTP(); <----------- Here it is disabled. 
$mail-> Host = 'mail.mydomain.com'; //smtp.gmail.com 
$mail->SMTPDebug = 2; 
$mail-> SMTPAuth = true; 

由於SMTP被禁用,它使用mail()函數。在您的機器中沒有正確配置。

只是取消註釋該行它應該工作。

全部代碼在這裏:

$mail = new PHPMailer; 
$mail-> isSMTP(); # SMTP is enabled now. 
$mail-> Host = 'mail.mydomain.com'; //smtp.gmail.com 
$mail->SMTPDebug = 2; 
$mail-> SMTPAuth = true; 

希望這有助於。

0

你錯在這裏做的事情整個負載,沒有什麼特殊的原因,我可以看到。

當你使用自動加載器,你不需要加載其他類 - 這是自動加載磁帶機是幹什麼用的。看起來您已將class.phpmailer.php的文件名更改爲class.PHPMailer.php,這是非標準的,並且在區分大小寫的文件系統時會遇到問題,並且在更新庫時可能會中斷。

如果您不撥打isSMTP(),您將不會使用SMTP,因此不會使用任何SMTP設置(默認情況下,它將使用PHP mail()功能)。

如果使用SMTPSecure = 'tls',你需要Port = 587,不是465

你爲什麼要禁用證書驗證?你應該只是出於非常具體的原因這樣做,而不僅僅是作爲一個「使其工作」的隨機措施。它代表了一種安全風險,所以除非你絕對必須這樣做,否則你就不會這樣做,而且你知道確切的原因 - 如果你不知道,就不要這樣做。

沒有必要致電WordWrap - 它也表明你已經基於你的代碼在一箇舊的例子,並可能運行舊版本的PHPMailer,所以get the latest

你爲什麼要設置並回復地址是一樣的嗎?

相關問題