• Java发送邮件工具类


    这是从根据从码云上找到的一个邮件发送开源项目进行了一定的修改后

    这里用的是Spring Boot项目进行的测试

    项目结构:

    pom文件需要引入以下三个jar包:

            <dependency>
                <groupId>commons-beanutils</groupId>
                <artifactId>commons-beanutils</artifactId>
                <version>1.9.3</version>
            </dependency>
    
            <dependency>
                <groupId>commons-logging</groupId>
                <artifactId>commons-logging</artifactId>
                <version>1.2</version>
            </dependency>
    
            <!-- https://mvnrepository.com/artifact/javax.mail/mail -->
            <dependency>
                <groupId>javax.mail</groupId>
                <artifactId>mail</artifactId>
                <version>1.4.6</version>
            </dependency>

    邮件类:

    package com.jiangwenzhang.dto;
    
    import java.util.Date;
    
    
    /**
     * 上午9:29:51
     * 
     * @version V1.0
     */
    public class MimeMessageDTO {
        /**   
         * 变量名 subject: TODO 邮件标题
         */   
        private String subject;
        
        /**   
         * 变量名 sentDate: TODO 邮件日期
         */   
        private Date sentDate;
        
        /**   
         * 变量名 text: TODO 邮件内容
         */   
        private String text;
    
        /** 
         * 方法名: initMimeMessage 
         * 功能描述: TODO 初始化
         * @param: @param subject
         * @param: @param date
         * @param: @param text
         * @param: @return  
         * @return: MimeMessageDTO 
         */
        public MimeMessageDTO initMimeMessage(String subject, Date date, String text) {
            return new MimeMessageDTO(subject, date, text);
        }
        
        public MimeMessageDTO() {
            super();
        }
    
        public MimeMessageDTO(String subject, Date sentDate, String text) {
            super();
            this.subject = subject;
            this.sentDate = sentDate;
            this.text = text;
        }
    
        public String getSubject() {
            return subject;
        }
    
        public void setSubject(String subject) {
            this.subject = subject;
        }
    
        public Date getSentDate() {
            return sentDate;
        }
    
        public void setSentDate(Date sentDate) {
            this.sentDate = sentDate;
        }
    
        public String getText() {
            return text;
        }
    
        public void setText(String text) {
            this.text = text;
        }
    
    }

    邮件发送工具类:

    package com.jiangwenzhang.util;
    
    import com.jiangwenzhang.dto.MimeMessageDTO;
    
    import java.util.List;
    import java.util.Properties;
    
    import javax.activation.DataHandler;
    import javax.activation.FileDataSource;
    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;
    
    
    /**
     * 类名称:  mailUtil
     * 功能描述: TODO 邮件发送例子
     * 创建人:  Gavin-Nie 
     * 创建时间: 2014-12-4 上午9:20:16 
     * @version  V1.0  
     */
    public class MailUtil {
        
        /**   
         * 变量名 userName: TODO 邮箱用户名
         */   
        private String userName;
        
        /**   
         * 变量名 password: TODO 邮箱地址
         */   
        private String password;
        
        /**   
         * 变量名 smtpHost: TODO 邮箱smtp地址,发送地址
         */   
        private String smtpHost;
        
        /**   
         * 变量名 targetAddress: TODO 目标邮箱地址
         */   
        private String targetAddress;
        
        /**
         *  发送单邮件
         * @param userName
         * @param password
         * @param targetAddress
         * @param mimeDTO
         * @return
         */
        public  static boolean sendEmail(String userName,String password,String targetAddress,
                MimeMessageDTO mimeDTO){
            return publicsendEmail(userName,password,targetAddress,mimeDTO,false,null);
        }
        /**
         * 发送单邮件(附件)
         * @param userName
         * @param password
         * @param targetAddress
         * @param mimeDTO
         * @param filepath        文件本地绝对路径
         * @return
         */
        public  static boolean sendEmailByFile(String userName,String password,String targetAddress,
                MimeMessageDTO mimeDTO,List<String> filepath){
            return publicsendEmail(userName,password,targetAddress,mimeDTO,true,filepath);
        }
        /**
         * 群发邮件 
         * @param userName
         * @param password
         * @param targetAddress   多个邮件发送地址,以,分隔
         * @param mimeDTO
         * @return
         */
        public  static boolean sendGroupEmail(String userName,String password,String targetAddress,
                MimeMessageDTO mimeDTO){
            return publicsendEmail(userName,password,targetAddress,mimeDTO,true,null);
        }
        /**
         * 群发邮件 (附件)
         * @param userName
         * @param password
         * @param targetAddress 多个邮件发送地址,以,分隔
         * @param mimeDTO
         * @param filepath      文件本地绝对路径
         * @return
         */
        public  static boolean sendGroupEmailByFile(String userName,String password,String targetAddress,
                MimeMessageDTO mimeDTO,List<String> filepath){
            return publicsendEmail(userName,password,targetAddress,mimeDTO,true,filepath);
        }
        
        
        
        /**
         * 邮件发送基础方法
         * @param userName
         * @param password
         * @param targetAddress
         * @param mimeDTO
         * @param isGroup
         * @param filepath
         * @return
         */
        private static boolean publicsendEmail(String userName,String password,String targetAddress,
                MimeMessageDTO mimeDTO,boolean isGroup,List<String> filepath){
            Properties props = makeMailProperties(userName);
            String hostname=SMTPUtil.SimpleMailSender(userName);
            Session session = Session.getInstance(props, new PopupAuthenticator(userName, password));
            session.setDebug(true);
            try {
                Transport ts = session.getTransport();
                ts.connect(hostname,userName,password);
                Message message =!isGroup?createEmail(session,userName,targetAddress,mimeDTO)
                        :createEmailByGroupAndFile(session,userName,
                                targetAddress,mimeDTO,filepath==null?null:filepath);
                ts.sendMessage(message,message.getAllRecipients());
                ts.close();
            } catch (Exception mex) {
                mex.printStackTrace();
                return false;
            }
            return true;
        }
        
        
        
        
        
        /**
         * 创建邮件信息
         * @param userName
         * @return
         */
        private static Properties makeMailProperties(String userName){
            Properties props = new Properties();
            String hostname=SMTPUtil.SimpleMailSender(userName);
            props.put("mail.smtp.host", hostname);
            props.setProperty("mail.smtp.auth", "true");
            props.setProperty("mail.transport.protocol", "smtp");
            if(hostname.indexOf(".qq.com")!=-1){
                props.setProperty("mail.smtp.socketFactory.port", "465");
                props.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
            }
            return props;
        }
        
        
        
        /**
         * 创建邮件
         * @Author Casper
         * Create_time:2015年10月17日 下午7:45:57
         * description:
         */
        private static Message createEmail(Session session,String userName,String regMail,MimeMessageDTO mimeDTO){
            MimeMessage message = new MimeMessage(session);
            try {
                message.setFrom(new InternetAddress(userName));
                message.setRecipient(Message.RecipientType.TO, new InternetAddress(regMail));
                message.setSubject(mimeDTO.getSubject());
                message.setContent(mimeDTO.getText(),"text/html;charset=UTF-8");
                message.saveChanges();
            } catch (MessagingException e) {
                e.printStackTrace();
            }
            return message;
        }
        /**
         * 创建群发带附件
         * @return
         */
        private static Message createEmailByGroupAndFile(Session session,String userName,
                                    String regMail,MimeMessageDTO mimeDTO,List<String> filepath){
            MimeMessage message = new MimeMessage(session);
            try {
                message.setFrom(new InternetAddress(userName));
                  // 创建收件人列表  
                if (regMail != null && regMail.trim().length() > 0) {  
                    String[] arr = regMail.split(",");  
                    int receiverCount = arr.length; 
                    if (receiverCount > 0) {
                        InternetAddress[] address = new InternetAddress[receiverCount];  
                        for (int i = 0; i < receiverCount; i++) {  
                            address[i] = new InternetAddress(arr[i]);  
                        }  
                        message.setRecipients(Message.RecipientType.TO, address);
                    }
                }
             // 后面的BodyPart将加入到此处创建的Multipart中  
                Multipart mp = new MimeMultipart();  
             // 附件操作  
                if (filepath != null && filepath.size() > 0) {  
                    for (String filename : filepath) {  
                        MimeBodyPart mbp = new MimeBodyPart();  
                        // 得到数据源  
                        FileDataSource fds = new FileDataSource(filename);  
                        // 得到附件本身并至入BodyPart  
                        mbp.setDataHandler(new DataHandler(fds));  
                        // 得到文件名同样至入BodyPart  
                        mbp.setFileName(fds.getName());  
                        mp.addBodyPart(mbp);  
                    }  
                    MimeBodyPart mbp = new MimeBodyPart();  
                    mbp.setText(mimeDTO.getText());  
                    mp.addBodyPart(mbp);  
                    // 移走集合中的所有元素  
                    filepath.clear();  
                    // Multipart加入到信件  
                    message.setContent(mp);  
                } else {  
                    // 设置邮件正文  
    //                message.setText(mimeDTO.getText());  
                    message.setContent(mimeDTO.getText(),"text/html;charset=UTF-8");
                } 
                message.setSubject(mimeDTO.getSubject());
                message.saveChanges();
            } catch (MessagingException e) {
                e.printStackTrace();
            }
            return message;
        }
        
        
        
        public String getUserName() {
            return userName;
        }
        public void setUserName(String userName) {
            this.userName = userName;
        }
        public String getPassword() {
            return password;
        }
        public void setPassword(String password) {
            this.password = password;
        }
        public String getSmtpHost() {
            return smtpHost;
        }
        public void setSmtpHost(String smtpHost) {
            this.smtpHost = smtpHost;
        }
        public String getTargetAddress() {
            return targetAddress;
        }
        public void setTargetAddress(String targetAddress) {
            this.targetAddress = targetAddress;
        }
    }

    还有PopupAuthenticator类和smtp工具类就不贴了

    使用

      @GetMapping("/send")
        public String sendmail() {
            String userName = "**@qq.com";   //用户邮箱地址
            String password = "**";    //密码或者授权码
            String targetAddress = "**@qq.com";     //接受者邮箱地
    
            // 设置邮件内容
            MimeMessageDTO mimeDTO = new MimeMessageDTO();
            mimeDTO.setSentDate(new Date());
            mimeDTO.setSubject("提醒:还款");
            mimeDTO.setText("您的信用卡还款日到了");
            String str="发送邮件:";
    //        // 发送单邮件
            if (MailUtil.sendEmail(userName, password, targetAddress, mimeDTO)) {
                str+="邮件发送成功!";
            } else {
                str+="邮件发送失败!!!";
            }
            return str;
        }

    经过测试QQ邮箱可以正常发送邮件。

  • 相关阅读:
    Redis学习03:Redis数据持久化
    Redis学习02:Redis数据类型
    项目总结42:Linux下vim操作常用指令
    Java深入学习02:CAS 算法以及低层原理
    Java深入学习01:volatile的原理和使用
    项目总结39:Springboot打jar包并本地运行
    项目总结38:使用httpcomponents: httpclient请求数据
    项目总结37:Java上传图片保存到Oracle以及读取图片
    Redis学习01:Redis配置文件redis.conf详解
    Oracle学习笔记04:timestamp时间大小比较
  • 原文地址:https://www.cnblogs.com/jiangwz/p/8708389.html
Copyright © 2020-2023  润新知