2014-03-07 29 views
0

我有一個郵件應用程序,每天通過cron作業發送大約5000封電子郵件(很多帳戶文件),並且在郵件發送給一個收件人時工作正常。 當我們激活BCC副本時,問題出現了,那麼應用程序開始發送直到980-1050郵件,並開始從smtp(太多收件人)收到4.5.3錯誤。如果我暫停工作並再次運行cron,那麼php進程會得到一個新的pid,並開始發送,直到達到相同的限制(980-1050郵件)。與Smtp的PHP通信

所以我的問題是:有沒有辦法重新生成php進程ID?

如果我有能力做到這一點,那麼應用程序將發送這些郵件沒有問題。

或者我錯過了一些後綴配置?

代碼的相關部分:

/** 
* _Send_SmtpData 
* Handles the SMTP negotiation for sending the email header and body. 
* 
* @param String $rcpt_to The 'receipt to' address to send the email to. This is a bare email address only. 
* @param String $to The 'to' address to send this to. This can contain a name/email address in the standard format ("Name" <[email protected]>) 
* @param String $subject The subject of the email to send. 
* @param String $body The body of the email to send. 
* @param String $headers The headers of the email to send. 
**/ 

function _Send_SmtpData(&$rcpt_to, &$to, &$subject, &$body, &$headers) 
{ 

    $data = "DATA"; 

    $this->DebugMemUsage('Trying to put ' . $data); 

    if (!$this->_Put_Smtp_Connection($data)) { 
     $this->ErrorCode = 12; 
     $this->ErrorCodeSMTPEnhanced = false; 
     $this->Error = GetLang('UnableToSendEmail_Data'); 
     $this->_Close_Smtp_Connection(); 

     $this->DebugMemUsage('Got error ' . $this->Error); 

     return array(false, $this->Error); 
    } 

    $response = $this->_get_response(); 

    $this->DebugMemUsage('Got response ' . $response); 

    $responsecode = substr($response, 0, 3); 

    if ($responsecode != '354') { 
     $this->ErrorCode = $responsecode; 
     $this->ErrorCodeSMTPEnhanced = $this->_GetSMTPEnhancedErrorCode($response); 
     $this->Error = $response; 
     $this->_Close_Smtp_Connection(); 

     $this->DebugMemUsage('Got error ' . $this->Error); 

     return array(false, $this->Error); 
    } 

    $msg = "To: " . $to . $this->_smtp_newline . "Subject: " . $subject . $this->_smtp_newline . $headers . $this->_smtp_newline . preg_replace('/^\.(\r|\n)/m', ' .${1}', $body); 

    $msg = str_replace("\r\n","\n",$msg); 
    $msg = str_replace("\r","\n",$msg); 
    $lines = explode("\n",$msg); 
    foreach ($lines as $no => $line) { 
     // we need to rtrim here so we don't get rid of tabs before the start of the line. 
     // the tab is extremely important for boundaries (eg sending multipart + attachment) 
     // so it needs to stay. 
     $data = rtrim($line); 

     $this->DebugMemUsage('Trying to put ' . $data); 

     if (!$this->_Put_Smtp_Connection($data)) { 
      $this->ErrorCode = 13; 
      $this->ErrorCodeSMTPEnhanced = false; 
      $this->Error = GetLang('UnableToSendEmail_DataWriting'); 
      $this->_Close_Smtp_Connection(); 

      $this->DebugMemUsage('Got error ' . $this->Error); 

      return array(false, $this->Error); 
     } 
    } 

    $data = $this->_smtp_newline . "."; 

    $this->DebugMemUsage('Trying to put ' . $data); 

    if (!$this->_Put_Smtp_Connection($data)) { 
     $this->ErrorCode = 14; 
     $this->ErrorCodeSMTPEnhanced = false; 
     $this->Error = GetLang('UnableToSendEmail_DataFinished'); 
     $this->_Close_Smtp_Connection(); 

     $this->DebugMemUsage('Got error ' . $this->Error); 

     return array(false, $this->Error); 
    } 

    $response = $this->_get_response(); 

    $this->DebugMemUsage('Got response ' . $response); 

    $responsecode = substr($response, 0, 3); 
    if ($responsecode != '250') { 
     $this->ErrorCodeSMTPEnhanced = $this->_GetSMTPEnhancedErrorCode($response); 
     $this->ErrorCode = $responsecode; 
     $this->Error = $response; 
     $this->_Close_Smtp_Connection(); 

     $this->DebugMemUsage('Got error ' . $this->Error); 

     return array(false, $this->Error); 
    } 

    $this->DebugMemUsage('Mail accepted '); 

    /** 
    * We got this far, this means we didn't encounter any errors. 
    * Cleanup previous error codes and variables since they are no longer relevant 
    * with the current process iteration. 
    */ 
    $this->Error = ''; 
    $this->ErrorCode = false; 
    $this->ErrorCodeSMTPEnhanced = false; 

    $this->_smtp_email_count++; 
    return array(true, false); 
} 
+0

也許我們可以有一些代碼,也許發送循環? –

+0

我要提出這個問題......等 – Hackerman

+0

你的問題與任何應用程序結構有關。 – Brad

回答

0

在結束時的「錯誤」在另一功能中,BCC複印功能;在工作流程的每一次調用中,它都不會清除以前的密件副本,而是將它們相加直到達到極限。