2012-02-03 75 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