imap_mail_compose在android电子邮件中创建非名称附件

时间:2013-05-29 17:28:25

标签: php android email imap

我正在编写一个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;
}

那么,有人对此有任何想法吗?感谢您的帮助,因为这是一个真正的难题。

1 个答案:

答案 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/并使用他们的库而不是重新发明轮子。