打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
android发送邮件

一个项目的需求,之前一篇博客写过如何生成excel,生成后的excel要发送给用户(指定邮箱)。奇葩的后台说这个发送也不好实现,要客户端来做。也就只能做了(又是分分钟要来个螺旋王)。本篇博客就简单介绍下android如何发送邮件。结果图如下:


这里我说的只是一种方法,其实发送邮件的方式有很多。在之前的那个生成excel的项目继续扩展。没看过之前项目的可以先看下:android生成excel
首先要导入发送邮件的相应jar包,有三个,分别是activation.jar,additional.jar和mail.jar。这些jar包能在后面的工程中找到。如图:

然后写一个发送邮件工具类来写发送邮件的底层代码,先把代码贴出来。

public class EmailUtil {    class MyAuthenticator extends javax.mail.Authenticator {        private String strUser;        private String strPwd;        public MyAuthenticator(String user, String password) {            this.strUser = user;            this.strPwd = password;        }        protected PasswordAuthentication getPasswordAuthentication() {            return new PasswordAuthentication(strUser, strPwd);        }    }    public void sendMail(String toMail, String fromMail, String server,            String username, String password, String title, String body,            String attachment) throws Exception {        Properties props = System.getProperties();// Get system properties        //添加邮箱地址。        props.put("mail.smtp.host", server);// Setup mail server        props.put("mail.smtp.auth", "true");        //添加邮箱权限        MyAuthenticator myauth = new MyAuthenticator(username, password);// Get        Session session = Session.getDefaultInstance(props, myauth);        MimeMessage message = new MimeMessage(session); // Define message        //设置目的邮箱        message.setFrom(new InternetAddress(fromMail)); // Set the from address        message.addRecipient(Message.RecipientType.TO, new InternetAddress(                toMail));// Set        //设置邮件的标题        message.setSubject(title);// Set the subject        // message.setText(MimeUtility.encodeWord(body));// Set the content        MimeMultipart allMultipart = new MimeMultipart("mixed");        MimeBodyPart attachPart = new MimeBodyPart();        //添加附件        FileDataSource fds = new FileDataSource(attachment);        attachPart.setDataHandler(new DataHandler(fds));//附件        attachPart.setFileName(MimeUtility.encodeWord(fds.getName()));        MimeBodyPart textBodyPart = new MimeBodyPart();        //添加邮件内容        textBodyPart.setText(body);        allMultipart.addBodyPart(attachPart);        allMultipart.addBodyPart(textBodyPart);        message.setContent(allMultipart);        message.saveChanges();        Transport.send(message);//发送邮件    }}

toMail:是发送目的的邮箱。
fromMail:是用于发送的邮箱。
server:固定写为”smtp.mxhichina.com”。这是阿里云企业邮箱地址。
account:指用于发送邮件的邮箱账号。
password:指用于发送邮件的邮箱密码。
title,body:不用说,就是邮件的题目和内容。
attachment:表示上传的附件在手机中的路径。
代码都加了注释,还是比较清楚的。重点看下添加附件部分,因为内容有两部分,有文字内容和附近,所以要用MimeMultipart 来实现两部分的添加。MimeBodyPart生于添加一部分的内容,setText方法用于添加方字内容。setFileName用于添加附件内容,具体的看代码。
接下来就是发送邮件的业务层代码了。看下MainActivity代码:

public class MainActivity extends Activity {    Button btn,btn1;    List<Order> orders = new ArrayList<Order>();    String path;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        int length = Const.OrderInfo.orderOne.length;        for(int i = 0;i < length;i++){            Order order = new Order( Const.OrderInfo.orderOne[i][0],  Const.OrderInfo.orderOne[i][1],  Const.OrderInfo.orderOne[i][2],  Const.OrderInfo.orderOne[i][3]);            orders.add(order);        }        btn = (Button)super.findViewById(R.id.btn);        btn1 = (Button)super.findViewById(R.id.btn1);        btn.setOnClickListener(new OnClickListener() {            @Override            public void onClick(View v) {                // TODO Auto-generated method stub                String fileName = "excel_"+new Date().toString();                path =  "/MailDemo/" + fileName ;                try {                    ExcelUtil.writeExcel(MainActivity.this,                            orders, path);                } catch (Exception e) {                    // TODO Auto-generated catch block                    e.printStackTrace();                }            }        });        btn1.setOnClickListener(new OnClickListener() {            @Override            public void onClick(View v) {                // TODO Auto-generated method stub                String pathString = getExternalFilesDir(null).getPath()+path;                sendMail("635596741@qq.com", "订单",                        "邮件由系统自动发送,请不要回复!", pathString+ ".xls");                Toast.makeText(MainActivity.this, "邮件发送成功", Toast.LENGTH_SHORT).show();            }        });    }    public void sendMail(final String toMail, final String title,            final String body, final String path){        new Thread(new Runnable() {            public void run() {                EmailUtil emailUtil = new EmailUtil();                try {                    String account = "xxxx@123.com(your mail)";                    String password = "xxx(your password)";                    emailUtil.sendMail(toMail, account, "smtp.mxhichina.com",                            account, password, title, body, path);                } catch (Exception e) {                    e.printStackTrace();                }            }        }).start();    }}

重点看下sendMail方法,其实很简单,就是把对应的参数往里传,分别传入你的邮箱密码、你要发送的目的邮件、邮件的内容题目及附件路径。但是注意要开启一个线程来发邮件,因为发邮件的时间可能比较长,在主线程中发的话可以会导致NAR。这里还有一点要注意的是传入附件的路径要和excel生成的路径一致,才能找到文件。如果是批量发送邮件,就要考虑使用线程池,但如果是批量发的话,一般都是在后台进行处理。
到此发送邮件的功能就实现了。还是比较简单实用的。
项目下载

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
JavaMail API详解
javamail发送邮件带多个附件
SSH框架网上商城项目第25战之使用java email给用户发送邮件
用Java发送邮件(公司开发用的)
javamail的几个实用知识点.
邮件服务器+javamail(仅包括发送)搭建
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服