【问题标题】:Can't send mail with attachment无法发送带附件的邮件
【发布时间】:2011-07-26 16:50:06
【问题描述】:

我编写代码用于将带有附件的邮件从我的 BlackBerry 设备发送到我的 gmail 帐户。

邮件发送无误。但问题是附件部分不起作用。该邮件根本不包含我的附件!

请帮我解决问题。

多部分 mp = new Multipart(); 字节[] 数据 = readFile(strFileName); String fileData = "只是一个简单的测试"; 字符串消息数据 = 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()); 
        }

【问题讨论】:

    标签: java blackberry sendmail


    【解决方案1】:

    您也可以点击此链接: j2me/BlackBerry - How to send Email with Attachment from Application?

    我在发送附件时也遇到了这个问题 我在这里犯了一个错误:msg.setContent(multipart);

    所以请检查代码并与 y0rk 给出的或链接中指定的其他代码进行比较

    【讨论】:

      【解决方案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("from@address.com")) {
                          //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("to@address.com", "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();
          }
      

      【讨论】:

      • @yOrk:谢谢 york..是否需要任何其他配置才能使其工作..我尝试了代码,但它不起作用..我是否需要运行 ess 模拟器这个应用程序的工作..
      • @Tijo,我已经在真实设备上使用代码。只需在真实设备上编译、签名和运行。您必须将 from@address.com 设置为有效的邮件地址(必须安装在设备上)。
      • @yOrk:谢谢 york..它使用您的测试代码..您的代码没有问题..但是在您的代码中,您对文件名和内容类型进行了硬编码..但我想要用户使用文件选择器选择自己的文件并将其附加到消息中..当我这样做时,我收到了我提到的错误..意味着消息没有错误..但是没有附件.my 代码类似于下面的评论..
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-01-18
      • 2017-06-11
      • 1970-01-01
      • 1970-01-01
      • 2013-04-16
      • 1970-01-01
      • 2011-12-09
      相关资源
      最近更新 更多