2011-12-19 63 views

回答

8

現在有在PHPMailer的方法getSentMIMEMessage返回整個MIME字符串

$mail = new PHPMailer(); 
//code to handle phpmailer 
$result = $mail->Send(); 
if ($result) { 
    $mail_string = $mail->getSentMIMEMessage(); 
    imap_append($ImapStream, $folder, $mail_string, "\\Seen"); 
} 
+0

沒錯。自2012年7月13日起。請參閱此更改日誌:https://github.com/PHPMailer/PHPMailer/blob/master/changelog.md#version-522-beta1-july-13-2012 還需要檢查http:// php.net/manual/en/function.imap-append.php瞭解函數imap_append()和$ folder參數, 和http://php.net/manual/en/function.imap-open.php瞭解如何獲得$ ImapStream。 – Cosmitar 2015-12-10 06:59:11

1
  • 您需要通過IMAP主機
  • 的IMAP主機需要支持的功能(這很少做)

如果任這兩點都沒有真正被中繼發送的郵件,簡短的回答是「你不能」。簡而言之,這取決於郵件提供商,而不是您的代碼。

就像我討厭M $一樣,Exchange是一個地方,他們確實有東西正確 - 如果您使用的是Exchange服務器,則所有這些都是爲您處理的。

4

嗯,這是相當困難的,但可以做到。

看看imap-append函數。
通過連接到IMAP流資源,您可以使用imap-append()將您的郵件附加到IMAP帳戶的已發送文件夾。

但是通過評論的閱讀會告訴你完成有點繁瑣,但肯定不是不可能的 - 你可能需要自己編寫代碼,因爲phpmailer不支持開箱即用(和將很可能會耗費太多的時間來實現,而不是自己做一些事情)。

+0

哎,真的嗎?儘管如此,我認爲這是一個解決方案,所以我會給你一個這些美味的+1。 – DaveRandom 2011-12-19 13:16:48

+0

感謝您的回覆 - 我會試試這個。 – piernik 2011-12-19 13:24:45

+0

@DaveRandom我同意你的觀點,這不太好,但可以解決OP的問題;雖然我不明白需要... – Repox 2011-12-19 13:24:49

13

我發現更簡單的方法來做到這一點。 PHPmailer將電子郵件準備爲字符串 - 所有您需要做的就是將其放入正確的IMAP文件夾中。

我擴大的PHPMailer類代碼(因爲瓦爾保護我不能觸及的地方):

class PHPMailer_mine extends PHPMailer { 
public function get_mail_string() { 
    return $this->MIMEHeader.$this->MIMEBody; 
}} 

PHP代碼:

$mail= new PHPMailer_mine(); 
//code to handle phpmailer 
$result=$mail->Send(); 
if ($result) { 
    $mail_string=$mail->get_mail_string(); 
    imap_append($ImapStream, $folder, $mail_string, "\\Seen"); 
} 

它運作良好。

+1

你可以給一個$ ImapStream和$文件夾的值的例子嗎?我無法弄清楚什麼應該是$文件夾的正確值,特別是當我沒有郵件服務器的文件級訪問權限(我正在使用Gmail)。 – Zeeshan 2014-06-29 11:11:58