2011-12-19 65 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