使用javaMail发送邮件

项目中有时会遇到发送邮件的需求。

比如: 找回密码,用户注册发送邮件点击链接激活。

javamail的使用方式很灵活,下面就记录其中一种方式。

主要三个步骤:

1、创建session

2、通过session创建message(过程中使用了MimeMessageHelper辅助构建)

3、使用Transport.send 方法发送邮件

//使用session创建message            
MimeMessage mailMessage = new MimeMessage(getSession());
            
//使用spring提供的messageHelper帮助构建message
MimeMessageHelper messageHelper = new MimeMessageHelper(mailMessage,true,"UTF-8"); 
messageHelper.setFrom(PropertiesAccessUtil.getString("mail.from", ""));

//mailContent是自己写的存放参数的类 //从传入的参数中获取接收人 if(mailContent.getTo().isEmpty()){ return; } for(String to: mailContent.getTo()){ messageHelper.addTo(to); } //从传入的参数中获取抄送人 for(String cc : mailContent.getCc()){ messageHelper.addCc(cc); }
//设置标题
messageHelper.setSubject(PropertiesAccessUtil.getString(mailContent.getSendType().template+".title", "NO TITLE"));

//通过自定义的模板+参数 构造邮件内容

String template=PropertiesAccessUtil.getString(mailContent.getSendType().template+".content", "");
String content
= buildContent(template,mailContent.getParams());
//设置邮件内容, true 表示启动HTML格式的邮件 
messageHelper.setText(content, true);

//发送邮件 Transport.send(mailMessage);
   public  Session getSession() {
        if(mysession ==  null){
            Properties prop = new Properties();
            try {
                //启用SSL认证(QQ邮箱必须,其它未测试)
                MailSSLSocketFactory sf = new MailSSLSocketFactory();
                sf.setTrustAllHosts(true);
                //smtp.exmail.qq.com  QQ企业邮箱
                prop.setProperty("mail.smtp.host", getHost());
                //465
                prop.put("mail.smtp.port", getPort());
                prop.setProperty("mail.transport.protocol", "smtp");
                prop.setProperty("mail.smtp.auth", "true");
                prop.setProperty("mail.smtp.ssl.enable", "true");
                prop.put("mail.smtp.ssl.socketFactory", sf);
            } catch (Exception e) {
                logger.error("<><>",e);
            }
            //使用getDefaultInstance方法获取session,第二个参数是一个认证类,里面包含了用户名和密码
            mysession = Session.getDefaultInstance(prop, new Authenticator() {
                @Override
                protected PasswordAuthentication getPasswordAuthentication() {
                    return new PasswordAuthentication(getUsername(),getPassword());
                }
            });
            mysession.setDebug(true);
            
        }
        return mysession;
    }
原文地址:https://www.cnblogs.com/xiao-fy/p/7589209.html