• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Android > android发送邮件

android发送邮件

作者:网友 字体:[增加 减小] 来源:互联网 时间:2017-05-26

网友通过本文主要向大家介绍了android 发送邮件代码,android 发送邮件权限,android 后台发送邮件,android 自动发送邮件,android开发发送邮件等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

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 orders = new ArrayList();
    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("[email protected]", "订单",
                        "邮件由系统自动发送,请不要回复!", 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 = "[email protected](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生成的路径一致,才能找到文件。如果是批量发送邮件,就要考虑使用线程池,但如果是批量发的话,一般都是在后台进行处理。
到此发送邮件的功能就实现了。还是比较简单实用的。

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • android发送邮件

相关文章

  • 2017-05-222.3.8 SeekBar(拖动条)
  • 2017-05-26ARM汇编中LDR伪指令和LDR指令
  • 2017-05-224.1.2 Activity初窥门径
  • 2017-05-26Android 蓝牙操作详解,android蓝牙详解
  • 2017-05-26订单流程view,订单view
  • 2017-05-26《转》深入理解Activity启动流程(一)–Activity启动的概要流程,《转》activity
  • 2017-05-26单机搭建Android开发环境(二),单机搭建android开发
  • 2017-05-26历代安卓版本回顾(使用者角度+开发者角度)长期更新!!!,安卓开发者
  • 2017-05-222.4.9 ListView的数据更新问题
  • 2017-05-26Android中dip、dp、sp、pt和px的区别,androiddip

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • andriod Java中度转度分秒,andriodjava分秒
    • getCacheDir()、getFilesDir()、getExternalFilesDir()、getExternalCacheDir(),mediacachefiles
    • 手机影音1--SplashActivity,1--splashactivity
    • Android 环境搭建 以及 第一个android 程序的编写,搭建android
    • android开发我的新浪微博客户端-载入页面UI篇(1.1),androidui
    • lesson15-QT多线程
    • 硅谷新闻5--顶部新闻轮播图事件处理,硅谷5--
    • UI-初识君面之理论篇,ui-初识理论篇
    • 如何让光标处于EditText的末尾,光标edittext末尾
    • 安卓--selector简单使用,安卓--selector

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有