zoukankan      html  css  js  c++  java
  • 使用Java发送qq邮件

    邮件发送

    环境说明:

    • 建立一个maven工程
    • qq邮箱开启pop3和smtp服务

    1. 获取邮箱授权码

    打开qq邮箱设置按下图操作

    2. 需要的依赖

    <dependency>
        <groupId>javax.mail</groupId>
        <artifactId>mail</artifactId>
        <version>1.4.7</version>
    </dependency>
    

    3. 创建一个邮件工具类

    package com.gxa.yonghu.util;
    
    import com.sun.mail.util.MailSSLSocketFactory;
    
    import javax.mail.*;
    import javax.mail.internet.InternetAddress;
    import javax.mail.internet.MimeMessage;
    import java.util.Properties;
    
    /**
     * @author 枫叶
     * @version 1.0
     * @date 2020/12/22
     */
    public class MailUtil implements Runnable {
        //  发件人账号
        public final static String MAIL_NAME = "发件人账户";
        //  发件人授权码
        public final static String MAIL_CODE = "第一步中获取的授权码";
        // 登录的用户名
        private String username = null;
        // 收件人邮箱
        private String email = null;
        //邮件主题
        private String motif = null;
        //邮件内容
        private String contentText = null;
    
        public MailUtil(String username, String email, String motif, String content) {
            this.username = username;
            this.email = email;
            this.motif = motif;
            this.contentText = content;
        }
    
        @Override
        public void run() {
            // 指定发送邮件的主机smtp.qq.com(QQ)|smtp.163.com(网易)  这里需要继续扩展做判断分支处理
            String host = "smtp.qq.com";
            // 获取系统属性
            Properties properties = System.getProperties();
            // 设置邮件服务器
            properties.setProperty("mail.smtp.host", host);
            // 打开认证
            properties.setProperty("mail.smtp.auth", "true");
    
            try {
                //QQ邮箱需要下面这段代码,163邮箱不需要
                MailSSLSocketFactory sf = new MailSSLSocketFactory();
                sf.setTrustAllHosts(true);
                properties.put("mail.smtp.ssl.enable", "true");
                properties.put("mail.smtp.ssl.socketFactory", sf);
    
                // 1.获取默认session对象
                Session session = Session.getDefaultInstance(properties, new Authenticator() {
                    @Override
                    public PasswordAuthentication getPasswordAuthentication() {
                        // 发件人邮箱账号、授权码
                        return new PasswordAuthentication(MailUtil.MAIL_NAME, MailUtil.MAIL_CODE);
                    }
                });
    
                // 2.创建邮件对象
                Message message = new MimeMessage(session);
    
                // 3.设置发件人
                message.setFrom(new InternetAddress(MailUtil.MAIL_NAME));
    
                // 4.设置收件人
                message.addRecipient(Message.RecipientType.TO, new InternetAddress(email));
    
                // 5.设置邮件主题
                message.setSubject(motif);
    
                // 6.设置邮件内容
                String content = "<html><head></head><body>" + contentText + "</body></html>";
                message.setContent(content, "text/html;charset=UTF-8");
    
                // 7.发送邮件
                // 阻塞方法
                Transport.send(message);
                System.out.println("邮件成功发送!");
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    

    4. 发送邮件

    这里用servlet做演示,接收一个包含邮箱信息的json

    /**
     * @author 枫叶
     * @version 1.0
     * @date 2020/12/22
     */
    @WebServlet(value = "/mail/send",name = "mail")
    public class MailServlet extends HttpServlet {
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            doPost(req,resp);
        }
    
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            //这里使用了fastJson解析,若不想使用fastJSON可以自己使用自己喜欢的解析方式,fastJSON依赖如下
            /**
             *         <dependency>
             *             <groupId>com.alibaba</groupId>
             *             <artifactId>fastjson</artifactId>
             *             <version>1.2.72</version>
             *         </dependency>
             */
            JSONObject json = JSONObject.parseObject(req.getReader().readLine());
            //获取参数
            String email = json.getString("email");
            System.out.println(json);
            //参数验证
            if (email==null||"".equals(email)){
                resp.getWriter().println(DataResponse.error(400,"参数不足"));
                return;
            }
            
            //其它业务
            
            //创建html邮件内容,只需输入body中的代码
            String content = "<h1>邮件标题</h1>"
                    +"邮件内容";
            MailUtil mail = new MailUtil("发件人", email,"邮件主题",content);
            //发送邮件
            new Thread(mail).start();
            resp.getWriter().println(DataResponse.ok());
        }
    }
    

    5. 上面用到的返回封装类DataResponse如下

    public class DataResponse{
        private final Map<String,Object> result;
    
        @Override
        public String toString() {
                //这里也用到了fastJSON并且设置了日期的格式化格式
            JSON.DEFFAULT_DATE_FORMAT = "yyyy-MM-dd hh:mm:ss";
            return JSON.toJSONString(result,SerializerFeature.WriteDateUseDateFormat);
        }
    
        public DataResponse(Integer code,String msg,Object data){
            result = new HashMap<>();
            result.put("code",code);
            result.put("msg",msg);
            result.put("data",data);
        }
    
        public DataResponse(Integer code,String msg){
            this(code,msg,null);
        }
    
        public DataResponse() {
            result=new HashMap<>();
        }
    
        public DataResponse put(String key,Object value){
            result.put(key,value);
            return this;
        }
    
        public static DataResponse ok(){
            return new DataResponse(200,"成功!");
        }
    
        public static DataResponse ok(String msg){
            return new DataResponse(200,msg);
        }
    
        public static DataResponse ok(int code,String msg){
            return new DataResponse(code,msg);
        }
        public static DataResponse ok(String msg,Object data){
            return new DataResponse(200,msg,data);
        }
        public static DataResponse ok(int code,String msg,Object data){
            return new DataResponse(200,msg,data);
        }
    
        public static DataResponse error(){
            return new DataResponse(500,"服务器错误,操作失败!");
        }
    
        public static DataResponse error(String msg){
            return new DataResponse(500,msg);
        }
    
        public static DataResponse error(int code,String msg){
            return new DataResponse(code,msg);
        }
    
        public Object get(String key){
            return result.get(key);
        }
    
        public Object getData(){
            return result.get("data");
        }
    
        public void setCode(int code) {
            result.put("code",code);
        }
    
        public void setMsg(String msg) {
            result.put("msg",msg);
        }
    
        public void setData(Object data) {
            result.put("data",data);
        }
    
    }
    

    6. 启动服务发送邮件

  • 相关阅读:
    Java发生的重大事件
    Java的特点
    JVM的整体结构
    JVM生态圈
    简历不造假,根本就找不到工作?如果你这样想就OUT了
    C语言必背18个经典程序,你记住了吗
    黑客入侵的常用手段,你真的要做好防护了
    从零开始自学Linux,一篇文章带你快速找准学习方向
    还在担心学Linux懵圈吗?掌握这份Linux思维导图,你就能成为高手
    为何计算机专业大一期间先选择学习C语言,而不是其他语言呢?
  • 原文地址:https://www.cnblogs.com/junlinsky/p/14182774.html
Copyright © 2011-2022 走看看