2011-03-31 130 views
0

我編寫了將附件從我的BlackBerry設備發送到我的Gmail帳戶的代碼。無法發送帶附件的郵件

郵件發送時沒有錯誤。但問題是附件部分不起作用。該消息根本不包含我的依戀!

請幫我解決這個問題。

Multipart mp = new Multipart(); byte [] data = readFile(strFileName); String fileData =「只是一個簡單的測試」; String messageData = msgField.getText(); SupportedAttachmentPart sap = null;

 try{ 
      sap = new SupportedAttachmentPart(mp,"application/x-example",strFileName, data); 
     }catch (Exception e) { 
      Dialog.inform(e.toString()); 
     } 
     TextBodyPart tbp = new TextBodyPart(mp,messageData); 

     mp.addBodyPart(tbp); 
     mp.addBodyPart(sap); 

     Folder[] folders = Session.getDefaultInstance().getStore().list(Folder.SENT); 

     Message message = new Message(folders[0]); 

     try{ 
      Address toAdd = new Address(toField.getText(), toField.getText()); 
      Address[] toAdds = new Address[1]; 
      toAdds[0] = toAdd; 
      message.addRecipients(Message.RecipientType.TO,toAdds); 
      message.setSubject(subjectField.getText()); 
      message.setContent(mp); 
      Transport.send(message); 
     }catch (Exception e){ 
      Dialog.inform(e.toString()); 
     } 
+1

顯示你的代碼的其他代碼進行比較。 – oxigen 2011-03-31 10:14:37

回答

2

這是一個用附件發送郵件的完整代碼。您可以發送多個附件一條消息,只需將所有部件添加到Multipart。

try { 
     // create a multipart 
     StringBuffer sbFileBody = new StringBuffer(); 
     Multipart mp = new Multipart(); 
     TextBodyPart tbp = new TextBodyPart(mp, "your message body"); 
     SupportedAttachmentPart sap = new SupportedAttachmentPart(mp, "text/plain", "info.txt", sbFileBody.toString().getBytes("UTF-8")); 
     mp.addBodyPart(tbp); 
     mp.addBodyPart(sap); 

     ServiceConfiguration sc = null; 
     ServiceRecord[] records = ServiceBook.getSB().getRecords(); 
     for (int i = 0; i < records.length; i++) { 
      if (records[i].getCid().equalsIgnoreCase("CMIME") && !records[i].isDisabled() && records[i].isValid()) { 
       ServiceConfiguration sct = new ServiceConfiguration(records[i]); 
       String mailAddress = sct.getEmailAddress().toLowerCase(); 
       if (mailAddress.equals("[email protected]")) { 
        //use sc; 
        sc = sct; 
        break; 
       } 
      } 
     } 
     if (sc != null) { 

      Session session = Session.getInstance(sc); 
      Store store = session.getStore(); 
      Folder[] folders = store.list(Folder.SENT); 
      Folder sentfolder = folders[0]; 

      if (sentfolder != null) { 
       Message message = new Message(sentfolder); 
       Address toAdress = new Address("[email protected]", "to address"); 
       message.setFrom(new Address(sc.getEmailAddress(), sc.getName())); 
       message.addRecipients(Message.RecipientType.TO, new Address[] { toAdress }); 
       message.setSubject("Your mail subject"); 
       message.setContent(mp); 
       message.addMessageListener(new MessageListener() { 
        public void changed(MessageEvent e) { 
         if (e.getMessage().getStatus() == Message.Status.TX_SENT) { 
          try { 
           e.getMessage().removeMessageListener(this); 
           System.out.println("Send complete"); 
          } catch (Exception ex) { 
           ex.printStackTrace(); 
          } 
         } 
        } 
       }); 
       Transport.send(message); 

      } 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
+0

@yOrk:謝謝紐約..有任何其他配置需要這樣的工作..我試過的代碼,但它不工作..我需要運行這個應用程序的工作的ess模擬器.. – 2011-04-06 11:20:45

+0

@Tijo,我已經在真實設備上使用代碼。只需編譯,簽名並在真實設備上運行。您必須將** [email protected]**設置爲有效的郵件地址(它必須安裝在設備上)。 – y0rk 2011-04-06 13:25:38

+0

@yOrk:thanks york..its與您的測試代碼一起工作..沒有問題與您的代碼..但在這裏在您的代碼中,您硬編碼的文件名和內容類型..但我希望用戶選擇他自己的文件使用文件選擇器並附上消息。當我這樣做時,我得到我提到的錯誤..意味着消息沒有錯誤..但沒有attachment.my代碼是類似於下面的評論.. – 2011-04-06 14:05:13