Отправленные письма с phpmailer не отправляются в папку "Отправленные" IMAP

в моей онлайн-системе CRM я управляю входящими сообщениями с протоколом IMAP. Теперь я отправляю письма с phpmailer и SMTP-протоколом. Все в порядке, но у меня есть одна странная вещь. Как отправить отправленные сообщения с почтой phpmailer script в папку "Отправленные" IMAP "Отправлено"?

Ответ 1

Теперь существует метод getSentMIMEMessage в PHPMailer, который возвращает всю строку MIME

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

Ответ 2

Я нашел более простой способ сделать это. 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");
}

Хорошо работает.

Ответ 3

Ну, это довольно сложно, но можно сделать.

Посмотрите на функцию imap-append.
При подключении к ресурсу потока IMAP вы можете использовать imap-append() для добавления своих писем в папку Sent вашей учетной записи IMAP.

Но чтение через комментарии покажет вам, что это немного утомительно для достижения, но, конечно, не невозможно - вам, вероятно, придется что-то кодировать самостоятельно, поскольку phpmailer не поддерживает это из коробки (и будет скорее всего, потребуется слишком много времени для реализации вместо того, чтобы что-то сделать самостоятельно).

Ответ 4

  • Вам необходимо передать свою отправленную почту через хост IMAP
  • Хост IMAP должен поддерживать функцию (что очень мало)

Если одна из этих двух точек неверна, короткий ответ: "Вы не можете". Короче говоря, действительно это относится к почтовому провайдеру, а не к вашему коду.

Насколько я ненавижу M $, Exchange - это одно место, где у них действительно все в порядке - если вы используете сервер Exchange, все это обрабатывается для вас.

Ответ 5

Это хорошо работает:   Руководство по Php

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