簡體   English   中英

如何使用PHP從IMAP帳戶發送電子郵件?

[英]How do you send email from IMAP account with PHP?

我在通過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帳戶中......或者這個問題有不同的解決方案嗎?

此外,如果“from”地址中的域與運行此腳本的服務器上的域不同,這是否重要? 我無法解釋為什么郵件永遠不會被發送。

imap_mail只是sendmail二進制文件的包裝器,就像mail函數一樣。 您最好通過普通的SMTP方式發送郵件(查看PHPMailerSwift Mailer ),然后讓您的代碼將消息放入帶有imap_append的Sent文件夾中。

不確定是什么導致發送失敗,但你應該在代碼中檢查imap_send的布爾返回值。 除此之外,您還需要檢查SMTP服務器日志以獲取任何線索。

已經有一段時間了,但是對於其他人的記錄,你可以通過imap_last_error()獲得IMAP erorr。 這將為您提供上一個問題的錯誤字符串。

檢查您對imap_mail的調用的返回值。 imap_mail在失敗時不會拋出na異常,它返回false

此外,您必須自己將郵件復制到已發送文件夾, imap_mail不會為您執行此操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM