一个会发邮件的Java

关于发邮件

  • 开启QQ邮箱的POP3/SMTP服务,然后获取16位授权码(注意不要将授权码泄露)
    在这里插入图片描述
  • 邮件发送のJava代码
application.yml 配置
spring:
  mail:
    host: smtp.qq.com # 邮箱服务器地址
    username: 963726646@qq.com # 发件人邮箱
    password: pbfybhqakzdfbbjb #开启POP3之后设置的客户端授权码
    default-encoding: UTF-8  # 编码
    port: 587 #端口号465587
    protocol: smtp
pom.xml 需要的jar
    <!-- email -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-mail</artifactId>
        <version>2.2.6.RELEASE</version>
    </dependency>

邮件实体类

package com.zcf.entity;

import lombok.Data;
import org.springframework.core.io.FileSystemResource;

/**
 * 邮件实体类
 * @author zhangchuanfei
 * @create 2020-05-16-9:54
 */
@Data 
public class Mail {

    /**
     * 接受邮箱
     */
    private String getName;

    /**
     * 邮件标题
     */
    private String project;

    /**
     * 邮件内容
     */
    private String content;

    /**
     * 附件
     */
    private FileSystemResource file;

    /**
     * 附件名称
     */
    private String attachmentFilename;

    /**
     * 内容ID,用于发送静态资源邮件时使用
     */
    private String contentId;
}

Email工具类
package com.zcf.utils;

import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import com.zcf.entity.Mail;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Component;

/**
 * @author zhangchuanfei
 * @create 2020-05-16-9:53
 */
@Component
public class EmailUtil {

    @Autowired
    private JavaMailSender mailSender; // 自动注入的Bean

    @Value("${spring.mail.username}")
    private String sender; // 读取配置文件中的参数

    /**
     * 发送简易邮件
     * @param mailBean
     */
    public void sendMail(Mail mailBean) {
        MimeMessage mimeMessage = mailSender.createMimeMessage();
        MimeMessageHelper helper = new MimeMessageHelper(mimeMessage);

        try {
            helper.setFrom(sender);
            helper.setTo(mailBean.getGetName());
            helper.setSubject(mailBean.getProject());
            helper.setText(mailBean.getContent());
        } catch (MessagingException e) {
            e.printStackTrace();
        }

        mailSender.send(mimeMessage);
    }

    /**
     * 发送邮件-邮件正文是HTML
     *
     * @param mailBean
     */
    public void sendMailHtml(Mail mailBean) {
        MimeMessage mimeMessage = mailSender.createMimeMessage();
        MimeMessageHelper helper = new MimeMessageHelper(mimeMessage);

        try {
            helper.setFrom(sender);
            helper.setTo(mailBean.getGetName());
            helper.setSubject(mailBean.getProject());
            helper.setText(mailBean.getContent(), true);
        } catch (MessagingException e) {
            e.printStackTrace();
        }

        mailSender.send(mimeMessage);
    }

    /**
     * 发送邮件-附件邮件
     *
     * @param mailBean
     */
    public void sendMailAttachment(Mail mailBean) {
        try {
            MimeMessage mimeMessage = mailSender.createMimeMessage();
            MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
            helper.setFrom(sender);
            helper.setTo(mailBean.getGetName());
            helper.setSubject(mailBean.getProject());
            helper.setText(mailBean.getContent(), true);
            // 增加附件名称和附件
            helper.addAttachment(mailBean.getAttachmentFilename(), mailBean.getFile());
            mailSender.send(mimeMessage);
        } catch (MessagingException e) {
            e.printStackTrace();
        }
    }

    /**
     * 内联资源(静态资源)邮件发送
     * 由于邮件服务商不同,可能有些邮件并不支持内联资源的展示
     * 在测试过程中,新浪邮件不支持,QQ邮件支持
     * 不支持不意味着邮件发送不成功,而且内联资源在邮箱内无法正确加载
     *
     * @param mailBean
     */
    public void sendMailInline(Mail mailBean) {
        try {
            MimeMessage mimeMessage = mailSender.createMimeMessage();
            MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
            helper.setFrom(sender);
            helper.setTo(mailBean.getGetName());
            helper.setSubject(mailBean.getProject());

            /*
             * 内联资源邮件需要确保先设置邮件正文,再设置内联资源相关信息
             */
            helper.setText(mailBean.getContent(), true);
            helper.addInline(mailBean.getContentId(), mailBean.getFile());

            mailSender.send(mimeMessage);
        } catch (MessagingException e) {
            e.printStackTrace();
        }
    }

    /**
     * 模板邮件发送
     *
     * @param mailBean
     */
    public void sendMailTemplate(Mail mailBean) {
        try {
            MimeMessage mimeMessage = mailSender.createMimeMessage();
            MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
            helper.setFrom(sender);
            helper.setTo(mailBean.getGetName());
            helper.setSubject(mailBean.getProject());
            helper.setText(mailBean.getContent(), true);
            mailSender.send(mimeMessage);
        } catch (MessagingException e) {
            e.printStackTrace();
        }
    }
}

实现邮件发送
    /**
     * 发送邮件
     * @param getName 邮件接受者
     * @param project 主题
     * @param content 内容
     * @return
     */
    @PostMapping("/email/sendEmail")
    @ResponseBody
    public Result sendEmail(String getName,String project,String content){
        mailService.sendSimpleMail(getName,project,content);
        return Result.ok();
    }



    @Override
    public void sendSimpleMail(String to, String subject, String content){
        Mail mail =new Mail();
        mail.setGetName(to);
        mail.setProject(subject);
        mail.setContent(content);
        mailUtil.sendMail(mail);
        log.info("发送成功");
    }

在这里插入图片描述

在这里插入图片描述
这样一个简单的邮件发送功能已经完成。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值