在现代软件开发中,邮件功能是一个非常实用的功能,例如注册验证、通知提醒等场景都会用到。本文将详细介绍如何使用 Java 来发送电子邮件,从开通邮件服务开始,逐步介绍依赖引入、配置以及代码实现。

1. 开通邮件服务

我们可以选择常见的 QQ 邮箱或 163 邮箱来进行邮件发送。这里以 QQ 邮箱为例,开通步骤如下:

开启 POP3/SMTP 服务

登录 QQ 邮箱,点击左上角的“设置” -> “账号”,在“POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV 服务”中开启 POP3/SMTP 服务。按照提示操作,可能需要发送短信进行验证,验证通过后会获得一个授权码,这个授权码在后续配置中会用到。

image-MoCY.png

image-dYMZ.png

记录授权码

开启服务后,会弹出一个窗口显示授权码,一定要妥善保存这个授权码,它将作为后续配置中的密码。

2. 引入依赖

我们使用 Spring Boot 来简化开发,所以需要在项目的 pom.xml 文件中引入 spring-boot-starter-mail 依赖:

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

3. 配置

application.ymlapplication.properties 文件中配置邮件相关信息,以 application.yml 为例:

spring:
  # 配置电子邮件信息
  mail:
    host: smtp.qq.com
    port: 465
    password: xxxxxxxxxxxx  # 这里填写刚才获取的授权码
    username: xxxxx@qq.com  # 填写你的邮箱地址
    protocol: smtps
  • host:邮件服务器地址,QQ 邮箱的 SMTP 服务器地址是 smtp.qq.com

  • port:端口号,QQ 邮箱使用的端口号是 465。

  • password:填写刚才获取的授权码。

  • username:填写你的邮箱地址。

  • protocol:使用的协议,这里使用 smtps

4. 编写代码

下面是一个简单的 Java 测试类,包含发送简单文本邮件和带附件的 HTML 邮件的示例:

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
​
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import java.io.File;
​
@SpringBootTest
public class SendMailTest {
​
    @Autowired
    private JavaMailSender javaMailSender;
​
    /**
     * 测试发送简单文本邮件
     */
    @Test
    public void testSendSimpleMail() {
        SimpleMailMessage simpleMailMessage = new SimpleMailMessage();
        simpleMailMessage.setFrom("34343434@qq.com");  // 发件人邮箱
        simpleMailMessage.setCc("34344.3434343@163.com", "zhangruizhe0912@foxmail.com"); // 抄送邮箱
        simpleMailMessage.setBcc("1500317030@qq.com"); // 密送邮箱
        simpleMailMessage.setSubject("Mail 测试邮箱");  // 邮件主题
        simpleMailMessage.setText("这是一封测试邮件 .....");  // 邮件内容
​
        javaMailSender.send(simpleMailMessage);
    }
​
    /**
     * 测试发送带附件的 HTML 邮件
     */
    @Test
    public void testSendMail() throws Exception {
        MimeMessage mimeMessage = javaMailSender.createMimeMessage();
        MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage, true);
        mimeMessageHelper.setFrom("23232323@qq.com");  // 发件人邮箱
        mimeMessageHelper.setTo("zhangruizhe0912@foxmail.com");  // 收件人邮箱
        mimeMessageHelper.setCc("232322323@163.com"); // 抄送邮箱
        mimeMessageHelper.setBcc("1500317030@qq.com"); // 密送邮箱
        mimeMessageHelper.setSubject("Mail 测试邮箱");  // 邮件主题
​
        mimeMessageHelper.setText("<h1>这是一封测试邮件 .....</h1>", true);  // 邮件内容,设置为 HTML 格式
        mimeMessageHelper.addAttachment("1.jpg", new File("C:\\Users\\Administrator\\Pictures\\Camera Roll\\10.jpg"));  // 添加附件
        mimeMessageHelper.addAttachment("2.pdf", new File("E:\\合同.pdf"));  // 添加附件
        javaMailSender.send(mimeMessage);
    }
}

代码解释

  • testSendSimpleMail 方法:使用 SimpleMailMessage 类发送简单的文本邮件,可以设置发件人、收件人、抄送、密送、主题和内容。

  • testSendMail 方法:使用 MimeMessageMimeMessageHelper 类发送带附件的 HTML 邮件,可以设置发件人、收件人、抄送、密送、主题、内容和附件。

总结

通过以上步骤,我们可以使用 Java 轻松实现电子邮件的发送功能。需要注意的是,不同邮箱的 SMTP 服务器地址和端口号可能不同,需要根据实际情况进行配置。同时,授权码要妥善保管,避免泄露。希望本文对你有所帮助!