2012-02-06 38 views
2

PHPList(2.10.17版)未能將消息發送到符合以下格式之一的是地址的電子郵件地址:PHPList失敗用於與前置,或多個相鄰點

[email protected] 
[email protected] 
[email protected] 

該錯誤消息是Could not instantiate mail function. 有問題的代碼是:

function MailSend($header, $body) { 
    $to = ""; 
    for($i = 0; $i < count($this->to); $i++) 
    { 
     if($i != 0) { $to .= ", "; } 
     $to .= $this->to[$i][0]; 
    } 

    if ($this->Sender != "" && (bool) ini_get("safe_mode") === FALSE) 
    { 
     $old_from = ini_get("sendmail_from"); 
     ini_set("sendmail_from", $this->Sender); 
     $params = sprintf("-oi -f %s", $this->Sender); 
     $rt = @mail($to, $this->EncodeHeader($this->Subject), $body, 
        $header, $params); 
    } 
    else 
     $rt = @mail($to, $this->EncodeHeader($this->Subject), $body, $header); 

    if (isset($old_from)) 
     ini_set("sendmail_from", $old_from); 

    if(!$rt) 
    { 
     $this->SetError($this->Lang("instantiate")); 
     return false; 
    } 

    return true; 
} 

所選擇的代碼路徑是:

else 
     $rt = @mail($to, $this->EncodeHeader($this->Subject), $body, $header); 

我無法在自己的web服務器上重現此錯誤,我在其中爲測試目的設置了PHPList。
不幸的是,唯一顯示此行爲的系統是生產系統。補充一點,我沒有訪問該系統上的任何日誌文件 - 所以我不知道什麼是錯的。
我最好的猜測是,$to需要某種「字符串轉義」來完成這項工作,但我有點不情願篡改生產系統(除了插入一些日誌輸出)。

有沒有人知道這種問題的解決方法?

+0

你正在壓制錯誤,你爲什麼要這樣做?每當你的代碼運行上帝殺死一隻小貓。我希望你爲自己感到自豪。 – 2012-02-06 20:34:19

+0

@truth大聲笑。你對壓制錯誤是正確的。不要那樣做。 – ThinkingMonkey 2012-02-06 20:35:45

+0

@Truth err ...我不是。問問PHPList的人爲什麼這麼做......我確信他們有很多原因。原因可能是,腳本是通過cron作業執行的。 – yas4891 2012-02-06 20:36:50

回答

3

這不是一個錯誤,它是預期的行爲。電子郵件地址的本地部分(@之前的部分)可能包含.,只要它不是第一個也不是最後一個字符,並且還規定它不會連續出現兩次或多次。這意味着這三個例子都是無效的電子郵件地址

閱讀更多關於valid email addresses

+0

有趣。非常感謝。不過,我被告知在升級到最新版本之前,這個工作很有效。在之前安裝的版本中遇到(並解決了)此問題。可悲的是,他們如何解決這個問題的信息丟失了。 – yas4891 2012-02-06 21:00:00

+1

如果它在升級之前起作用,那意味着系統中有一個允許無效電子郵件地址滑過的錯誤。無論如何,如果他們溜過去,幾乎100%的機會都不會到達預定的目的地。 – colithium 2012-02-06 22:32:06

+0

@colithium顯然,從我的服務器上的測試他們通過。它必須是一些配置 – yas4891 2012-02-07 05:41:24