使用phpmailer发送邮件不要转到“已发送”IMAP文件夹

时间:2011-12-19 12:38:23

标签: php smtp imap phpmailer

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

5 个答案:

答案 0 :(得分:14)

我找到了更简单的方法。 PHPmailer将电子邮件准备为字符串 - 您只需将其放入正确的IMAP文件夹即可。

我使用此代码扩展了phpmailer类(因为vars受到保护,我无法访问它们):

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 :(得分:13)

There is now a method getSentMIMEMessage in PHPMailer which returns the whole MIME string

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

答案 2 :(得分:4)

嗯,这很难,但可以做到。

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

但阅读评论会告诉你,完成它有点乏味,但肯定不是不可能的 - 你可能需要自己编写代码,因为phpmailer不支持开箱即用(并且会最有可能实施而不是自己创造一些东西。

答案 3 :(得分:1)

  • 您需要通过IMAP主机转发您发送的邮件
  • IMAP主机需要支持该功能(很少有人这样做)

如果这两点中的任何一个都不正确,那么简短的答案是“你不能”。简而言之,实际上这取决于邮件提供商,而不是您的代码。

尽管我讨厌M $,Exchange仍然是他们真正做对的地方 - 如果您使用的是Exchange服务器,所有这些都是为您处理的。

答案 4 :(得分:0)

这很好用:    Php Manual

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