栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

java控制发送邮箱(qq邮箱、网易邮箱、新浪邮箱)

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java控制发送邮箱(qq邮箱、网易邮箱、新浪邮箱)

这里写自定义目录标题
  • 一、背景
  • 二、实现逻辑
  • 三、工具类代码实现
  • 四、调用邮箱发送
  • 五、其他工具类(可忽略)

一、背景

需要通过动态配置邮箱,进行发送信息。这里配置的邮箱,包括不同类型的邮箱,如新浪、qq、网易等等,所以写了个动态配置的方法。

二、实现逻辑
  1. 配置服务器信息
  2. 配置发送人的授权码(后面会说明如何获取)
  3. 配置接收人、抄送人等等
  4. 配置发送信息,包括文本、图片、附件等等
三、工具类代码实现
  1. 附件类

    import lombok.Data;
    
    
    @Data
    public class FileDto {
        private String path;
        private String fileName;
    
        public FileDto(String path, String fileName) {
            this.path = path;
            this.fileName = fileName;
        }
    }
    
    
  2. 服务器信息类

    import lombok.Data;
    
    
    @Data
    public class MailDto {
        
        private String protocol;
        
        private String host;
        
        private String port;
        
        private String isAuth="true";
        
        private String isEnabledDebugMod="true";
        
        private String authorizationCode;
        
        private String from;
        
        private String setFromName;
    }
    
    
  3. 邮箱发送核心工具类(文本+附件)

    import javax.activation.DataHandler;
    import javax.activation.DataSource;
    import javax.activation.FileDataSource;
    import javax.mail.*;
    import javax.mail.internet.*;
    import java.io.File;
    import java.util.ArrayList;
    import java.util.Date;
    import java.util.List;
    import java.util.Properties;
    
    
    public class MailUtil {
    
        private static Properties props = null;
        private static Transport transport = null;
        public static List emails = new ArrayList<>();
        public static List emailsMacd = new ArrayList<>();
        private MailDto mailDto;
    
    
    
        
        public MailUtil(MailDto mail) {
            this.mailDto = mail;
        }
    
    
        
        public void sendMultipleEmail(String title, String content, Address[] receiveArray, InternetAddress toCc, InternetAddress toBcc, List files, String priority) throws Exception {
            //初始化transport
            initTransport();
            try {
                // 创建Session实例对象
                Session session = Session.getInstance(props,null);
                // 创建MimeMessage实例对象
                MimeMessage message = new MimeMessage(session);
                // 设置发送时间
                message.setSentDate(new Date());
                // 设置优先级(1:紧急   3:普通    5:低)
                message.setHeader("X-Priority", priority);
                // 设置主题
                message.setSubject(title);
                // 设置发送人
                message.setFrom(new InternetAddress(mailDto.getFrom(), mailDto.getSetFromName(), "utf-8"));
                // 设置收件人
                message.setRecipients(Message.RecipientType.TO, receiveArray);
                // 设置抄送人
                if (toCc != null) {
                    message.setRecipient(Message.RecipientType.CC, toCc);
                }
                // 设置密送人
                if (toBcc != null) {
                    message.setRecipient(Message.RecipientType.BCC, toBcc);
                }
                // 要求阅读回执(收件人阅读邮件时会提示回复发件人,表明邮件已收到,并已阅读)
                //message.setHeader("Disposition-Notification-To", mailDto.getFrom());
                // 创建一个MIME子类型为"mixed"的MimeMultipart对象,表示这是一封混合组合类型的邮件
                // 设置回复人(收件人回复此邮件时,默认收件人)
                //message.setReplyTo(InternetAddress.parse(""" + MimeUtility.encodeText("天真呢") + "" <1738708583@qq.com>"));
    
                // 创建一个MIME子类型为"mixed"的MimeMultipart对象,表示这是一封混合组合类型的邮件
                MimeMultipart mailContent = new MimeMultipart("mixed");
                //附件
                for (FileDto file : files) {
                    MimeBodyPart attach = new MimeBodyPart();
                    DataSource ds = new FileDataSource(file.getPath());
                    DataHandler dh = new DataHandler(ds);
                    attach.setFileName(MimeUtility.encodeText(file.getFileName()));
                    attach.setDataHandler(dh);
                    mailContent.addBodyPart(attach);
                }
    
                // 正文
                MimeBodyPart mailBody = new MimeBodyPart();
                MimeMultipart body = new MimeMultipart("related");  //邮件正文也是一个组合体,需要指明组合关系
                MimeBodyPart htmlPart = new MimeBodyPart();
                MimeMultipart htmlMultipart = new MimeMultipart("alternative");
                MimeBodyPart htmlContent = new MimeBodyPart();
                htmlContent.setContent(content, "text/html;charset=gbk");
                htmlMultipart.addBodyPart(htmlContent);
                htmlPart.setContent(htmlMultipart);
                body.addBodyPart(htmlPart);
                mailBody.setContent(body);
                mailContent.addBodyPart(mailBody);
    
                message.setContent(mailContent);
                // 保存邮件内容
                message.saveChanges();
                // 发送邮件
                transport.sendMessage(message, message.getAllRecipients());
                transport.close();
            } catch (Exception e) {
                e.printStackTrace();
                transport.close();
            }
    
        }
    
        
        public void initTransport() {
            props = new Properties();
            //邮件发送协议
            props.setProperty("mail.transport.protocol", mailDto.getProtocol());
            //SMTP邮件服务器
            props.setProperty("mail.smtp.host", mailDto.getHost());
            //SMTP邮件服务器默认端口
            props.setProperty("mail.smtp.port", mailDto.getPort());
      
    
四、调用邮箱发送
  1. qq邮箱发送
    1.1 实验结果:成功,并且支持跨邮箱发送
    1.2 获取授权码:登录网页版qq邮箱,设置->账号

    1.3 代码实现

    MailDto mailDto = new MailDto();
    mailDto.setProtocol("smtp");//邮件发送协议
    mailDto.setHost("smtp.qq.com");//SMTP邮件服务器
    mailDto.setPort("587");//SMTP邮件服务器默认端口
    mailDto.setAuthorizationCode("xxxxxxxxxxx");//发件人邮箱授权码
    mailDto.setFrom("173xxxxx83@qq.com");
    mailDto.setSetFromName("环保系统");
    
    //实例化工具类
    MailUtil mailUtil = new MailUtil(mailDto);    
    //接收人集合
    List list = new ArrayList<>();
    String charset = "utf-8";
    list.add(new InternetAddress("173xxxxx83@qq.com", "张三", charset));
    list.add(new InternetAddress("173xxxxx83@qq.com", "李四", charset));
    Address[] receiveArray = list.toArray(new Address[list.size()]);
    //附件集合
    List fileDtos = new ArrayList<>();
    fileDtos.add(new FileDto("C:\\Users\\86188\\Desktop\\t1.png", "t1.png"));
    fileDtos.add(new FileDto("C:\\Users\\86188\\Desktop\\t2.png", "t2.png"));
    //发送
    mailUtil.sendMultipleEmail("测试qq邮箱发送", "测试内容", receiveArray, null, null, fileDtos, "1");
    
  2. 网易邮箱发送
    2.1 实验结果:成功,但不支持跨邮箱发送,报错被对方服务器退回。暂未解决,解决的小伙伴可在评论区留言。
    2.2 获取授权码:登录网页版网易邮箱


    2.3 代码实现

    MailDto mailDto = new MailDto();
    mailDto.setProtocol("smtp");//邮件发送协议
    mailDto.setHost("smtp.163.com");//SMTP邮件服务器
    mailDto.setPort("25");//SMTP邮件服务器默认端口
    mailDto.setAuthorizationCode("xxxxxxxxxx");//发件人邮箱授权码
    mailDto.setFrom("173xxxxx83@163.com");
    mailDto.setSetFromName("环保系统");
    
    //实例化工具类
    MailUtil mailUtil = new MailUtil(mailDto);    
    //接收人集合
    List list = new ArrayList<>();
    String charset = "utf-8";
    list.add(new InternetAddress("173xxxxx83@qq.com", "张三", charset));
    list.add(new InternetAddress("173xxxxx83@qq.com", "李四", charset));
    Address[] receiveArray = list.toArray(new Address[list.size()]);
    //附件集合
    List fileDtos = new ArrayList<>();
    fileDtos.add(new FileDto("C:\\Users\\86188\\Desktop\\t1.png", "t1.png"));
    fileDtos.add(new FileDto("C:\\Users\\86188\\Desktop\\t2.png", "t2.png"));
    //发送
    mailUtil.sendMultipleEmail("测试网易邮箱发送", "测试内容", receiveArray, null, null, fileDtos, "1");
    
  3. 新浪邮箱发送
    3.1 实验结果:成功,并且支持跨邮箱发送
    3.2 获取授权码:登录网页版新浪邮箱,设置->账号

    3.3 代码实现

    MailDto mailDto = new MailDto();
    mailDto.setProtocol("smtp");//邮件发送协议
    mailDto.setHost("smtp.sina.com.cn");//SMTP邮件服务器
    mailDto.setPort("25");//SMTP邮件服务器默认端口
    mailDto.setAuthorizationCode("xxxxxxxxx");//发件人邮箱授权码
    mailDto.setFrom("173xxxxx83@sina.com");
    mailDto.setSetFromName("环保系统");
    
    //实例化工具类
    MailUtil mailUtil = new MailUtil(mailDto);    
    //接收人集合
    List list = new ArrayList<>();
    String charset = "utf-8";
    list.add(new InternetAddress("173xxxxx83@qq.com", "张三", charset));
    list.add(new InternetAddress("173xxxxx83@qq.com", "李四", charset));
    Address[] receiveArray = list.toArray(new Address[list.size()]);
    //附件集合
    List fileDtos = new ArrayList<>();
    fileDtos.add(new FileDto("C:\\Users\\86188\\Desktop\\t1.png", "t1.png"));
    fileDtos.add(new FileDto("C:\\Users\\86188\\Desktop\\t2.png", "t2.png"));
    //发送
    mailUtil.sendMultipleEmail("测试新浪邮箱发送", "测试内容", receiveArray, null, null, fileDtos, "1");
    

这里一共就演示了三种常用邮箱的发送,至于其他的邮箱配置也是八九不离十,有兴趣自行尝试。

五、其他工具类(可忽略)
  1. 邮箱发送其他简单工具类(文本、图片)(正常核心工具类已够用)

    import javax.activation.DataHandler;
    import javax.activation.DataSource;
    import javax.activation.FileDataSource;
    import javax.mail.*;
    import javax.mail.internet.*;
    import java.io.File;
    import java.util.ArrayList;
    import java.util.Date;
    import java.util.List;
    import java.util.Properties;
    
    
    public class MailUtilDemo {
    
        private static Properties props = null;
        private static Transport transport = null;
        public static List emails = new ArrayList<>();
        public static List emailsMacd = new ArrayList<>();
        private MailDto mailDto;
    
        public static void main(String[] args) throws Exception {
            MailDto mailDto = new MailDto();
            mailDto.setProtocol("smtp");//邮件发送协议
            mailDto.setHost("smtp.qq.com");//SMTP邮件服务器
            mailDto.setPort("587");//SMTP邮件服务器默认端口
            mailDto.setIsAuth("true");//是否要求身份认证
            mailDto.setIsEnabledDebugMod("true");//是否启用调试模式(启用调试模式可打印客户端与服务器交互过程时一问一答的响应消息)
            mailDto.setAuthorizationCode("xxxxxxxxxx");//发件人邮箱授权码
            mailDto.setFrom("173xxxxxxxxxx@qq.com");
            mailDto.setSetFromName("环保系统");
    
            MailUtilDemo mailUtil = new MailUtilDemo(mailDto);
            //===========================测试文本===========================
            mailUtil.sendTextEmail("173xxxxxxxxxx3@qq.com", "测试发送", "测试发送");
            //===========================测试html内容===========================
            mailUtil.sendHtmlEmail("173xxxxxxxxxx@qq.com", "888");
            //===========================测试图片===========================
            mailUtil.sendHtmlWithInnerImageEmail("173xxxxxxxxxx@qq.com", "17xxxxxxxxxx3@qq.com", "1xxxxxxxxxx3@qq.com", "C:\Users\86188\Desktop\t1.png", "testpng");
    
        }
    
        
        public MailUtilDemo(MailDto mail) {
            this.mailDto = mail;
        }
    
    
        
        public boolean sendTextEmail(String to, String title, String content) throws Exception {
            try {
                //初始化transport
                initTransport();
                Session session = Session.getInstance(props, null);
                // 创建MimeMessage实例对象
                MimeMessage message = new MimeMessage(session);
                // 设置发件人
                message.setFrom(new InternetAddress(mailDto.getFrom()));
                // 设置邮件主题
                message.setSubject(title);
                // 设置收件人
                message.setRecipient(Message.RecipientType.TO, new InternetAddress(to));
                // 设置发送时间
                message.setSentDate(new Date());
                // 设置纯文本内容为邮件正文
                message.setText(content);
                // 保存并生成最终的邮件内容
                message.saveChanges();
                if (!transport.isConnected()) {
                    transport.connect(mailDto.getFrom(), mailDto.getAuthorizationCode());
                }
                // 将message对象传递给transport对象,将邮件发送出去
                transport.sendMessage(message, message.getAllRecipients());
                transport.close();
                return true;
            } catch (Exception e) {
                transport.close();
                e.printStackTrace();
                return false;
            }
        }
    
    
        
        public boolean sendHtmlEmail(String to, String code) throws Exception {
    
            try {
                //初始化transport
                initTransport();
                // 创建Session实例对象
                Session session = Session.getInstance(props, null);
    
                // 创建MimeMessage实例对象
                MimeMessage message = new MimeMessage(session);
                // 设置邮件主题
                message.setSubject("内燃机注册");
                // 设置发送人
                message.setFrom(new InternetAddress(mailDto.getFrom()));
                // 设置发送时间
                message.setSentDate(new Date());
                // 设置收件人
                message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to));
                // 设置html内容为邮件正文,指定MIME类型为text/html类型,并指定字符编码为gbk
                message.setContent(""
                                + "

    获取验证码" + "

    尊敬的用户您好:

    " + "

    验证码是:" + code + ",有效期10分钟!如果过期请重新获取。

    " + "

    天真热

    " + "", "text/html;charset=utf-8"); // 保存并生成最终的邮件内容 message.saveChanges(); // 将message对象传递给transport对象,将邮件发送出去 transport.sendMessage(message, message.getAllRecipients()); System.err.println("发送邮件成功"); // 关闭连接 transport.close(); return true; } catch (Exception e) { transport.close(); e.printStackTrace(); return false; } } public void sendHtmlWithInnerImageEmail(String to, String toCc, String toMs, String path, String contentId) throws MessagingException { //初始化transport initTransport(); // 创建Session实例对象 Session session = Session.getDefaultInstance(props, null); // 创建邮件内容 MimeMessage message = new MimeMessage(session); // 邮件主题,并指定编码格式 message.setSubject("带内嵌图片的HTML邮件", "utf-8"); // 发件人 message.setFrom(new InternetAddress(mailDto.getFrom())); // 收件人 message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to)); // 抄送 message.setRecipient(Message.RecipientType.CC, new InternetAddress(toCc)); // 密送 (不会在邮件收件人名单中显示出来) message.setRecipient(Message.RecipientType.BCC, new InternetAddress(toMs)); // 发送时间 message.setSentDate(new Date()); // 创建一个MIME子类型为“related”的MimeMultipart对象 MimeMultipart mp = new MimeMultipart("related"); // 创建一个表示正文的MimeBodyPart对象,并将它加入到前面创建的MimeMultipart对象中 MimeBodyPart htmlPart = new MimeBodyPart(); mp.addBodyPart(htmlPart); // 创建一个表示图片资源的MimeBodyPart对象,将将它加入到前面创建的MimeMultipart对象中 MimeBodyPart imagePart = new MimeBodyPart(); mp.addBodyPart(imagePart); // 将MimeMultipart对象设置为整个邮件的内容 message.setContent(mp); // 设置内嵌图片邮件体 DataSource ds = new FileDataSource(new File(path)); DataHandler dh = new DataHandler(ds); imagePart.setDataHandler(dh); imagePart.setContentID(contentId); // 设置内容编号,用于其它邮件体引用 // 创建一个MIME子类型为"alternative"的MimeMultipart对象,并作为前面创建的htmlPart对象的邮件内容 MimeMultipart htmlMultipart = new MimeMultipart("alternative"); // 创建一个表示html正文的MimeBodyPart对象 MimeBodyPart htmlBodypart = new MimeBodyPart(); // 其中cid=androidlogo.gif是引用邮件内部的图片,即imagePart.setContentID("androidlogo.gif");方法所保存的图片 htmlBodypart.setContent("图片邮件 + contentId + "" />", "text/html;charset=utf-8"); htmlMultipart.addBodyPart(htmlBodypart); htmlPart.setContent(htmlMultipart); // 保存并生成最终的邮件内容 message.saveChanges(); // 发送邮件 // 将message对象传递给transport对象,将邮件发送出去 transport.sendMessage(message, message.getAllRecipients()); System.err.println("发送邮件成功"); // 关闭连接 transport.close(); } public void initTransport() { props = new Properties(); //邮件发送协议 props.setProperty("mail.transport.protocol", mailDto.getProtocol()); //SMTP邮件服务器 props.setProperty("mail.smtp.host", mailDto.getHost()); //SMTP邮件服务器默认端口 props.setProperty("mail.smtp.port", mailDto.getPort()); //是否要求身份认证 props.setProperty("mail.smtp.auth", mailDto.getIsAuth()); //是否启用调试模式(启用调试模式可打印客户端与服务器交互过程时一问一答的响应消息) props.setProperty("mail.debug", mailDto.getIsEnabledDebugMod()); Session session = Session.getInstance(props, null); try { // 获得Transport实例对象 transport = session.getTransport(); // 打开连接 transport.connect(mailDto.getFrom(), mailDto.getAuthorizationCode()); } catch (MessagingException e) { e.printStackTrace(); } } }

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/871337.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号