Android使用Java Mail发送邮件

来源:互联网 发布:如何删除知乎回答 编辑:程序博客网 时间:2024/05/16 05:17

由于项目中有需求,所以试了一下在Android中使用Java Mail,在这里记录一下方便以后复制粘贴!

开始环境:

AndroidStudio 2.3.3

需要在build.gardle引入Java Mail相关库 :

compile 'com.sun.mail:android-mail:1.6.0'compile 'com.sun.mail:android-activation:1.6.0'

发送邮件需要权限:

<uses-permission android:name="android.permission.INTERNET"/>
如果发送附件还需要:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
在这里使用QQ邮箱作为例子:
private void sendMail() throws Exception{    //host跟port可以到:    //http://service.mail.qq.com/cgi-bin/help?subtype=1&&no=1000557&&id=20010    String host ="smtp.qq.com";    int port = 25;    String user = "123456789@qq.com";//换成你自己的    String password = "";    Properties properties = System.getProperties();    properties.put("mail.smtp.starttls.enable", "true");    properties.put("mail.smtp.auth", "true");    //    Session session = Session.getDefaultInstance(properties);    MimeMessage message = new MimeMessage(session);    ////设置发件人    message.setFrom("隔壁老王<123456789@qq.com>");    //    MimeMultipart multipart = new MimeMultipart();    //邮件内容    MimeBodyPart text = new MimeBodyPart();    text.setText("窗前明月光,疑似地上霜,举头望明月,低头思故乡。", "UTF-8");    multipart.addBodyPart(text);    //    MimeBodyPart attachment = new MimeBodyPart();    //附件地址    attachment.attachFile(Environment.getExternalStorageDirectory().getAbsolutePath()            + "/test.docx");    //附件名称,收件人收到附件显示的附件名称    attachment.setFileName("test.docx");    multipart.addBodyPart(attachment);    //设置收件人    message.addRecipients(Message.RecipientType.TO, "987654321@qq.com");    //邮件主题    message.setSubject("Hello World", "UTF-8");    message.setContent(multipart);    //发送时间    message.setSentDate(new Date());    //不传附件的话可以使用message.setText()设置邮件内容,否则message.setText()不起作用,接受者收不到内容    //message.setText("窗前明月光,疑似地上霜,举头望明月,低头思故乡。", "UTF-8");    //    Transport transport = session.getTransport();    transport.connect(host, port, user, password);    //    transport.sendMessage(message, message.getAllRecipients());    transport.close();}

过程中遇到了附件名称中文乱码问题,可以使用

MimeUtility.encodeText(String text)
例子:
String name = MimeUtility.encodeText("小明.docx")
如果邮件名称过长的话使用MeneUtility.encodeText()还是会出现问题的
例子:
String name = MimeUtility.encodeText("小明 2017.08.11 王大明 135****5436.doc")
这样的附件名称在收件人那边会显示:tcmime.1245.1725.5276.bin
解决办法是,加上这行代码:
properties.put("mail.mime.splitlongparameters","false");
这个问题我找了好久都没能自己解决,最后在这里找到答案了:
http://blog.csdn.net/wty19/article/details/50607411

感谢wty19

原创粉丝点击