使用JAVA实现邮件发送功能的图文教程

作者:Wisdom0110 时间:2021-09-04 17:29:36 

一、准备工作

小编今天以 QQ邮箱 进行演示操作。

想要使用代码操作邮箱发送邮件,需要在邮箱设置中申请开通 POP3/SMTP 服务。

接下来跟着小编的图文一步一步的操作开通吧!

1.1 登录网页QQ邮箱,点击页面顶部设置按钮。

使用JAVA实现邮件发送功能的图文教程

1.2 点击后会打开邮箱设置页面,如下所示,点击第二栏账户。

使用JAVA实现邮件发送功能的图文教程

1.3 点击后往下拉,直到有如下页面选项。

使用JAVA实现邮件发送功能的图文教程

选择POP3/SMTP服务,点击后面的开启,此时会让你使用绑定邮箱的手机号发送短信。

使用JAVA实现邮件发送功能的图文教程

发送完成后点击 我已发送 按钮,进行验证。

1.4 验证完成后会显示授权码(复制下来,一会要用)

使用JAVA实现邮件发送功能的图文教程

到此,准备工作已完成!

二、项目中配置邮件发送功能

2.1 引入发送邮件相关依赖

<!--邮件发送依赖-->
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-mail</artifactId>
</dependency>

引入后,更新maven,下载相关依赖

使用JAVA实现邮件发送功能的图文教程

2.2 在application.yml文件中添加邮件基本配置

spring:
 # 发送邮件配置
 mail:
   host: smtp.qq.com # 配置 smtp 服务器地址
   port: 587 # smtp 服务器的端口
   username: 1354720889@qq.com # 配置邮箱用户名(你的邮箱地址)
   password: batrgddaqykegfss # 配置申请到的授权码(刚让复制的授权码)
   default-encoding: UTF-8 # 配置邮件编码
   properties:
     mail:
       smtp:
         socketFactoryClass: javax.net.ssl.SSLSocketFactory # 配饰 SSL 加密工厂
       debug: true
   from: 1354720889@qq.com # 发送方邮件,陪在yml中可方便更改

2.3 为了方便使用,新建一个操作email的工具类(EmailUtil.java)

封装邮件工具类是为了方便后续调用操作。

package com.clover.utils;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Component;

import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import java.io.File;

/**
* @ClassName EmailUtil
* @Description 邮件发送工具
* @Author Sophia
* @Date 2022/4/6 16:06
*/
@Component
public class EmailUtil {

@Value("${spring.mail.from}") // 从application.yml配置文件中获取
   private String from; // 发送发邮箱地址

@Autowired
   private JavaMailSender mailSender;

/**
    * 发送纯文本邮件信息
    *
    * @param to      接收方
    * @param subject 邮件主题
    * @param content 邮件内容(发送内容)
    */
   public void sendMessage(String to, String subject, String content) {
       // 创建一个邮件对象
       SimpleMailMessage msg = new SimpleMailMessage();
       msg.setFrom(from); // 设置发送发
       msg.setTo(to); // 设置接收方
       msg.setSubject(subject); // 设置邮件主题
       msg.setText(content); // 设置邮件内容
       // 发送邮件
       mailSender.send(msg);
   }

/**
    * 发送带附件的邮件信息
    *
    * @param to      接收方
    * @param subject 邮件主题
    * @param content 邮件内容(发送内容)
    * @param files 文件数组 // 可发送多个附件
    */
   public void sendMessageCarryFiles(String to, String subject, String content, File[] files) {
       MimeMessage mimeMessage = mailSender.createMimeMessage();
       try {
           MimeMessageHelper helper = new MimeMessageHelper(mimeMessage,true);
           helper.setFrom(from); // 设置发送发
           helper.setTo(to); // 设置接收方
           helper.setSubject(subject); // 设置邮件主题
           helper.setText(content); // 设置邮件内容
           if (files != null && files.length > 0) { // 添加附件(多个)
               for (File file : files) {
                   helper.addAttachment(file.getName(), file);
               }
           }
       } catch (MessagingException e) {
           e.printStackTrace();
       }
       // 发送邮件
       mailSender.send(mimeMessage);
   }
/**
    * 发送带附件的邮件信息
    *
    * @param to      接收方
    * @param subject 邮件主题
    * @param content 邮件内容(发送内容)
    * @param file 单个文件
    */
   public void sendMessageCarryFile(String to, String subject, String content, File file) {
       MimeMessage mimeMessage = mailSender.createMimeMessage();
       try {
           MimeMessageHelper helper = new MimeMessageHelper(mimeMessage,true);
           helper.setFrom(from); // 设置发送发
           helper.setTo(to); // 设置接收方
           helper.setSubject(subject); // 设置邮件主题
           helper.setText(content); // 设置邮件内容
           helper.addAttachment(file.getName(), file); // 单个附件
       } catch (MessagingException e) {
           e.printStackTrace();
       }
       // 发送邮件
       mailSender.send(mimeMessage);
   }

public String getFrom() {
       return from;
   }

public void setFrom(String from) {
       this.from = from;
   }
}

2.4 测试邮件发送功能

我使用的SpringBoot项目,因此我在测试类中进行测试。

测试类代码:

package com.clover.api.blogapi;

import com.clover.utils.EmailUtil;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.io.File;

@SpringBootTest
class BlogApiApplicationTests {
   @Autowired
   private EmailUtil emailUtil;

@Test
   void contextLoads() {
   }

@Test
   void sendStringEmail() {
       // 测试文本邮件发送(无附件)
       String to = "1354720990@qq.com";
       String title = "文本邮件发送测试";
       String content = "文本邮件发送测试";
       emailUtil.sendMessage(to, title, content);
   }

@Test
   void sendFileEmail() {
       // 测试单个附件邮件发送
       String to = "1354720990@qq.com";
       String title = "单个附件邮件发送测试";
       String content = "单个附件邮件发送测试";
       File file = new File("D:\\GCH\\Typora\\Linux中常用的查看系统相关信息命令.md");
       emailUtil.sendMessageCarryFile(to, title, content, file);
   }

@Test
   void sendFilesEmail() {
       // 测试多个附件邮件发送
       String to = "1354720990@qq.com";
       String title = "多个附件邮件发送测试";
       String content = "多个附件邮件发送测试";
       File[] files = new File[2];
       files[0] = new File("C:\\Users\\root\\Desktop\\配置邮箱\\1.png");
       files[1] = new File("C:\\Users\\root\\Desktop\\配置邮箱\\2.png");
       emailUtil.sendMessageCarryFile(to, title, content, files);
   }
}

2.5 测试结果

邮箱已收到

使用JAVA实现邮件发送功能的图文教程

2.5.1 文本邮件发送

使用JAVA实现邮件发送功能的图文教程

2.5.2 单个附件邮件发送

使用JAVA实现邮件发送功能的图文教程

2.5.3 多个附件邮件发送

使用JAVA实现邮件发送功能的图文教程

到此,使用Java发送邮件功能就结束了,伙伴们可以根据自己的需求进行封装使用。

来源:https://blog.csdn.net/qq_42320934/article/details/124021133

标签:java,邮件,发送
0
投稿

猜你喜欢

  • C#同步和异步调用方法实例

    2022-09-11 21:20:50
  • 关于Springboot的日志配置

    2022-12-16 10:32:33
  • Springboot+Netty+Websocket实现消息推送实例

    2022-03-24 09:29:29
  • springboot cloud使用eureka整合分布式事务组件Seata 的方法

    2023-08-19 13:49:44
  • 浅谈C#与Java两种语言的比较

    2023-09-26 13:05:19
  • mybatis-plus @DS实现动态切换数据源原理

    2023-07-09 21:44:23
  • SpringBoot自动配置深入探究实现原理

    2023-08-06 09:59:58
  • Java实现文件读取和写入过程解析

    2023-06-28 11:35:36
  • Android kotlin使用注解实现防按钮连点功能的示例

    2023-07-02 11:58:06
  • ReentrantLock源码详解--公平锁、非公平锁

    2023-04-22 17:18:56
  • Java Exchanger并发类使用方法

    2023-08-19 20:20:41
  • Java BoxLayout(盒子布局)布局管理器解析

    2022-07-19 05:26:09
  • Default Methods实例解析

    2023-05-18 19:28:01
  • java实现word文档转pdf并添加水印的方法详解

    2023-05-26 02:59:18
  • java实现图片滑动验证(包含前端代码)

    2022-03-21 12:13:52
  • JAVA Integer类常用方法解析

    2021-09-01 06:51:08
  • Mybatis之typeAlias配置的3种方式小结

    2023-11-26 16:42:14
  • mybatis 多表关联mapper文件写法操作

    2021-12-02 23:21:25
  • 详解Java中的线程池

    2023-11-10 16:33:27
  • Java判断两个日期相差天数的方法

    2021-11-29 05:55:07
  • asp之家 软件编程 m.aspxhome.com