材料:一个可以登录的邮箱(本文以qq邮箱为例子),Idea和脑子
第一步:登录自己的qq邮箱登录 QQ 邮箱

点击开启服务,会得到一个授权码,就像这个样子

保存一下这个一会要用到

第二步:打开IDEA,创建一个Maven项目(嫌麻烦直接跳最后Idea直接git项目)

git地址:GitHub - Fengzj916/EmailSend

创建好之后创建两个class文件,就像下面这样

Email代码:

import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.*;
import javax.mail.internet.*;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Properties;public class Email {private static String defaultSenderName = "";// 默认的发件人用户名,defaultEntity用得到private static String defaultSenderPass = "";// 默认的发件人密码,defaultEntity用得到private static String defaultSmtpHost = "";// 默认的邮件服务器地址,defaultEntity用得到private String smtpHost; // 邮件服务器地址private String sendUserName; // 发件人的用户名private String sendUserPass; // 发件人密码private MimeMessage mimeMsg; // 邮件对象private Session session;private Properties props;private Multipart mp;// 附件添加的组件private List<FileDataSource> files = new LinkedList<FileDataSource>();// 存放附件文件private void init() {if (props == null) {props = System.getProperties();}props.put("mail.transport.protocol", "smtp");// 连接协议props.put("mail.smtp.host", smtpHost);props.put("mail.smtp.port", "465");// 端口号props.put("mail.smtp.socketFactory.port", "465");props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");props.put("mail.smtp.auth", "true"); // 需要身份验证props.put("mail.smtp.ssl.enable", "true");//设置是否使用ssl安全连接  ---一般都使用props.put("mail.debug", "true");//设置是否显示debug信息  true 会在控制台显session = Session.getDefaultInstance(props, null);// 置true可以在控制台(console)上看到发送邮件的过程session.setDebug(true);// 用session对象来创建并初始化邮件对象mimeMsg = new MimeMessage(session);// 生成附件组件的实例mp = new MimeMultipart();}private Email(String smtpHost, String sendUserName, String sendUserPass, String to, String cc, String mailSubject, String mailBody,List<String> attachments, String formName) {this.smtpHost = smtpHost;this.sendUserName = sendUserName;this.sendUserPass = sendUserPass;init();setFrom(sendUserName, formName);  //设置发送人邮箱账号和发送人名setTo(to);  //设置收件人邮箱setCC(cc);  //设置抄送setBody(mailBody);  //设置内容setSubject(mailSubject);  //设置标题if (attachments != null) {  //循环添加附件for (String attachment : attachments) {addFileAffix(attachment);}}}/*** 邮件实体** @param smtpHost     邮件服务器地址* @param sendUserName 发件邮件地址* @param sendUserPass 发件邮箱密码* @param to           收件人,多个邮箱地址以半角逗号分隔* @param cc           抄送,多个邮箱地址以半角逗号分隔* @param mailSubject  邮件主题* @param mailBody     邮件正文* @return* @paramattachmentPath 附件路径*/public static Email entity(String smtpHost, String sendUserName, String sendUserPass, String to, String cc, String mailSubject, String mailBody,List<String> attachments, String fromName) {return new Email(smtpHost, sendUserName, sendUserPass, to, cc, mailSubject, mailBody, attachments, fromName);}/*** 默认邮件实体,用了默认的发送帐号和邮件服务器** @param to      收件人,多个邮箱地址以半角逗号分隔* @param cc      抄送,多个邮箱地址以半角逗号分隔* @param subject 邮件主题* @param body    邮件正文* @return*/public static Email defaultEntity(String to, String cc, String subject, String body, List<String> attachments, String fromName) {return new Email(defaultSmtpHost, defaultSenderName, defaultSenderPass, to, cc, subject, body, attachments, fromName);}/*** 设置邮件主题** @param mailSubject* @return*/private boolean setSubject(String mailSubject) {try {mimeMsg.setSubject(mailSubject);} catch (Exception e) {return false;}return true;}/*** 设置邮件内容,并设置其为文本格式或HTML文件格式,编码方式为UTF-8** @param mailBody* @return*/private boolean setBody(String mailBody) {try {BodyPart bp = new MimeBodyPart();bp.setContent("<meta http-equiv=Content-Type content=text/html; charset=UTF-8>" + mailBody, "text/html;charset=UTF-8");// 在组件上添加邮件文本mp.addBodyPart(bp);} catch (Exception e) {System.err.println("设置邮件正文时发生错误!" + e);return false;}return true;}/*** 添加一个附件** @param filename 邮件附件的地址,只能是本机地址而不能是网络地址,否则抛出异常* @return*/public boolean addFileAffix(String filename) {try {if (filename != null && filename.length() > 0) {BodyPart bp = new MimeBodyPart();FileDataSource fileds = new FileDataSource(filename);bp.setDataHandler(new DataHandler(fileds));bp.setFileName(MimeUtility.encodeText(fileds.getName(), "utf-8", null)); // 解决附件名称乱码mp.addBodyPart(bp);// 添加附件files.add(fileds);}} catch (Exception e) {System.err.println("增加邮件附件:" + filename + "发生错误!" + e);return false;}return true;}/*** 删除所有附件** @return*/public boolean delFileAffix() {try {FileDataSource fileds = null;for (Iterator<FileDataSource> it = files.iterator(); it.hasNext(); ) {fileds = it.next();if (fileds != null && fileds.getFile() != null) {fileds.getFile().delete();}}} catch (Exception e) {return false;}return true;}/*** 设置发件人地址** @param from 发件人地址* @return*/private boolean setFrom(String from, String name) {try {mimeMsg.setFrom(new InternetAddress(from, name));} catch (Exception e) {return false;}return true;}/*** 设置收件人地址** @return* @paramto收件人的地址*/private boolean setTo(String to) {if (to == null)return false;try {mimeMsg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to));} catch (Exception e) {return false;}return true;}/*** 设置抄送** @param cc* @return*/private boolean setCC(String cc) {if (cc == null) {return false;}try {mimeMsg.setRecipients(Message.RecipientType.CC, InternetAddress.parse(cc));} catch (Exception e) {return false;}return true;}/*** 发送邮件** @return*/public boolean send() throws Exception {mimeMsg.setContent(mp);mimeMsg.saveChanges();System.out.println("正在发送邮件....");Transport transport = session.getTransport("smtp");// 连接邮件服务器并进行身份验证transport.connect(smtpHost, sendUserName, sendUserPass);// 发送邮件transport.sendMessage(mimeMsg, mimeMsg.getRecipients(Message.RecipientType.TO));System.out.println("发送邮件成功!");transport.close();return true;}}

SendTest代码:

/*** Created by 86157 on 2022/10/8.*/import java.util.Arrays;
import java.util.List;/*** @author 86157* @version 1.0* @description: TODO* @date 2022/10/8 22:31*/
public class SendTest {public void sendEmail(String name,String body,String to) throws Exception {String userName = "123123@qq.com"; // 发件人QQ邮箱String password ="nideshouquanma";//激活POP3/SMTP服务的授权码String smtpHost = "smtp.qq.com"; // 邮件服务器,这个不用改String fromName="阿里";//发件人名称// 收件人的邮箱账号,多个收件人以半角逗号分隔String cc = ""; //抄送,多个抄送以半角逗号分隔String subject = "阿里|早上好"; // 主题// 附件的路径是文件在你电脑上的绝对路径,多个附件以逗号分开List<String> attachments = Arrays.asList("");Email email = Email.entity(smtpHost, userName, password, to, cc, subject, body, attachments,fromName);email.send(); // 发送!}public static void main(String[] args) throws Exception {//邮件发送组件SendTest emailTest=new SendTest();//使用图片验证码生成的随机文本作为验证邮箱的文本,拼合字符发送邮件String ddUserNickName="abc";//这个是对方名称String boby="阿里,早上好,美好的一天开始了!";//正文内容String ddUserEmail="1047@qq.com";//对方邮箱//发送邮件emailTest.sendEmail(ddUserNickName,boby,ddUserEmail);}}

pom依赖:(这个很重要,里面有些可以用不上我都放在里面了)

<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.gxy</groupId><artifactId>Springboot_Maven191</artifactId><version>1.0-SNAPSHOT</version><packaging>war</packaging><name>Springboot_Maven191 Maven Webapp</name><!-- FIXME change it to the project's website --><url>http://www.example.com</url><!--属性设置--><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target><kotlin.version>1.2.71</kotlin.version></properties><!--定义公共资源版本--><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.1.12.RELEASE</version></parent><dependencies><!--web开发 所需依赖,springboot相关依赖,不用指定版本,与parent一致包含spring springmvc springboot等jar资源  --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!--整合jsp--><!-- https://mvnrepository.com/artifact/org.apache.tomcat.embed/tomcat-embed-jasper --><dependency><groupId>org.apache.tomcat.embed</groupId><artifactId>tomcat-embed-jasper</artifactId></dependency><!-- https://mvnrepository.com/artifact/javax.servlet/jstl --><dependency><groupId>javax.servlet</groupId><artifactId>jstl</artifactId></dependency><!-- Springboot 热部署依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><optional>true</optional></dependency><!-- SpringBoot 测试依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId></dependency><!-- Spring-Mybatis --><!-- https://mvnrepository.com/artifact/org.mybatis.spring.boot/mybatis-spring-boot-starter --><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>1.3.2</version></dependency><!--图片验证码--><!-- https://mvnrepository.com/artifact/com.github.penggle/kaptcha --><dependency><groupId>com.github.penggle</groupId><artifactId>kaptcha</artifactId><version>2.3.2</version></dependency><!-- oracle --><dependency><groupId>commons-dbcp</groupId><artifactId>commons-dbcp</artifactId><version>1.4</version></dependency><!-- https://mvnrepository.com/artifact/com.oracle/ojdbc6 --><!-- https://mvnrepository.com/artifact/com.oracle/ojdbc6 --><dependency><groupId>com.oracle</groupId><artifactId>ojdbc6</artifactId><version>11.2.0.4.0-atlassian-hosted</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.47</version></dependency><!--发邮件--><dependency><groupId>javax.mail</groupId><artifactId>mail</artifactId><version>1.4.1</version></dependency><!-- https://mvnrepository.com/artifact/javax.activation/activation --><dependency><groupId>javax.activation</groupId><artifactId>activation</artifactId><version>1.1.1</version></dependency><!-- https://mvnrepository.com/artifact/commons-pool/commons-pool --><dependency><groupId>commons-pool</groupId><artifactId>commons-pool</artifactId><version>1.6</version></dependency><!-- https://mvnrepository.com/artifact/com.alibaba/fastjson --><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.49</version></dependency><!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core --><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-core</artifactId><version>2.9.5</version></dependency><!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-annotations --><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-annotations</artifactId><version>2.9.5</version></dependency><!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind --><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.9.5</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId></dependency><dependency><groupId>commons-codec</groupId><artifactId>commons-codec</artifactId><version>1.10</version></dependency><!-- https://mvnrepository.com/artifact/org.apache.taglibs/taglibs-standard-impl --><dependency><groupId>org.apache.taglibs</groupId><artifactId>taglibs-standard-impl</artifactId><version>1.2.5</version></dependency></dependencies><build><!--idea  识别.xml  指定资源的位置--><resources><resource><!--指定目录--><directory>src/main/java</directory><!--包含在目录下的.properties, .xml文件 都会扫描到--><includes><include>**/*.xml</include></includes><!--不启用过滤器 --><filtering>true</filtering></resource><!--<resource>&lt;!&ndash;指定目录&ndash;&gt;<directory>src/main/resources</directory>&lt;!&ndash;包含在目录下的.properties, .xml文件 都会扫描到&ndash;&gt;<includes><include>**/*.properties</include><include>**/*.xml</include></includes>&lt;!&ndash;不启用过滤器 &ndash;&gt;<filtering>false</filtering></resource>--></resources></build>
</project>

第三步:测试

运行SendTest类中的main方法,效果如下

可以根据自己需要改为发送验证码,验证邮箱等操作,有问题请留意看到会回

Idea直接git项目:(选学)

打开idea

  git地址: https://github.com/Fengzj916/EmailSend

 

大功告成,比那个方便多了

(2022保姆级教程)使用Java向邮箱发送邮件、验证码相关推荐

  1. 安装IDEA运行Java保姆级教程(java小白入门必备)

    本文旨在为Java入门的同学介绍如何在自己电脑上运行Java程序: 一 下载IDEA安装包 https://www.jetbrains.com/idea/download/#section=windo ...

  2. vue+element项目 手机号、邮箱校验 保姆级教程

    vue+element项目 手机号.邮箱校验 保姆级教程 (包含注意点) 先看案例:在vue+element项目中给表单中的手机号和邮箱做校验 标题先说注意点 prop黄色框框起来的一定要有 废话不多 ...

  3. java保姆级教程—— 1.什么是游戏

    引言: Java保姆级教程是笔者在暑假时,为学弟们准备的java游戏教程,今天整理了一下,共享给网友们,笔者也是学生,若有大神发现文中存在误区,还请私信笔者. 注:java游戏保姆级教程,正在制作中, ...

  4. Java 保姆级教程——3.添加地图,地图根据人物移动

    Java 保姆级教程--3.添加地图,地图根据人物移动 注:经过上期的学习,我们学习了如何创建JFrame窗体.如何添加监听事件.根据大家给我的反馈,这一期给大家讲述:如何添加地图.地图如何根据人物移 ...

  5. 【最新敲简单】浪漫微信早安推送 +页面总控,JAVA版本,一键部署运行——保姆级教程

    [最新敲简单]微信早安推送 +页面总控, JAVA版本,一键部署运行--保姆级教程 文章目录 [最新敲简单]微信早安推送 +页面总控, JAVA版本,一键部署运行--保姆级教程 一.项目简介 二.本地 ...

  6. 保姆级教程从零搭建云服务器(小彩蛋,请大家看烟花秀)

    笔者已从零搭建好云服务器,在文章开始笔者请大家看一场简单的烟花秀,该篇博文是写给小白的保姆级教程,不论是有基础还是没基础的,都可以根据本篇博文,轻松搭建个人云服务器. 烟花秀:浏览器直接输入ysw.w ...

  7. 保姆级教程——将springboot项目部署到阿里云服务器(小白包会)

    保姆级教程--将springboot项目部署到阿里云服务器(小白包会) 前言: 昨天本想着看论文,结果发现找的论文和课题不一致.那干点什么好呢?那就把我的毕业设计(一个springboot项目)部署到 ...

  8. GOES-16数据下载(保姆级教程)

    GOES-16数据下载(保姆级教程) 先上GOES-16数据下载的网址link 1.先进入上述网址,下拉选项可以选择想要下载的数据,这里我选择的是辐亮度数据. 2.选择想要的数据的日期,最多只能选择3 ...

  9. mac中Typora+PicGo图床+gitee 保姆级教程

    查看全文 http://www.taodudu.cc/news/show-5900829.html 相关文章: 使用Typora+PicGo+Gitee打造全新Markdown博客创作环境 今天码云( ...

最新文章

  1. HDU 1080 Human Gene Functions
  2. 新的方法 (New Approach)¶
  3. Vue.js 2.x render 渲染函数 JSX
  4. (十)数据结构之“堆”
  5. Qt工作笔记-undefined reference to `vtable for MyObject'及对moc文件的进一步理解
  6. centos编译安装php7_centos7源码安装php7.2
  7. python从菜鸟到高手 pdf 百度云_Python从菜鸟到高手(4):导入Python模块
  8. 数据结构C语言数组字符数组
  9. 松露菌行业调研报告 - 市场现状分析与发展前景预测
  10. php all函数,PHP 函数 preg_match_all()
  11. 最简单的基于DirectShow的示例:获取Filter信息
  12. 【C/C++】各种数据类型在16位、32位和64位系统下所占字节差异
  13. 2022-2027年中国办公设备租赁市场竞争态势及行业投资潜力预测报告
  14. 怎么样实现一台电脑上两个mysql自由切换版本
  15. 支付宝快捷支付接入问题
  16. matlab 图像处理 histogram shifting 基于直方图平移的信息隐藏
  17. 代码生成MANIFEST.MF文件
  18. QQ.阿里旺旺.淘宝.在线网页链接代码及详解
  19. 预训练权重到底是个啥
  20. Flutter 布局 - UI - 官方文档 - 学习速记(一)

热门文章

  1. js 中的in_array
  2. (22)UVM 虚拟类序列(virtual sequence)
  3. Android开发学习——3.平台版本、SDK版本、API级别
  4. 【OpenCv/EmguCv】指针式仪表读数(一)
  5. printf用法补录
  6. Centos7挂载ISO镜像
  7. 妖怪屋 服务器维护中,《阴阳师:妖怪屋》3月24日维护更新公告
  8. 山东孔孟之乡-泰山-济南旅游归来
  9. 百度地图BMap is not defined(Bmap未定义)
  10. mysql查询所有课程的分数_Sql语句之查询所有学生所有科目分数及总分