SpringBootmail邮箱

本文介绍了如何在Spring Boot应用中集成邮件功能,包括创建Email实体类、定义发送邮件工具类,以及使用Outlook邮箱的Host和Port。通过实例代码展示了如何构造邮件并发送,重点提到了不同邮箱服务的SMTP配置。
摘要由CSDN通过智能技术生成
1. 引入依赖
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-mail</artifactId>
</dependency>
2. 邮箱实体类
package com.mg.ecio.hlink.dto.ows.beans;

import lombok.Data;

import java.io.File;

@Data
public class Email {
    /**
     * 登录用户,发送人
     */
    private String senderAccount;
    /**
     * 发送人别名
     */
    private String senderName;
    /**
     * 密码
     */
    private String password;
    /**
     * 主机,服务地址
     */
    private String host;
    /**
     * 端口号
     */
    private String port;
    /**
     * 收件人
     */
    private String receiver;
    /**
     * html模板
     */
    private String htmlText;
    /**
     * 主题
     */
    private String subject;
    /**
     * 附件
     */
    private File file;
    /**
     * base64内容
     */
    private String base64Content;
}
3. 邮箱工具类
//声明一个Message对象(代表一封邮件),从session中创建
    private static MimeMessage getMimeMessage(JavaMailSenderImpl javaMailSender,Email email) throws MessagingException {

        MimeMessage mimeMessage = javaMailSender.createMimeMessage();

        MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage, true, "UTF-8");
        //发件人
        mimeMessageHelper.setFrom(email.getSenderAccount());
        //收件人  : 可以发送给多个收件人,该方法有一个重载的 数组形参
        mimeMessageHelper.setTo(email.getReceiver());
//        mimeMessage.setContent();

        //邮件主题
        mimeMessageHelper.setSubject(email.getSubject());

        //邮件内容,这里的htmlText如果为空,一定是"",不能为null,要不然会报Text must be not null.的错误
        // mimeMessageHelper.setText(email.getHtmlText(), true);
        // 正确的写法,为了避免text为null
        mimeMessageHelper.setText(StringTools.isEmpty(email.getHtmlText()) ? "" : email.getHtmlText(), true);
		// 避免文件不存在
        if(null != email.getFile() && email.getFile().exists()){
            mimeMessageHelper.addAttachment(email.getFile().getName(), email.getFile());
        }

        return mimeMessage;
    }

    /**
     * 发送邮件的方法
     * @Param to :给谁发邮件
     * @Param code : 邮件的激活码
     * @Param subject : 主题
     * @Param text  : 内容
     *
     */
    public static void sendMail(Email email){
        try{
            //1、创建邮件对象
            JavaMailSenderImpl javaMailSender = new JavaMailSenderImpl();
            //2、发邮件人邮箱
            javaMailSender.setUsername(email.getSenderAccount());
            //3、发邮件人邮箱密码(默认使用客户端的授权码)
            javaMailSender.setPassword(email.getPassword());
            //4、设置邮件服务器主机名  SMTP服务器地址
            javaMailSender.setHost(email.getHost());
            //5、SMTP服务器: 默认端口
            javaMailSender.setPort(Integer.parseInt(email.getPort()));
            //6、//发送邮件协议名称
            javaMailSender.setProtocol("smtp");
            //7、编码格式
            javaMailSender.setDefaultEncoding("UTF-8");

            //8、创建连接对象,连接到邮箱服务器
            Properties mailProperties = new Properties();
            //发送服务器需要身份验证,要采用指定用户名密码的方式去认证
            mailProperties.put("mail.smtp.auth", true);
            mailProperties.put("mail.smtp.starttls.enable", true);
            //9、添加连接对象到邮件对象中
            javaMailSender.setJavaMailProperties(mailProperties);

            int count = 1;
            //10、创建
            //可以发送几封邮件:可以这里 for循环多次
            MimeMessage mimeMessage = getMimeMessage(javaMailSender,email);
            //11、发送邮件
            javaMailSender.send(mimeMessage);
            logger.info("发送 第"+ count + "封邮件" );
            count ++;


            logger.info("发往 "+email.getReceiver()+" 邮件发送成功");
        } catch (MessagingException e) {
            logger.error("发往 "+email.getReceiver()+" 邮件发送异常", e);
        }
    }
4. 测试
 public static void main(String[] args) {
        System.out.println(DateTimeUtil.getSysDate());
        File file =new File("文件地址");
        String htmlText = EmailUtils.gethtml();
        Email email = new Email();
        email.setSenderAccount("发送方账号");
        email.setPassword("发送方密码");
        email.setReceiver("接收方");
        email.setHtmlText(null);
        email.setFile(file);
        email.setHost("smtp.office365.com");
        email.setPort("587");
        email.setSubject("111111111");
        MailUtils.sendMail(email);
        System.out.println(DateTimeUtil.getSysDate());
    }
5. 各邮箱的Host及Port
Outlook
Host:smtp.office365.com
Port:587
网易163
Host:smtp.163.com
Port:465或587
qq
Host:smtp.qq.com
Port:465或587
注:除Outlook之外的邮箱都需要拿到授权码作为密码
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值