2012-02-03 22 views
0

我正在使用函数将图像附加到电子邮件。Android邮件无意使用Android Mail API

public void addAttachment(String filename) throws Exception { 
    BodyPart messageBodyPart = new MimeBodyPart(); 
    DataSource source = new FileDataSource(filename); 
    messageBodyPart.setDataHandler(new DataHandler(source)); 
    messageBodyPart.setFileName(filename); 

    _multipart.addBodyPart(messageBodyPart); 

    } 

我在将图像附加到电子邮件时调用此函数。 当我尝试删除附件时,它是不可能的。

public void removeAttachment(String filename) throws Exception { 
    BodyPart messageBodyPart = new MimeBodyPart(); 
    DataSource source = new FileDataSource(filename); 
    messageBodyPart.setDataHandler(new DataHandler(source)); 
    messageBodyPart.setFileName(filename); 

    _multipart.removeBodyPart(messageBodyPart); 

    } 

尝试使用此功能,但不工作。

public void AddAndRemoveAttachment(String filename, Boolean yesorno)throws Exception{ 
     BodyPart messageBodyPart = new MimeBodyPart(); 
     DataSource source = new FileDataSource(filename); 
     if(yesorno == true){ 

     source = new FileDataSource(filename); 
     messageBodyPart.setDataHandler(new DataHandler(source)); 
     messageBodyPart.setFileName(filename); 

     _multipart.addBodyPart(messageBodyPart); 
     } 
     else{ 

      _multipart.removeBodyPart(messageBodyPart); 
     } 
    } 

但removeBodyPart没有删除附加的图像。 期待您的回复。 谢谢。

回答

0

对不起,上次我发布这个答案时,我有点怀疑,我绝对错误!你试图实现它确实是正确的。根据我在评论中发布的链接,您是否阅读过Multipart的文档?它说removeBodyPart(BodyPart part)方法抛出至少一个MessagingException如果没有这样的BodyPart存在。你有没有试图抓住这个Exception并写信给Log?因为你只需添加DataHandler并设置文件名,如果你的booleantrue

public void removeAttachment(String filename) { 
    BodyPart part = new MimeBodyPart(); 
    DataSource src = new FileDataSource(filename); 
    part.setDataHandler(new DataHandler(src)); 
    part.setFileName(filename); 

    try { 
     _multipart.removeBodyPart(part); 
    } catch(MessagingException e) { 
     Log.e(TAG, "Got Exception while removing BodyPart: " + e.toString(), e) 
    } 
} 

你的第二个猜测将不会从你的_multipart删除任何东西。如果它是false,那么您只需删除空的BodyPart对象。

否则,如果您想用自己的用户交互编写自己的邮件客户端,为什么不添加应该附加在数组中的文件并对此数组进行更新?所以您可以添加和删除该阵列中的文件,并在邮件发送时一次性附加这些文件。

+0

感谢,你能给我一个例子,用新功能看编辑的问题,但没有工作。 – Mukunda 2012-02-03 11:26:13

+0

对不起,给我一些时间,我现在绝对忙碌... – herom 2012-02-03 11:48:58

+0

也许这会帮助一点点:http://javamail.kenai.com/nonav/javadocs/javax/mail/Multipart.html – herom 2012-02-03 11:56:01

0

我怀疑创建一个新的bodypart并使用它作为handle来调用removebodypart将会起作用。没有函数来检索现有的bodypart,然后将其删除?

看起来你正在使用错误的参数。

0

你确定你正在给你的MultiPart添加东西吗?还是它也会抛出Exception

我搜索javax.mail教程了一下,发现如下:http://www.jondev.net/articles/Sending_Emails_without_User_Intervention_(no_Intents)_in_Android

本教程的作者在他的Mail构造提到,那

也有一些是错误的MAILCAP,JavaMail的可没有找到多部分/混合部分的处理程序,所以需要添加此位。

,并增加了以下内容:

MailcapCommandMap mc = (MailcapCommandMap) CommandMap.getDefaultCommandMap(); 
mc.addMailcap("text/html;; x-java-content-handler=com.sun.mail.handlers.text_html"); 
mc.addMailcap("text/xml;; x-java-content-handler=com.sun.mail.handlers.text_xml"); 
mc.addMailcap("text/plain;; x-java-content-handler=com.sun.mail.handlers.text_plain"); 
mc.addMailcap("multipart/*;; x-java-content-handler=com.sun.mail.handlers.multipart_mixed"); 
mc.addMailcap("message/rfc822;; x-java-content-handler=com.sun.mail.handlers.message_rfc822"); 
CommandMap.setDefaultCommandMap(mc); 

以此为教程没有工作它应该工作“开箱即用”我......希望这有助于有点

+0

谢谢你是我正在使用的。我正在使用多部分,它也为我工作,但无法删除附件。我想知道我们可以用于Android应用程序的任何其他邮件API。 – Mukunda 2012-02-06 05:19:22

+0

如果你想删除最后添加的'BodyPart',你也可以使用'Multipart'的removeBodyPart(int index)'函数,如果它是你想要的,或者考虑有一个文件数组'File []'一旦发送邮件,您可以更新并添加BodyParts ... – herom 2012-02-06 10:30:33