【开发心得】Spring Mail发送邮件

常见的Java-Spring 发送邮件的方式

1.官方标准JavaMail

Sun(Oracle)官方标准,功能强大,用起来比较繁琐。

官方资料:http://www.oracle.com/technetwork/java/javamail/index.html

2.第三方实现

2.1Apache Commons-Email

通过封装JavaMail,提供了常见的功能。

官方资料:http://commons.apache.org/proper/commons-email/

2.2Spring Mail

与Spring很好的集成,可以在使用Velocity 模版语言。

官方资料:http://static.springsource.org/spring/docs/3.0.x/reference/mail.html

2.3Jodd Mail

与Apache Commons-Email类似,都是对JavaMail的进一步封装。

官方资料:http://jodd.org/doc/email.html

3.自定义

3.1自己进一步封装

对Apache Commons-Email进一步封装。(可能有必要,也可能没有)

3.2完全重新实现

掌握SMTP等协议,实现协议。(高端用户可能有这个需求)

核心实现代码(stmp,默认端口25):

(1) 构造JavaMailSender

 private JavaMailSender buildJavaMailSender(EmailSMTPServerConfig config) {
        if (config == null) {
            return null;
        }

        JavaMailSenderImpl impl = new JavaMailSenderImpl();
        impl.setHost(config.getHost());
        impl.setPort(config.getPort() == null ? 25 : config.getPort());
        impl.setUsername(config.getUsername());
        impl.setPassword(config.getPassword());
        // 兼容qq邮箱 ssl协议
        if (StringUtils.endsWith(config.getHost(), "qq.com")) {
            Properties p = new Properties();
            p.setProperty("mail.smtp.ssl.enable", "true");
            impl.setJavaMailProperties(p);
        }
        return impl;
    }

(2) 发送代码

    public void send(String target, String subject, String msg) throws Exception {
        if (StringUtils.isNotEmpty(msg)) {
            SimpleMailMessage message = new SimpleMailMessage();
            message.setFrom(this.emailFrom == null ? "admin@xxx.com" : this.emailFrom);
            message.setTo(target);
            message.setSubject(subject);
            message.setText(msg);
            javaMailSender.send(message);
        }
    }

QQ 单独实现:

(1)如果是配置方式,可以在properties字段中直接指定(端口465方式)

spring:
  jackson:
    time-zone: GMT+8
  mail:
    username: xxx@qq.com
    password: yyyyyyyyy
    host: smtp.qq.com
    properties:
      mail:
        stmp:
          ssl:
            enable: true

(2) 如果是代码配置方式

// 兼容qq邮箱 ssl协议
        if (StringUtils.endsWith(config.getHost(), "qq.com")) {
            Properties p = new Properties();
            p.setProperty("mail.smtp.ssl.enable", "true");
            impl.setJavaMailProperties(p);
        }

附录:

常见邮箱客户端授权码获取方式:

  1. 腾讯

登录QQ邮箱,设置-账户-POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务 等设置

  1. 网易163邮箱 设置-POP3/SMTP/IMAP

  1. 网易126 邮箱 设置-POP3/SMTP/IMAP

4. 新浪邮箱 首页-客户端POP3/SMTP/IMAP

posted @ 2023-01-16 10:35  虹梦未来  阅读(10)  评论(0编辑  收藏  举报  来源