使用JAVA工具类进行邮件发送

使用JAVA工具类进行邮件发送

使用JAVA工具类进行邮件发送


前言

提示:我们在开发过程中,经常遇到发送邮件的需求,我们往往需要考虑怎么去开发,考虑关于邮件的兼容性,很多让人烦恼的关联事务。


提示:以下是本篇文章正文内容,下面案例可供参考

一、前期准备工作

准备账号开通支持smtp发送服务
大部分使用的邮箱有两种(QQ邮箱和163网易邮箱),这里分别介绍怎么进行开通smtp服务的。。

  1. QQ邮箱开通SMTP服务
使用QQ邮箱进行发送需要进行开通QQ邮箱的邮箱客户端授权服务,获取邮箱的客户端授权码(设置——>账户——>POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务)。

在这里插入图片描述
2. 163邮箱开通SMTP服务

在这里插入图片描述
在这里插入图片描述

二、使用步骤

1.引入依赖

进行发送邮件的工具类我使用的是Hutool包里面的MailUtil进行发送邮件的。附:Hutool的工具包里面还包含大量的其他的工具类,有时间的伙伴可以参考一下。

<!-- 发送邮件引入的依赖 -->
        <dependency>
            <groupId>com.sun.mail</groupId>
            <artifactId>javax.mail</artifactId>
            <version>1.6.2</version>
        </dependency>
        <!-- 使用工具类 -->
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.7.7</version>
        </dependency>
        <!-- lombok -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.20</version>
            <scope>provided</scope>
        </dependency>

2.进行发送邮件

下面这些参数我只是在application.yml配置里面进行随便配置的参数,实际开发中可以转化为传参。

sendMail:
  config:
    mailFrom: 3175924***@QQ.com
    mailTo: wlz1385137****@163.com
    mailHost: smtp.qq.com      #mailHost: smtp.163.com
    mailPort: 465  #QQ的SSL传输端口是465/987,TCP的587 163的SSL 465/994 TCP:20
    mailPass: jzlqdadpzknf**** #申请的POM/Smtp的授权码
    mailTitle: 邮件发送的标题
    mailContent: 邮件发送的正文
    mailFile: D:\\Chrome_download\\发送邮件的附件.pdf   #附件格式不受限制,但是多大的附件没有试过。

将参数进行读取到类中:

import lombok.Data;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;

/**
 * @ program: extis-second
 * @ description: 发送邮件配置模拟发送邮件参数
 * @ author: wanglianzeng
 * @ create: 2021-08-06 16:46
 **/
@Configuration
@Component
@Data
public class SendMailConfig {

    @Value("${sendMail.config.mailFrom}")
    private String mailFrom;

    @Value("${sendMail.config.mailTo}")
    private String mailTo;

    @Value("${sendMail.config.mailHost}")
    private String mailHost;

    @Value("${sendMail.config.mailPort}")
    private Integer mailPort;

    @Value("${sendMail.config.mailPass}")
    private String mailPass;

    @Value("${sendMail.config.mailTitle}")
    private String mailTitle;

    @Value("${sendMail.config.mailContent}")
    private String mailContent;

    @Value("${sendMail.config.mailFile}")
    private String mailFile;

}

进行发送邮件模块

    //引入发送邮件配置
    private final SendMailConfig sendMailConfig;

    public SendEmailServiceImpl(SendMailConfig sendMailConfig) {
        this.sendMailConfig = sendMailConfig;
    }
    
    /***
     *  @author wanglianzeng
     *  @description 开发过程中一般发送邮件的参数是进行加密传参的,还有传参的费控检验,这里不进行模拟;并且返回类型大多数是以枚举的格式进行封装的。
     *  @date 2021/8/15 13:19
     *  @return java.lang.String
     **/
    @Override
    public String  sendMail(){
    	//采用异步发送,如果涉及一对多发送邮件,有时间的或者有兴趣的同学可以研究一下并行异步CompletableFuture.supplyAsync()
       ThreadUtil.execute(()->{
            MailAccount mailAccount = creatMailAccount();

			//读取附件,一般发送的附件也是通过传参
            File file = FileUtil.file(sendMailConfig.getMailFile());
            try {
                //参数分别为:组装的发送邮件信息  邮件接收人邮箱   邮件的主题  邮件的正文  是否是页面  附件
                String result = MailUtil.send(mailAccount, sendMailConfig.getMailTo(),
                        sendMailConfig.getMailTitle(), sendMailConfig.getMailContent(), true, file);
                log.info("发送一件的结果是result=[{}]",result);
                return result;
            }catch (Exception e){
                if (e instanceof MailException) {
                    final Throwable cause = e.getCause();
                    if (cause instanceof SendFailedException) {
                        log.error("收件人地址无效,请确认收件人");
                    }
                }
            }
            return "发送异常";
        });
    }

    /***
     *  @author wanglianzeng
     *  @description 发送邮件承载体
     *  @date 2021/8/15 13:50
     *  @return cn.hutool.extra.mail.MailAccount
     **/
    private MailAccount creatMailAccount() {
        MailAccount mailAccount = new MailAccount();
        mailAccount.setPass(sendMailConfig.getMailPass());
        mailAccount.setFrom("test<"+sendMailConfig.getMailFrom()+">");
        //发送邮件是否需要进行身份验证
        mailAccount.setAuth(true);
        mailAccount.setUser(sendMailConfig.getMailFrom());
        mailAccount.setPort(sendMailConfig.getMailPort());
        mailAccount.setHost(sendMailConfig.getMailHost());
        return mailAccount;
    }

发送邮件这里使用了工具类进行发送只供参考。实际开发中根据实际情况进行开发。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值