2021-07-06

该博客展示了如何使用Java发送带有附件和富文本内容的邮件,通过Spring Boot的`spring-boot-starter-mail`依赖,详细讲解了从数据库获取配置、实现邮件服务接口到控制器调用的全过程。
摘要由CSDN通过智能技术生成

java发送163邮箱案例

需要jar包

 <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-mail</artifactId>
    </dependency>

1、mysql数据库封装实体类信息

package common.projects.develop.entity;

import lombok.Data;
import java.io.Serializable;

@Data
public class EmailEntity implements Serializable {
    private String sender; //发送人
    private String server; //服务器
    private String protocol; //协议
    private String auth; //是否认证
    private String format; //邮件格式
    private String timeout; //超时时间
    private String code; //授权码

    public EmailEntity(String sender, String server, String protocol, String auth, String format, String timeout, String code) {
        this.sender = sender;
        this.server = server;
        this.protocol = protocol;
        this.auth = auth;
        this.format = format;
        this.timeout = timeout;
        this.code = code;
    }
}

2、email接口封装

package common.projects.develop.service;

import common.projects.develop.entity.EmailEntity;

import javax.mail.MessagingException;
import javax.mail.internet.AddressException;
import java.io.UnsupportedEncodingException;
import java.util.List;

/**
 * 发送邮件接口
 */
public interface EmailService {

   /**
    * 简单发送邮件接口(发送人 主题 内容 接收人)
    * @param sender
    * @param theme
    * @param content
    *  @param recipient
    * @return
    */
   void sendAttachmentMail(EmailEntity sender, String theme, String content, String recipient) throws MessagingException;

   /**
    * 带附件发送文件接口 (发送人 主题 内容 附件信息 接收人)
    * @param sender
    * @param theme
    * @param content
    * @param filePath
    * @param recipient
    * @return
    */
   void sendAttachment(EmailEntity sender, String theme, String content, List<String> filePath,String recipient) throws MessagingException, UnsupportedEncodingException;
}

3、接口实现类

package common.projects.develop.service.impl;

import common.projects.develop.entity.EmailEntity;
import common.projects.develop.service.EmailService;
import org.springframework.stereotype.Service;

import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.*;
import javax.mail.internet.*;
import java.io.UnsupportedEncodingException;
import java.util.Date;
import java.util.List;
import java.util.Properties;

import static javax.mail.Transport.*;

@Service
public class IEmailService implements EmailService {

    /**
     * 发送简单的邮件信息
     * @param sender
     * @param theme
     * @param content
     * @param recipient
     * @return
     */
    @Override
    public void sendAttachmentMail(EmailEntity sender, String theme, String content,String recipient) throws MessagingException {
        Session emailConfig = emailConfig(sender); //用户基本配置信息
        MimeMessage message = new MimeMessage(emailConfig); // 加载发件人信息地址
        message.setFrom(new InternetAddress(sender.getSender())); // 设置邮件的发件人
        message.setRecipients(Message.RecipientType.TO, recipient); // 设置收件人
        message.setSubject(theme); // 设置邮件标题
        message.setSentDate(new Date()); //设置邮件发送日期
        message.setContent(content, sender.getFormat()); // 设置邮件内容和格式
        // 5、发送邮件
        send(message);
    }

    /**
     * 发送带附件的邮件信息
     * @param sender
     * @param theme
     * @param content
     * @param filePath
     * @param recipient
     * @return
     */
    @Override
    public void sendAttachment(EmailEntity sender, String theme, String content, List<String> filePath,String recipient) throws MessagingException, UnsupportedEncodingException {
        Session emailConfig = emailConfig(sender); //用户基本配置信息
        emailConfig.setDebug(true); // 用session为参数定义消息对象
        MimeMessage message = new MimeMessage(emailConfig); // 加载发件人信息地址
        message.setFrom(new InternetAddress(sender.getSender())); // 设置邮件的发件人
        message.setRecipients(Message.RecipientType.TO, recipient); // 设置收件人
        message.setSubject(theme); // 设置邮件标题
        Multipart multipart = new MimeMultipart(); // 向multipart对象中添加邮件的各个部分内容,包括文本内容和附件
        BodyPart contentPart = new MimeBodyPart(); // 设置邮件的文本内容
        contentPart.setContent(content, sender.getFormat()); // 设置邮件内容和格式
        multipart.addBodyPart(contentPart); //添加身体部分

        // 附件部分
        contentPart = new MimeBodyPart();
        // 设置要发送附件的文件路径
        DataSource source = new FileDataSource("C:\\Users\\31034\\Desktop\\人员信息模板  (1).xlsx");
        contentPart.setDataHandler(new DataHandler(source));

        // 处理附件名称中文(附带文件路径)乱码问题
        contentPart.setFileName(MimeUtility.encodeText("人员信息模板  (1).xlsx"));
        multipart.addBodyPart(contentPart);
        message.setContent(content, sender.getFormat()); // 设置邮件内容和格式
        message.setSentDate(new Date()); //设置邮件发送日期
        message.setContent(multipart);
        // 5、发送邮件
        send(message);
    }


    /**
     * email初始化配置
     * @param email
     * @return
     */
    public static Session emailConfig(EmailEntity email){
        //1.配置email
        Properties props = new Properties();
        props.setProperty("mail.host", email.getServer()); // 设置邮箱服务器
        props.setProperty("mail.transport.protocol", email.getProtocol()); // 设置邮箱发送的协议
        props.setProperty("mail.smtp.timeout", email.getTimeout()); //配置邮箱发送超时
        props.setProperty("mail.smtp.auth", email.getAuth()); // 设置认证方式

        // 2、创建认证对象
        Authenticator authenticator = new Authenticator() {
            public PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication(email.getSender(), email.getCode()); //邮箱账号的授权码
            }
        };

        // 3、创建会话对象session
        Session session = Session.getInstance(props, authenticator);
        return session;
    }
}

4、controller调用层

package common.projects.develop.controller;

import common.projects.develop.annotation.PassToken;
import common.projects.develop.entity.EmailEntity;
import common.projects.develop.service.EmailService;
import common.projects.develop.util.ResultEntity;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.mail.MessagingException;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.List;

@RestController
@RequestMapping(value = "email")
@CrossOrigin
public class EmailController {

    @Autowired
    private EmailService emailService;

    @PassToken
    @PostMapping(value = "/sendAttachmentMail")
    public ResultEntity sendAttachmentMail() throws MessagingException {
        EmailEntity emailEntity = new EmailEntity("haoyaofeng2020@163.com","smtp.163.com","SMTP","true","text/html;charset=utf-8","25000","VNCBGTYASKDOTBYF");
        emailService.sendAttachmentMail(emailEntity,"你好啊","我是你的小可爱","1824958506@qq.com");
        return new ResultEntity();
    }

    @PassToken
    @PostMapping(value = "/sendAttachment")
    public ResultEntity sendAttachment() throws MessagingException, UnsupportedEncodingException {
        EmailEntity emailEntity = new EmailEntity("haoyaofeng2020@163.com","smtp.163.com","SMTP","true","text/html;charset=utf-8","25000","VNCBGTYASKDOTBYF");
        List list = new ArrayList();
        emailService.sendAttachment(emailEntity,"你好啊","<!DOCTYPE>\"+\"<div bgcolor='#f1fcfa'   style='border:1px solid #d9f4ee; font-size:14px; line-height:22px; color:#005aa0;padding-left:1px;padding-top:5px;   padding-bottom:5px;'><span style='font-weight:bold;'>温馨提示:</span>\"\n" +
                "                + \"<div style='width:950px;font-family:arial;'>欢迎使用,您的注册码为:<br/><h2 style='color:green'>\"+yzm+\"</h2><br/>本邮件由系统自动发出,请勿回复。<br/>感谢您的使用。<br/></div>\"\n" +
                "                +\"</div>",list,"1824958506@qq.com");
        return new ResultEntity();
    }
}

实现大致就是这样,支持发送内容为富文本生成的html代码块和附件同时发送;复制即可运行

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Pursue?????

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值