与phpmailer don'发送邮件;“不要去”;“发送”;IMAP文件夹

与phpmailer don'发送邮件;“不要去”;“发送”;IMAP文件夹,php,smtp,imap,phpmailer,Php,Smtp,Imap,Phpmailer,在我的CRM在线系统中,我使用IMAP协议控制输入邮件。 现在我正在使用phpmailer和SMTP协议发送邮件。 一切都很好,但我有一件更重要的事。如何使使用phpmailer脚本发送的邮件进入“已发送”IMAP文件夹? 您需要通过IMAP主机中继发送的邮件 IMAP主机需要支持该功能(很少有人支持) 如果这两点中有一点不正确,简短的回答是“你不能”。简言之,这实际上取决于邮件提供商,而不是您的代码 虽然我很讨厌M$,但Exchange是一个他们真正做对事情的地方——如果您使用的是Excha

在我的CRM在线系统中,我使用IMAP协议控制输入邮件。 现在我正在使用phpmailer和SMTP协议发送邮件。 一切都很好,但我有一件更重要的事。如何使使用phpmailer脚本发送的邮件进入“已发送”IMAP文件夹?

  • 您需要通过IMAP主机中继发送的邮件
  • IMAP主机需要支持该功能(很少有人支持)
如果这两点中有一点不正确,简短的回答是“你不能”。简言之,这实际上取决于邮件提供商,而不是您的代码


虽然我很讨厌M$,但Exchange是一个他们真正做对事情的地方——如果您使用的是Exchange服务器,所有这些都是为您处理的。

嗯,这很难,但可以做到

看看这个函数。
通过连接到IMAP流资源,您可以使用IMAP-append()将邮件附加到IMAP帐户的“已发送”文件夹中


但是通读这些评论会告诉你,完成这些任务有点乏味,但肯定不是不可能的——你可能需要自己编写一些代码,因为phpmailer不支持这种开箱即用的方式(而且很可能会花费太多的时间来实现,而不是自己制作).

我找到了更简单的方法。 PHPmailer将电子邮件准备为字符串-您所要做的就是将其放入正确的IMAP文件夹中

我用这段代码扩展了phpmailer类(因为变量受保护,所以我无法访问它们):

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");
}

它工作得很好。

现在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");
}
这很有效:


啊,真的吗?尽管如此,我还是认为这是一个解决方案,尽管是一个变通办法,所以我将给你一个美味的+1。谢谢你的回复——我会试试这个。@DaveRandom我同意你的看法,它不漂亮,但它有可能解决OP的问题;虽然我不明白需要什么…你能举个例子说明$ImapStream和$folder的值吗?我不知道$folder的正确值应该是多少,尤其是当我没有对邮件服务器的文件级访问权限时(我与Gmail一起使用)。没错。自2012年7月13日起。请参阅此更改日志:还需要检查以了解函数imap_append()和$folder参数,并了解如何获取$ImapStream。
$mail = new PHPMailer();
//code to handle phpmailer
$result = $mail->Send();
if ($result) {
  $mail_string = $mail->getSentMIMEMessage();
  imap_append($ImapStream, $folder, $mail_string, "\\Seen");
}
if (!$mail->send()) {
//echo "Mailer Error: " . $mail->ErrorInfo;
} else{

//echo "Message sent!";
//Section 2: IMAP
//Uncomment these to save your message in the 'Sent Mail' folder.
if (save_mail($mail)) {
echo "Message saved!";
}
}

//function
function save_mail($mail)
{
$providerMail = 'Gmail';
$providerMailSentFolder = 'Sent Mail';//You can change 'Sent Mail' to any folder
$providerMailImap = 'imap.gmail.com';//imap.one.com
$path = "{".$providerMailImap.":993/imap/ssl}[".$providerMail."]/".$providerMailSentFolder;
//Tell your server to open an IMAP connection 
//using the same username and password as you used for SMTP
$imapStream = imap_open($path, $mail->Username, $mail->Password);
$result = imap_append($imapStream, $path, $mail->getSentMIMEMessage());
imap_close($imapStream);
}