2013-10-02 28 views
1

我有這個奇怪的錯誤從PHPMailer的來了(版本:5.1):PHPMailer的錯誤無法在Windows Server實例的郵件功能

exception 'phpmailerException' with message 'Could not instantiate mail function.' in C:\Inetpub\vhosts\mydomain\httpdocs\myscript\protected\components\phpmailer\class.phpmailer.php:687 Stack trace: #0 C:\Inetpub\vhosts\mydomain\httpdocs\myscript\protected\components\phpmailer\class.phpmailer.php(578): PHPMailer->MailSend('Date: Wed, 2 Oc...', '--b1_3c2b33630c...') 

FYI:我試圖發送一個壓縮文件,大約4.5MB大的。但在此之前,該腳本會生成大約50個PDF並添加它們/創建zip文件,然後將其附加到phpmailer對象併發送。 (我沒有使用SMTP)。

我知道這已經被問過..但我已經找到了解決方案都是基於涉及增加對後綴的限制Linux服務器上。

但是我怎麼解決這個問題,如果該網站是在Windows機器上託管?我有plesk控制面板。

在此先感謝您的幫助。

[編輯]

下面的代碼片段只是櫃面它可以幫助:

foreach($vars as $PDFKEY) 
      { 

       if($PDFKEY != null) 
       { 
        if((int)$PDFKEY > 0) 
        { 

          $filename = $this->CreatePDF($PDFKEY); 

          $emailarr[$PDFKEY['email']][] = $filename; 
          $emailIdarr[$company->email][] = $PDFKEY['email']; 
        } 
       } 
      } 
      sleep(20); 
      //print_r($emailarr);die; 

      $emailTemplate = Yii::app()->params['EmailTemplate']; 

      $body    = file_get_contents($emailTemplate); 

      $body    = eregi_replace("[\]",'',$body); 
      try 
      { 
       $mail    = new PHPMailer(true); 
       if(strtolower(Yii::app()->params['SMTPStatus']) == "enabled") 
       { 
        $mail->IsSMTP(); // telling the class to use SMTP 
        $mail->SMTPKeepAlive = true; // SMTP connection will not close after each email sent 
        $mail->Host   = Yii::app()->params['SMTPHost']; // sets the SMTP server 
        $mail->Port   = Yii::app()->params['SMTPPort']; // set the SMTP port for the GMAIL server 
        if(strtolower(Yii::app()->params['SMTPAuthStatus']) == "enabled") 
        { 
         $mail->SMTPAuth  = true;     // enable SMTP authentication 
         $mail->Username  = Yii::app()->params['SMTPUsername']; // SMTP account username 
         $mail->Password  = Yii::app()->params['SMTPPassword']; // SMTP account password 
        } 
       } 
       $mail->SetFrom(Yii::app()->params['EmailSendFrom']); 
       $mail->AddReplyTo(Yii::app()->params['EmailSendFrom']); 

       $mail->Subject  = Yii::app()->params['EmailSubject'];; 
       $savePath = Yii::app()->params['PdfSavePath']; 
       $mail->AddBCC(trim(Yii::app()->params['EmailBCC'])); 
       $b = true; 
       $toEmailAdded = array(); 
       $ccEmailAdded = array(); 
       $companyCCEmailAdded = array(); 
       foreach($emailarr as $email=>$attachmentArr) 
       { 
        try 
        { 
         if(!in_array($email, $toEmailAdded)) 
         { 
          $toEmailAdded[] = $email; 
          $mail->AddAddress($email); 
         } 
         if(isset($_POST['emailcc']) && strlen($_POST['emailcc']) > 0) 
         { 
          if(!in_array($_POST['emailcc'], $ccEmailAdded)) 
          { 
           $ccEmailAdded[] = trim($_POST['emailcc']); 
           $mail->AddCC(trim($_POST['emailcc'])); 
          } 
         } 

         $companycc = trim($emailNamearr[$email]['companyccemail']); 
         if(isset($companycc) && strlen($companycc) > 0) 
         { 
          foreach(explode(',',trim($companycc)) as $cc) 
          { 
           if(!in_array($cc, $companyCCEmailAdded)) 
           { 
            $companyCCEmailAdded[] = trim($cc); 
            $mail->AddCC(trim($cc)); 
           } 
          } 
         } 
         if(count($attachmentArr) > 1) 
         { 
          $zipFileName = "Archieve-".uniqid().".zip"; 
          if($this->create_zip($attachmentArr, $zipFileName, true)) { 
           $mail->AddAttachment($SavePath.$zipFileName); // attachment 
           sleep(20); 
          } 

         } else 
         { 
          foreach($attachmentArr as $attachment) 
          { 
           $mail->AddAttachment($SavePath.$attachment); // attachment 
          } 
         } 
         $msgbody = str_replace("<%EMAILSENTDATE%>", date('d/m/Y', strtotime($emailNamearr[$email]['serviced'])) , $body); 
         if(isset($emailNamearr[$email])) 
         { 
          $msgbody = str_replace("<%CLIENTNAME%>", "for ".$emailNamearr[$email]['company'] , $msgbody); 
         } 
         else $msgbody = str_replace("<%CLIENTNAME%>", "" , $msgbody); 
         $mail->MsgHTML($msgbody); 
         try 
         { 
          $mail->Send(); 
         }catch(Exception $e) 
         { 
          echo "<br/><br/>$e<br/><br/>".$e;die; 
         } 
         //echo "$email <br/>"; 
         $mail->ClearAddresses(); 
         $mail->ClearAttachments(); 
         $mail->ClearCCs(); 


        } catch (Exception $e) { 
         echo $e->getMessage(); //Boring error messages from anything else! 
         $b = false; 
        } 
       } 
      } 
+0

BTW:在PLESK:服務器範圍的郵件設置 - >最大郵件大小是9000千字節。當我試圖發送4.5MB附件時,我認爲這已經足夠了。 –

+0

可以分享相關的代碼嗎? – Jinandra

+0

嗨@sanki,感謝您的評論。我沒有明確的原因發佈確切的代碼。但這是它的要義.. [看我的回覆帖子] –

回答

1

撕裂了相當多的頭髮在我的頭上後,我覺得我有點理清問題。這是我做了(如果其他人也面臨同樣的問題)

在IIS->我的網站 - >錯誤pages->的選擇出於安全考慮,當地要求編輯功能設置默認情況下詳細的錯誤。 這扔了500錯誤,但實際的原因被隱藏。通過將其更改爲「詳細錯誤」,顯示的實際錯誤是: 「FastCGI進程超出」我相信默認情況下它是30秒。

所以即使我max_execution_limit = 300的過程中漸漸停止/失敗,因爲的名爲php-cgi.exe的執行時間限制。 解決此問題: 編輯%windir%\ system32 \ inetsrv \ config \ applicationHost.config文件以延長php-cgi.exe執行時間限制。設置activityTimeout:3600和requestTimeout:3600 ..我設置3600安全的一面,因爲我可以。

然後應用程序運行得很好。

希望這有助於挽救頭髮頭上的人。

0

我想:

Yii::app()->params['SMTPStatus'] is not 'enabled' 

所以PHPMailer的使用PHP自身的郵件功能巫婆,我覺得,未配置在您的php.ini中

H OPE這有助於

+0

嗨@Claude Janz,謝謝你的回覆。但「Yii :: app() - > params ['SMTPStatus']」...與PhpMailer無關,而且它已啓用。在將它發佈到堆棧溢出以避免任何類型的愚蠢之前,我已經三重檢查了它。 –

相關問題