• android 发送邮件--实现 send email for android


    Android 发送邮件消息

    用途:发送验证码,通过邮箱找回密码

    不需要调用客户端直接使用代码进行发送

    本项目使用到的jar包–本文结尾会附带下载链接

    1. activation.jar
    2. additionnal.jar
    3. mail.jar

    主Activity代码:

    具体页面结构:一个按钮,点击按钮发送邮件到指定的邮箱

    按钮的点击事件逻辑

    记得链接网络必须在子线程中

        /**
         * 发送邮件
         * 我这里是用的163邮箱发送到QQ邮箱
         * 所以设置的MailServerHost为smtp.163.com
         * 如果是QQ邮箱进行发送的话为smtp.qq.com
         * 端口号请自行查阅是否为25
         * 邮箱密码在后面有具体的说明,请看一下
         */
        private void sendEmail() {
            try {
                MailSenderInfo mailInfo = new MailSenderInfo();
                mailInfo.setMailServerHost("smtp.163.com");
                mailInfo.setMailServerPort("25");
                mailInfo.setValidate(true);
                mailInfo.setUserName("你的邮箱地址");  //你的邮箱地址
                mailInfo.setPassword("您的邮箱密码");//您的邮箱密码
                mailInfo.setFromAddress("你的邮箱地址");//和上面username的邮箱地址一致
                mailInfo.setToAddress("接收方的邮件地址");
                mailInfo.setSubject("邮件主题");
                mailInfo.setContent("邮件内容");
    
                //这个类主要来发送邮件
                SimpleMailSender sms = new SimpleMailSender();
                boolean b = sms.sendTextMail(mailInfo);//发送文体格式,返回是否发送成功的boolean类型
    
                Log.e("MainActivity", "MainActivity sendEmail()"+b);//sms.sendHtmlMail(mailInfo);//发送html格式
    
            } catch (Exception e) {
                Log.e("SendMail", e.getMessage(), e);
            }
        }
    

    关于邮箱密码的说明

    由于是android端发送邮件,属于客户端进行发送邮件,所以直接用邮件的登录密码进行发送是不可以的,需要在PC网页端进行设置自己的邮箱:开启POP3/SMTP/IMAP服务

    QQ邮箱和163邮箱的设置方法

    163邮箱设置方法-你的感冒清

    QQ邮箱设置方法-你的感冒清

    邮件的实体类代码

    
        public class MailSenderInfo {
            // 发送邮件的服务器的IP和端口
            private String mailServerHost;
            private String mailServerPort = "25";
    
            // 邮件发送者的地址
            private String fromAddress;
            // 邮件接收者的地址
            private String toAddress;
            // 登陆邮件发送服务器的用户名和密码
            private String userName;
            private String password;
            // 是否需要身份验证
            private boolean validate = true;
            // 邮件主题
            private String subject;
            // 邮件的文本内容
            private String content;
            // 邮件附件的文件名
            private String[] attachFileNames;
    
            /**
             * 获得邮件会话属性
             */
            public Properties getProperties() {
                Properties p = new Properties();
                p.put("mail.smtp.host", this.mailServerHost);
                p.put("mail.smtp.port", this.mailServerPort);
                p.put("mail.smtp.auth", validate ? "true" : "false");
                return p;
            }
    
            public String getMailServerHost() {
                return mailServerHost;
            }
    
            public void setMailServerHost(String mailServerHost) {
                this.mailServerHost = mailServerHost;
            }
    
            public String getMailServerPort() {
                return mailServerPort;
            }
    
            public void setMailServerPort(String mailServerPort) {
                this.mailServerPort = mailServerPort;
            }
    
            public boolean isValidate() {
                return validate;
            }
    
            public void setValidate(boolean validate) {
                this.validate = validate;
            }
    
            public String[] getAttachFileNames() {
                return attachFileNames;
            }
    
            public void setAttachFileNames(String[] fileNames) {
                this.attachFileNames = fileNames;
            }
    
            public String getFromAddress() {
                return fromAddress;
            }
    
            public void setFromAddress(String fromAddress) {
                this.fromAddress = fromAddress;
            }
    
            public String getPassword() {
                return password;
            }
    
            public void setPassword(String password) {
                this.password = password;
            }
    
            public String getToAddress() {
                return toAddress;
            }
    
            public void setToAddress(String toAddress) {
                this.toAddress = toAddress;
            }
    
            public String getUserName() {
                return userName;
            }
    
            public void setUserName(String userName) {
                this.userName = userName;
            }
    
            public String getSubject() {
                return subject;
            }
    
            public void setSubject(String subject) {
                this.subject = subject;
            }
    
            public String getContent() {
                return content;
            }
    
            public void setContent(String textContent) {
                this.content = textContent;
            }
      }
    
    

    简单邮件(不带附件的邮件)发送器 代码

    
        /**
         * 简单邮件(不带附件的邮件)发送器
         */
        public class SimpleMailSender {
            /**
             * 以文本格式发送邮件
             *
             * @param mailInfo 待发送的邮件的信息
             */
            public boolean sendTextMail(MailSenderInfo mailInfo) {
                // 判断是否需要身份认证
                MyAuthenticator authenticator = null;
                Properties pro = mailInfo.getProperties();
                if (mailInfo.isValidate()) {
                    // 如果需要身份认证,则创建一个密码验证器
                    authenticator = new MyAuthenticator(mailInfo.getUserName(), mailInfo.getPassword());
                }
                // 根据邮件会话属性和密码验证器构造一个发送邮件的session
                Session sendMailSession = Session.getDefaultInstance(pro, authenticator);
                try {
                    // 根据session创建一个邮件消息
                    Message mailMessage = new MimeMessage(sendMailSession);
                    // 创建邮件发送者地址
                    Address from = new InternetAddress(mailInfo.getFromAddress());
                    // 设置邮件消息的发送者
                    mailMessage.setFrom(from);
                    // 创建邮件的接收者地址,并设置到邮件消息中
                    Address to = new InternetAddress(mailInfo.getToAddress());
                    mailMessage.setRecipient(Message.RecipientType.TO, to);
                    // 设置邮件消息的主题
                    mailMessage.setSubject(mailInfo.getSubject());
                    // 设置邮件消息发送的时间
                    mailMessage.setSentDate(new Date());
                    // 设置邮件消息的主要内容
                    String mailContent = mailInfo.getContent();
                    mailMessage.setText(mailContent);
                    // 发送邮件
                    Transport.send(mailMessage);
                    return true;
                } catch (MessagingException ex) {
                    ex.printStackTrace();
                }
                return false;
            }
    
            /**
             * 以HTML格式发送邮件
             *
             * @param mailInfo 待发送的邮件信息
             */
            public static boolean sendHtmlMail(MailSenderInfo mailInfo) {
                // 判断是否需要身份认证
                MyAuthenticator authenticator = null;
                Properties pro = mailInfo.getProperties();
                //如果需要身份认证,则创建一个密码验证器
                if (mailInfo.isValidate()) {
                    authenticator = new MyAuthenticator(mailInfo.getUserName(), mailInfo.getPassword());
                }
                // 根据邮件会话属性和密码验证器构造一个发送邮件的session
                Session sendMailSession = Session.getDefaultInstance(pro, authenticator);
                try {
                    // 根据session创建一个邮件消息
                    Message mailMessage = new MimeMessage(sendMailSession);
                    // 创建邮件发送者地址
                    Address from = new InternetAddress(mailInfo.getFromAddress());
                    // 设置邮件消息的发送者
                    mailMessage.setFrom(from);
                    // 创建邮件的接收者地址,并设置到邮件消息中
                    Address to = new InternetAddress(mailInfo.getToAddress());
                    // Message.RecipientType.TO属性表示接收者的类型为TO
                    mailMessage.setRecipient(Message.RecipientType.TO, to);
                    // 设置邮件消息的主题
                    mailMessage.setSubject(mailInfo.getSubject());
                    // 设置邮件消息发送的时间
                    mailMessage.setSentDate(new Date());
                    // MiniMultipart类是一个容器类,包含MimeBodyPart类型的对象
                    Multipart mainPart = new MimeMultipart();
                    // 创建一个包含HTML内容的MimeBodyPart
                    BodyPart html = new MimeBodyPart();
                    // 设置HTML内容
                    html.setContent(mailInfo.getContent(), "text/html; charset=utf-8");
                    mainPart.addBodyPart(html);
                    // 将MiniMultipart对象设置为邮件内容
                    mailMessage.setContent(mainPart);
                    // 发送邮件
                    Transport.send(mailMessage);
                    return true;
                } catch (MessagingException ex) {
                    ex.printStackTrace();
                }
                return false;
            }
    }
    
    

    辅助类

    
        public class MyAuthenticator extends Authenticator {
            String userName = null;
            String password = null;
    
            public MyAuthenticator() {
            }
    
            public MyAuthenticator(String username, String password) {
                this.userName = username;
                this.password = password;
            }
    
            protected PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication(userName, password);
            }
    }
    
    

    相关jar包下载

    相关jar包一键打包下载

    中间可能会遇到的问题

    可能会出现的问题-你的感冒清

    笔者QQ:你的感冒清(337081267)

  • 相关阅读:
    编写代码的「八荣八耻」- 以用户易用为荣,以复杂歧义为耻
    《跃迁-成为高手的技术》之联机学习
    《跃迁-成为高手的技术》感悟
    JAVA SPI(Service Provider Interface)原理、设计及源码解析(其一)
    测试了一下编解码的执行效果
    谈面试中的亮点
    稳定性「三十六计」实战和背后的逻辑
    Python,Jupyter Notebook,IPython快速安装教程
    Python多进程编程
    R语言基础:数组&列表&向量&矩阵&因子&数据框
  • 原文地址:https://www.cnblogs.com/shaofeer/p/11154402.html
Copyright © 2020-2023  润新知