当前位置: 首页 > news >正文

【开发心得】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

相关文章:

  • 做网站的成本有多少/社交媒体营销策略有哪些
  • 汇编做网站/比较开放的浏览器
  • iis6.1添加网站/免费聊天软件
  • <网站建设与运营》/宁波seo推荐推广平台
  • 政府网站建设策略分析/精准营销的案例
  • 专做茶叶的网站/石家庄整站优化技术
  • 编译基于armV8架构的opencv,并在rock3a开发板上运行
  • Unity | 序列化(Serialized)和反序列化(NonSerialized)是什么意思
  • C/C++路面导航系统[2023-01-16]
  • Leetcode:669. 修剪二叉搜索树(C++)
  • 装修--避坑--美缝知识
  • 技术分享 | MySQL Shell 收集 MySQL 诊断报告(上)
  • 电脑磁盘占用率高怎么办?
  • 如何理解高性能服务器的高性能、高并发?
  • Opengl ES之RGB转NV21
  • 增益自适应PI控制器+死区过滤器(Smart PLC向导PID编程应用)
  • 2023-01-16 MySQL主从复制+MyCat读写分离实现
  • 二阶段法线性规划代码分享