Android发送带附件的邮件

时间:2013-02-07 07:25:42

标签: android javamail sendmail

我发送带附件的电子邮件!没关系,但有一个问题。我添加到电子邮件正文的文件有“A FULL PATH”的名字。发送像......

        class SendEmailAsyncTask extends AsyncTask <Void, Void, Boolean> {
    @Override
    protected Boolean doInBackground(Void... params) {
        {
            Context context = getApplicationContext();
            Mail m = new Mail("****a@gmail.com", "te****mail"); 
            String[] toArr = {"te****all@yan****"}; 
            m.setTo(toArr); 
            m.setFrom("t****il.ya@gmail.com"); 
            m.setSubject("TESTING");         
            m.setBody("Принят test");
            try { 
                String path = "/mnt/sdcard/qwe";
                 File fileDir = new File( path );
                 String[] _files = fileDir.list(); 
                 for ( int i = 0 ; i < _files.length ; i++  )
                 { 
                     _files[i] = path + "/"+ _files[i];
               //        _files[i] = path + "/"+ _files[i].substring(_files[i].lastIndexOf("/"));
                       m.addAttachment(_files[i]);
                       Log.v("list sending", _files[i]);
                       Log.v("list sending", _files[i].substring(_files[i].lastIndexOf("/")));
                 }

              if(m.send()) { 

                  for ( int i = 0 ; i < _files.length ; i++  )
                  { 
                      Log.v("test mail result", "success");
                  }
              } else { 
                  Log.v("test mail result", "fail");
              } 
            } catch(Exception e) {
                 Log.v("test mail result", "error while sending");
            }           
        }
        return null;
    }
} 

发送日志是....

     02-07 11:18:15.542: V/list sending(18255): /mnt/sdcard/qwe/1233.txt
     02-07 11:18:15.542: V/list sending(18255): /1233.txt
     02-07 11:18:15.542: V/list sending(18255): /mnt/sdcard/qwe/123.txt
     02-07 11:18:15.542: V/list sending(18255): /123.txt
     02-07 11:18:15.552: V/list sending(18255): /mnt/sdcard/qwe/12333.txt
     02-07 11:18:15.552: V/list sending(18255): /12333.txt
     02-07 11:18:15.722: D/dalvikvm(18255): GC_FOR_MALLOC freed 3564 objects / 349496 bytes in 33ms
     02-07 11:18:15.722: I/global(18255): Default buffer size used in BufferedReader constructor. It would be better to be explicit if an 8k-char buffer is required.
     02-07 11:18:16.222: I/SSLSocketFactory(18255): Using factory org.apache.harmony.xnet.provider.jsse.OpenSSLSocketFactoryImpl@4006ed60
     02-07 11:18:17.084: D/NativeCrypto(18255): SSL_OP_NO_SSLv3 is set
     02-07 11:18:18.562: I/global(18255): Default buffer size used in BufferedOutputStream constructor. It would be better to be explicit if an 8k buffer is required.
     02-07 11:18:18.562: I/global(18255): Default buffer size used in BufferedInputStream constructor. It would be better to be explicit if an 8k buffer is required.
     02-07 11:18:19.152: I/global(18255): Default buffer size used in BufferedReader constructor. It would be better to be explicit if an 8k-char buffer is required.
     02-07 11:18:27.687: V/test mail result(18255): success

如何在附件中仅获取文件名?

3 个答案:

答案 0 :(得分:2)

这是我的addAttachment的样子:

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

    // Truncating the full file path to just filename
    Pattern p = Pattern.compile("[^/]*$");
    Matcher m = p.matcher(filename);
    if (m.find())
        messageBodyPart.setFileName(m.group());
    else 
        messageBodyPart.setFileName(filename);

    multipart.addBodyPart(messageBodyPart);
  }

希望这有帮助!

答案 1 :(得分:1)

我不知道“Mail”类是什么,但看起来这个bug在Mail.addAttachment方法中。

答案 2 :(得分:1)

试试这个:

messageBodyPart.setFileName(filename.substring(filename.lastIndexOf("/") + 1));