2010-12-22 129 views
2

我在通過PHP/IMAP電子郵件發送一個問題 - 我不知道這是否是因爲:如何從PHP發送IMAP帳戶的電子郵件?

  • 我不正確認識IMAP或
  • 有我的服務器
  • 問題

我的應用程序打開一個電子郵件帳戶的IMAP連接來閱讀收件箱中的郵件。它成功地做到了。我遇到的問題是我想從此帳戶發送郵件並將它們顯示在發件箱/發送文件夾中。

據我所知,PHP imap_mail()函數並沒有以任何方式掛接到我目前打開的IMAP流中。

我的代碼執行時不會引發錯誤。但是,電子郵件永遠不會到達收件人,也不會顯示在我發送的文件夾中。

private function createHeaders() { 
    return "MIME-Version: 1.0" . "\r\n" . 
     "Content-type: text/html; charset=iso-8859-1" . "\r\n" . 
     "From: " . $this->accountEmail . "\r\n"; 
} 

private function notifyAdminForCompleteSet($urlToCompleteSet) { 
    $message = " 
     <p> 
      In order to process the latest records, you must visit 
      <a href='$urlToCompleteSet'>the website</a> and manually export the set. 
     </p> 
    "; 

    try { 
     imap_mail(
      $this->adminEmail, 
      "Alert: Manual Export of Records Required", 
      wordwrap($message, 70), 
      $this->createHeaders() 
     ); 
     echo(" ---> Admin notified via email!\n"); 
    } 
    catch (Exception $e) { 
     throw new Exception("Error in notifyAdminForCompleteSet()"); 
    } 
} 

我猜我需要手動將郵件複製到IMAP帳戶...或者是否有不同的解決方案來解決這個問題?

此外,如果「發件人」地址中的域與運行此腳本的服務器中的域不同,是否有關係?我無法解釋爲什麼郵件永遠不會發送。

回答

5

imap_mail只是sendmail二進制文件的一個包裝,如mail函數。您最好通過普通的SMTP方式發送郵件(看看PHPMailerSwift Mailer),然後讓您的代碼將郵件放入發送文件夾imap_append

不確定是什麼讓發送失敗,但你應該檢查你的代碼中的布爾返回值imap_send。除此之外,您需要檢查您的SMTP服務器日誌是否有任何線索。

+0

imap_mail()返回「1」,所以我會檢查日誌。 – arthurakay 2010-12-22 20:08:21

0

檢查您的呼叫返回值爲imap_mailimap_mail不會在失敗時拋出異常,它會返回false

此外,你將不得不復制郵件到發送文件夾自己,imap_mail不會爲你做。

1

已經有一段時間了,但對於其他人的記錄,您可以通過imap_last_error()獲取IMAP erorr。這會給你一個最後一個問題的錯誤字符串。

相關問題