我正在编写一个php应用程序,它从一个邮件帐户读取电子邮件,并将某些邮件转发到另一个邮件帐户。我使用imap_mail_compose()来创建将被转发的消息。当我处理纯文本消息或HTML消息时,它可以正常工作。当我有一条包含文本和HTML组件的消息时,问题就在于此。消息在我的计算机上的邮件阅读器中显示得很好,并且在通过Web应用程序阅读时也很好。 android电子邮件程序显示一条空白邮件,其中包含两个名为“noname”的附件。原始消息在android电子邮件程序中读得很好,所以我不确定原始消息和我创建的消息之间有什么区别。我已经看了两个消息中的结构,由imap_fetchstructure()检索它们是相同的,所以看起来我正在创建消息,但显然我做错了。我还用不同的Android电子邮件程序K-9 Mail检查了它,它在那里工作正常。
这是我用来设置imap_mail_compose()使用的主体部分的一些代码。 变量$ emailMessage来自一个提取电子邮件消息所有部分的类。我在http://www.electrictoolbox.com/php-email-extract-inline-image-attachments/找到了它并添加了一些额外的项目。
$bptr = 1;
// if both text and HTML parts exist
if ((strlen($emailMessage->bodyHTML) > 0) && (strlen($emailMessage->bodyPlain) > 0))
{
$hdr["type"] = TYPEMULTIPART;
$hdr["subtype"] = "alternative";
$body[$bptr++] = $hdr;
}
// check for plain text message
if (strlen($emailMessage->bodyPlain) > 0) {
$tpart["type"] = TYPETEXT;
$tpart["subtype"] = "plain";
$tpart["encoding"] = $emailMessage->plain_encoding;
$tpart["disposition.type"] = "INLINE";
if (strlen($emailMessage->plain_charset) > 0)
$tpart["charset"] = $emailMessage->plain_charset;
$tpart["contents.data"] = $emailMessage->encodePlain;
$body[$bptr++] = $tpart;
}
// check for HTML message
if (strlen($emailMessage->bodyHTML) > 0) {
$hpart["type"] = TYPETEXT;
$hpart["subtype"] = "html";
$hpart["encoding"] = $emailMessage->html_encoding;
$hpart["disposition.type"] = "INLINE";
if (strlen($emailMessage->html_charset) > 0)
$hpart["charset"] = $emailMessage->html_charset;
$hpart["contents.data"] = $emailMessage->encodeHTML;
$body[$bptr++] = $hpart;
}
那么,有人对此有任何想法吗?感谢您的帮助,因为这是一个真正的难题。
答案 0 :(得分:2)
我找到了一个适用于此的解决方案。它是在php网站上: http://php.net/manual/en/function.imap-append.php
由于我们一直在努力解决这个问题,我想分享一下 我们如何使imap_append与所有MIME部分正常工作,包括 附件。如果您要发送电子邮件,也希望附加 发送消息到已发送邮件文件夹,我想不出更简单的方法 要做到这一点,如下:
1)使用SwiftMailer通过PHP发送消息。 $ message = Swift_Message :: newInstance(“主题在这里”); (然后加入,到, 正文,附件等)$ result = $ mailer-> send($ message);
2)在上面的步骤1)中构建消息时,将其保存到a 变量如下:
$ msg = $ message-> toString(); (这会创建完整的MIME邮件 imap_append()需要!!在此之后你可以调用imap_append之类的 这样:
imap_append($ imap_conn,$ mail_box,$味精为 “\ r \ n”, “\看”。);
所以转到http://swiftmailer.org/并使用他们的库而不是重新发明轮子。