Android使用Java Mail发送邮件

本文介绍如何在Android应用中使用JavaMail发送带附件的邮件,并解决了附件名称中文乱码的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

由于项目中有需求,所以试了一下在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

 
 

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值