zoukankan      html  css  js  c++  java
  • android--email发送邮件,文本还有附件形式的邮件

    1.首先用的jar包为javaemail

    下载地址:

    https://yunpan.cn/cB3kY8WIvcGtU (提取码:e042)

    2.工具包

    package com.kllayhello.utils;
    
    import android.content.Context;
    import android.content.Intent;
    import android.net.Uri;
    import android.util.Log;
    
    import java.util.Properties;
    
    import javax.activation.CommandMap;
    import javax.activation.DataHandler;
    import javax.activation.FileDataSource;
    import javax.activation.MailcapCommandMap;
    import javax.mail.Message;
    import javax.mail.MessagingException;
    import javax.mail.Multipart;
    import javax.mail.Session;
    import javax.mail.Transport;
    import javax.mail.internet.InternetAddress;
    import javax.mail.internet.MimeBodyPart;
    import javax.mail.internet.MimeMessage;
    import javax.mail.internet.MimeMultipart;
    import javax.mail.internet.MimeUtility;
    import javax.mail.util.ByteArrayDataSource;
    
    /**
     * Created by Administrator on 2016/6/30.
     * http://www.jb51.net/article/38158.htm
     * http://blog.csdn.net/svenke2011/article/details/8229521
     *
     * http://blog.csdn.net/mad1989/article/details/25964495
     *
     * http://blog.csdn.net/chinafe/article/details/7183400
     *http://blog.csdn.net/xanxus46/article/details/8296529
     * http://blog.csdn.net/kudy21/article/details/7665434
     */
    public class EmailUtils{
    
        /**
         * android内部发送邮件
         * 调用手机邮箱
         * 不能自动发送
         * sendto 发送邮件
         * */
        public void sendTOEmail(String title,String content,Context context){
            Intent data=new Intent(Intent.ACTION_SENDTO);
            data.setData(Uri.parse("mailto:qg@17xu.com"));
            data.putExtra(Intent.EXTRA_SUBJECT, title);
            data.putExtra(Intent.EXTRA_TEXT, content);
            context.startActivity(data);
        }
        /**
         * 调用手机邮箱待附件的
         * 不能自动发送
         * */
        public void sendToFileEmail(String title,String content,Context context){
            Intent intent = new Intent(Intent.ACTION_SEND);
            String[] tos = { "qq@17xu.com" };
            String[] ccs = { "qq@17xu.com" };
            String[] bccs = {"qq@17xu.com"};
            intent.putExtra(Intent.EXTRA_EMAIL, tos);
            intent.putExtra(Intent.EXTRA_CC, ccs);
            intent.putExtra(Intent.EXTRA_BCC, bccs);
            intent.putExtra(Intent.EXTRA_TEXT, content);
            intent.putExtra(Intent.EXTRA_SUBJECT, title);
            intent.putExtra(Intent.EXTRA_STREAM, Uri.parse("file:///mnt/sdcard/qq.png"));
            intent.setType("image/*");
            intent.setType("message/rfc882");
            Intent.createChooser(intent, "Choose Email Client");
            context.startActivity(intent);
        }
        /**
         * 发送邮件
         * */
        /**
         * 邮件发送程序
         *
         * @param host
         *            邮件服务器 如:smtp.qq.com
         * @param address
         *            发送邮件的地址 如:qq@qq.com
         * @param from
         *            来自: qq@qq.com
         * @param password
         *            您的邮箱密码
         * @param to
         *            接收人
         * @param port
         *            端口(QQ:25)
         * @param subject
         *            邮件主题
         * @param content
         *            邮件内容
         * @throws Exception
         */
        public void SendEmail(String host, String address, String from, String password, String to, String port, String subject, String content) throws Exception {
            Multipart multiPart;
            String finalString = "";
    
            Properties props = System.getProperties();
            props.put("mail.smtp.starttls.enable", "true");
            props.put("mail.smtp.host", host);
            props.put("mail.smtp.user", address);
            props.put("mail.smtp.password", password);
            props.put("mail.smtp.port", port);
            props.put("mail.smtp.auth", "true");
            Log.i("Check", "done pops");
            Session session = Session.getDefaultInstance(props, null);
            DataHandler handler = new DataHandler(new ByteArrayDataSource(finalString.getBytes(), "text/plain"));
            MimeMessage message = new MimeMessage(session);
            message.setFrom(new InternetAddress(from));
            message.setDataHandler(handler);
            Log.i("Check", "done sessions");
    
            multiPart = new MimeMultipart();
            InternetAddress toAddress;
            toAddress = new InternetAddress(to);
            message.addRecipient(Message.RecipientType.TO, toAddress);
            Log.i("Check", "added recipient");
            message.setSubject(subject);
            message.setContent(multiPart);
            message.setText(content);
    
            Log.i("check", "transport");
            Transport transport = session.getTransport("smtp");
            Log.i("check", "connecting");
            transport.connect(host, address, password);
            Log.i("check", "wana send");
            transport.sendMessage(message, message.getAllRecipients());
            transport.close();
            Log.i("check", "sent");
        }
        /**
         * 发送附件邮件
         * http://cuisuqiang.iteye.com/blog/1586023
         * */
        /**
         * 邮件发送程序
         *
         * @param host
         *            邮件服务器 如:smtp.qq.com
         * @param address
         *            发送邮件的地址 如:qq@qq.com
         * @param from
         *            来自: qq@qq.com
         * @param password
         *            您的邮箱密码
         * @param to
         *            接收人
         * @param port
         *            端口(QQ:25)
         * @param subject
         *            邮件主题
         * @param content
         *            邮件内容
         * @throws Exception
         */
        public void SendEmailfile(String host, String address, String from, String password, String to, String port, String subject, String content,String file_path) throws Exception {
            MimeMultipart multiPart;
            String finalString = "";
    
            Properties props = System.getProperties();
            props.put("mail.smtp.starttls.enable", "true");
            props.put("mail.smtp.host", host);
            props.put("mail.smtp.user", address);
            props.put("mail.smtp.password", password);
            props.put("mail.smtp.port", port);
            props.put("mail.smtp.auth", "true");
    
            Session session = Session.getDefaultInstance(props, null);
            DataHandler handler = new DataHandler(new ByteArrayDataSource(finalString.getBytes(), "text/plain"));
            MimeMessage message = new MimeMessage(session);
            message.setFrom(new InternetAddress(from));
            message.setDataHandler(handler);
    
            multiPart = new MimeMultipart("mixed"); //附件
    
            InternetAddress toAddress;
            toAddress = new InternetAddress(to);
            message.addRecipient(Message.RecipientType.TO, toAddress);  //添加收件人
            Log.i("Check", "added recipient");
            message.setSubject(subject);
            // 邮件内容
            MimeBodyPart htmlPart = new MimeBodyPart();
            htmlPart.setContent(
                    "<body background='#'>"
                            + "<div style='position: absolute; left: 390px; top: 150px;height: "
                            + "100px; 200px;' align='center'>"
                            + "<font color='red'>这是测试邮件,请勿回复</font>" + "</div></body>",
                    "text/html;charset=UTF-8");
            // TODO 组装的顺序非常重要,一定要先组装文本域,再组装文件
            multiPart.addBodyPart(htmlPart);
    
            //附件添加
            try{
                MimeBodyPart attachPart = new MimeBodyPart();
                FileDataSource fds = new FileDataSource(file_path); //打开要发送的文件
                DataHandler dh=new DataHandler(fds);
                attachPart.setDataHandler(dh);
                attachPart.setFileName(MimeUtility.encodeText(dh.getName())); //设置名称
    
                multiPart.addBodyPart(attachPart); //添加附件
                message.setContent(multiPart);  //附件设置内容
                message.saveChanges(); //保存邮件
    
            }catch (Exception e){
                System.out.print("File Bug:::"+e.getMessage());
            }
    
            Transport transport = session.getTransport("smtp");
            transport.connect(host, address, password);
            transport.sendMessage(message, message.getAllRecipients());
            transport.close();
            Log.i("check", "sent");
            System.out.println("send success!");
        }
    /**
     * 暂时不能用,有时间再研究
     * 发送待附件的邮件
     *str_to_mail   发邮件的目的地(收件人信箱)
     * str_from_mail   发邮件的出发地(发件人的信箱)
     * str_smtp host  发件人使用发邮件的电子信箱服务器
     * str_user      发件人用户名
     * str_pass      发件人密码
     * str_title     邮件标题
     * str_body      邮件内容
     * str_file_path  附件
     * */
        public void send_mail_file(String str_to_mail,String str_from_mail,String str_smtp,String str_user,String str_pass,String ports,String str_title,String str_body,String str_file_path)
        {
            Log.v("filesend","send_mail_file");
            String host = str_smtp;   //发件人使用发邮件的电子信箱服务器
            String from = str_from_mail;    //发邮件的出发地(发件人的信箱)
            String to   = str_to_mail;   //发邮件的目的地(收件人信箱)
    
            Log.v("filesend",str_smtp);
            Log.v("filesend",str_from_mail);
            Log.v("filesend",str_to_mail);
    
            Properties props = System.getProperties();// Get system properties
            props.put("mail.smtp.starttls.enable", "true");
            props.put("mail.smtp.host", host);// Setup mail server
            //发件人邮箱和密码
            props.put("mail.smtp.user", str_user);
            props.put("mail.smtp.password", str_pass);
            props.put("mail.smtp.port", ports);
            props.put("mail.smtp.auth", "true"); //这样才能通过验证
    
            Session session = Session.getDefaultInstance(props, null);
            MimeMessage message = new MimeMessage(session); // Define message
         try {
                message.setFrom(new InternetAddress(from)); // Set the from address
            } catch (MessagingException e) {
                e.printStackTrace();
            }
            try {
                message.addRecipient(Message.RecipientType.TO,new InternetAddress(to));// Set the to address
                message.setSubject(str_title);// Set the subject
                message.setText(str_body);// Set the content
            } catch (MessagingException e) {
                e.printStackTrace();
            }
    
            MimeBodyPart attachPart = new MimeBodyPart();
            FileDataSource fds = new FileDataSource(str_file_path); //打开要发送的文件
            try {
                attachPart.setDataHandler(new DataHandler(fds));
                attachPart.setFileName(fds.getName());
            } catch (MessagingException e) {
                e.printStackTrace();
            }
    
            MimeMultipart allMultipart = new MimeMultipart("mixed"); //附件
            try {
                allMultipart.addBodyPart(attachPart);//添加
                message.setContent(allMultipart);
                message.saveChanges();
            } catch (MessagingException e) {
                e.printStackTrace();
            }
    
            try {
                //报错解决方法
                MailcapCommandMap mc = (MailcapCommandMap) CommandMap.getDefaultCommandMap();
                mc.addMailcap("text/html;; x-java-content-handler=com.sun.mail.handlers.text_html");
                mc.addMailcap("text/xml;; x-java-content-handler=com.sun.mail.handlers.text_xml");
                mc.addMailcap("text/plain;; x-java-content-handler=com.sun.mail.handlers.text_plain");
                mc.addMailcap("multipart/*;; x-java-content-handler=com.sun.mail.handlers.multipart_mixed");
                mc.addMailcap("message/rfc822;; x-java-content-handler=com.sun.mail.handlers.message_rfc822");
                CommandMap.setDefaultCommandMap(mc);
    
                Transport.send(message);//开始发送
            } catch (MessagingException e) {
                e.printStackTrace();
            }
        }
    
    
    
    }
    

     3.使用工具包:

      but_emailtest.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    //使用HandlerThread
                    mhandlerthread=new HandlerThread("myhandlerthread");
                    mhandlerthread.start();
                     mhandler = new Handler(mhandlerthread.getLooper());
                    mhandler.post(mRunnable);
    
                }
            });
    
        }
        Runnable mRunnable = new Runnable() {
    
            @Override
            public void run() {
                NetworkUtils nu=new NetworkUtils();
                EmailUtils email=new EmailUtils();
                //emsuper.run();ail.sendToFileEmail("哈哈哈test","这是荣哦支持你下哈哈",MinShiLi.this);
                String to="fajianren@17xu.com";
                String host = "smtp.17xu.com";
                String address = "88888@17xu.com"; //发件人地址
                String from = "88888@17xu.com";
                String password = "******";// 密码
                String filepath=nu.getSDPath()+"/"+"qq.png";
                String port = "25"; //发邮件端口号
                try {
                    //email.SendEmail(host, address, from, password, to, port, "主题测试", "内容哦哈哈哈哈哈哈哈");
    //附件
                    email.SendEmailfile(host, address, from, password, to, port, "主题测试", "内容哦哈哈哈哈哈哈哈",filepath);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        };
    

     4.sd卡获取文件路径、判断网络是否链接

    package com.kllayhello.utils;
    
    import android.content.Context;
    import android.net.ConnectivityManager;
    import android.net.NetworkInfo;
    import android.os.Environment;
    
    import java.io.File;
    
    /**
     * Created by Administrator on 2016/6/30.
     */
    public class NetworkUtils {
        /**
         * 判断网络是否链接
         * */
        public boolean isNetworkConnected(Context context) {
            if (context != null) {
                ConnectivityManager mConnectivityManager = (ConnectivityManager) context
                        .getSystemService(Context.CONNECTIVITY_SERVICE);
                NetworkInfo mNetworkInfo = mConnectivityManager.getActiveNetworkInfo();
                if (mNetworkInfo != null) {
                    return mNetworkInfo.isAvailable();
                }
            }
            return false;
        }
    
    /**
     * 判断sd卡是否存在 并获取路径
     * */
    public String getSDPath(){
            File sdDir = null;
            boolean sdCardExist = Environment.getExternalStorageState()
                    .equals(android.os.Environment.MEDIA_MOUNTED);//判断sd卡是否存在
            if(sdCardExist)
            {
                sdDir = Environment.getExternalStorageDirectory();//获取跟目录
            }
            return sdDir.toString();
        }
    
    
    
    
    
    }
    

    参考文件:

    * http://cuisuqiang.iteye.com/blog/1586023

    * http://www.jb51.net/article/38158.htm
    * http://blog.csdn.net/svenke2011/article/details/8229521
    *
    * http://blog.csdn.net/mad1989/article/details/25964495
    *
    * http://blog.csdn.net/chinafe/article/details/7183400
    *http://blog.csdn.net/xanxus46/article/details/8296529
    * http://blog.csdn.net/kudy21/article/details/7665434
  • 相关阅读:
    css选择器以及块级元素、行内元素
    拒绝服务(DOS/DDOS/DRDOS)
    分布式拒绝服务攻击(DDoS)原理及防范
    不可不知 DDoS的攻击原理与防御方法(2)
    重写与隐藏
    VMWare虚拟机centos7安装redis
    APP微信支付Java后台的实现(springmvc)
    hbm2java和hbm2ddl工具
    Hibernate主键生成策略
    Oracle常用数据类型
  • 原文地址:https://www.cnblogs.com/kllay/p/5650962.html
Copyright © 2011-2022 走看看