Java发送邮件详解

本期我们学习Java如何发送邮件,Java发送邮件是以后工作较为常用的一个Java技能,想Web的邮箱验证、邮件提醒等功能,后期我也会编写一个教务的成绩提醒系统,其中,提醒的功能就是使用邮件来实现的。

1、了解邮件服务器和传输协议

  • 有过Linux基础或计算机网络基础的同学都知道,要在网络上实现邮件传输,就要有专门的邮件服务器,也就是SMTP服务器,他是计算机网络中的邮局,主要负责收发邮件。
  • 要想实现邮件传输,那么我们首先要知道邮局的地址,也就是SMTP地址,这样我们才能顺利的把邮件发出去。SMTP地址一般为smtp.xx.com,例如腾讯的:smtp.qq.com、163的:smtp.16.com。
  • 有了邮局的地址,那么我们下一部是怎么把邮件递给邮局,这里就需要用到SMTP传输协议,SMTP传输协议的作用,就是帮我们,把邮件投递给邮局,然后邮局再将邮件,发到目标的手中。

2、事前准备

了解完SMTP传输协议之后,我们开始搭建项目。

导入Jar包

Java为SMTP传输协议开发了一个工具Jar包:mail包,我们要使用SMTP传输协议,就要先导入Jar包。这里我们创建的是Maven项目,所以直接再pom.xml中配置:

<dependencies><dependency><groupId>javax.mail</groupId><artifactId>mail</artifactId><version>1.5.0-b01</version></dependency>
</dependencies>

获取邮箱授权码

邮箱授权码是使用SMTP时的凭证,首先,我们登录发送邮箱的账号,以qq邮箱为例,依次打开设置、账户。

然后找到SMTP服务,开启SMTP服务后,获取授权码:

3、编写Java代码

我们直接通过实例化一个Properties对象,然后再Properties对象中配置发件邮箱的信息。
此处注意事项:

  • 在SMTP协议时,所输入的密码并非账号密码,而为授权码
  • 每个邮箱提供商的端口号可能不同,在设置中查看相应端口号,一般为465
  • 设置收件人时,可以指定一个用户或多个用户:
    如果使用setRecipient只能设置一个收件人,InternetAddress为参数
    如果使用setRecipients可以设置多个收件人,InternetAddress为参数
public static void main(String[] argv) throws Exception{Properties properties = new Properties();properties.put("mail.transport.protocol", "smtp");// 连接协议properties.put("mail.smtp.host", "smtp.qq.com");// 主机名properties.put("mail.smtp.port", 465);// 端口号properties.put("mail.smtp.auth", "true");properties.put("mail.smtp.ssl.enable", "true");// 设置是否使用ssl安全连接 ---一般都使用properties.put("mail.debug", "true");// 设置是否显示debug信息 true 会在控制台显示相关信息// 得到回话对象Session session = Session.getInstance(properties);// 获取邮件对象Message message = new MimeMessage(session);// 设置发件人邮箱地址message.setFrom(new InternetAddress("i@liuxincode.cn"));// 设置收件人邮箱地址//如果使用setRecipient只能设置一个收件人,InternetAddress为参数//如果使用setRecipients可以设置多个收件人,InternetAddress为参数message.setRecipients(Message.RecipientType.TO, new InternetAddress[]{new InternetAddress("o@liuxincode.cn")});// 设置邮件标题message.setSubject("你好");// 设置邮件内容message.setText("你好,刘欣的代码笔记欢迎您,网址:https://www.liuxincode.cn");// 得到邮差对象Transport transport = session.getTransport();// 连接自己的邮箱账户transport.connect("i@liuxincode.cn", "xxxxxxxxxxxxx");// password为stmp授权码// 发送邮件transport.sendMessage(message, message.getAllRecipients());transport.close();}

编译后成功收取到邮件:

原文地址:https://www.liuxincode.cn/articles/2019/12/26/1577332433630.html

Java发送邮件详解相关推荐

  1. java 发送邮件 详解

    常见的邮件协议包括 : SMTP : 简单邮件传输协议,用于发送电子邮件的传输协议 POP3 : 用于接收电子邮件的标准协议 IMAP : 互联网消息访问协议,是 POP3 的替代协议 这三种协议都有 ...

  2. Apache Thrift - java开发详解

    2019独角兽企业重金招聘Python工程师标准>>> Apache Thrift - java开发详解 博客分类: java 架构 中间件 1.添加依赖 jar <depen ...

  3. Java泛型详解-史上讲解最详细的,没有之一

    目录 1. 概述 2. 一个栗子 3. 特性 4. 泛型的使用 4.1 泛型类 4.2 泛型接口 4.3 泛型通配符 4.4 泛型方法 4.4.1 泛型方法的基本用法 4.4.2 类中的泛型方法 4. ...

  4. Java虚拟机详解----JVM常见问题总结

    [正文] 声明:本文只是做一个总结,有关jvm的详细知识可以参考本人之前的系列文章,尤其是那篇:Java虚拟机详解04----GC算法和种类.那篇文章和本文是面试时的重点. 面试必问关键词:JVM垃圾 ...

  5. java 泛型详解、Java中的泛型方法、 java泛型详解

    本文参考java 泛型详解.Java中的泛型方法. java泛型详解 概述 泛型在java中有很重要的地位,在面向对象编程及各种设计模式中有非常广泛的应用. 什么是泛型?为什么要使用泛型? 泛型,即& ...

  6. 最详细的java泛型详解

    来源:最详细的java泛型详解 对java的泛型特性的了解仅限于表面的浅浅一层,直到在学习设计模式时发现有不了解的用法,才想起详细的记录一下. 本文参考java 泛型详解.Java中的泛型方法. ja ...

  7. Java异常详解及如何处理

    来源:Java异常详解及如何处理 简介 程序运行时,发生的不被期望的事件,它阻止了程序按照程序员的预期正常执行,这就是异常.异常发生时,是任程序自生自灭,立刻退出终止,还是输出错误给用户?或者用C语言 ...

  8. Java基础——Java NIO详解(一)

    一.基本概念 1.I/0简介 I/O即输入输出,是计算机与外界世界的一个借口.IO操作的实际主题是操作系统.在java编程中,一般使用流的方式来处理IO,所有的IO都被视作是单个字节的移动,通过str ...

  9. Java基础——Java NIO详解(二)

    一.简介 在我的上一篇文章Java NIO详解(一)中介绍了关于标准输入输出NIO相关知识, 本篇将重点介绍基于网络编程NIO(异步IO). 二.异步IO 异步 I/O 是一种没有阻塞地读写数据的方法 ...

最新文章

  1. 如何通过一个类名找到它属于哪个jar包?
  2. 成为一名更好的程序员:如何阅读源代码
  3. 为提高绩效,HR需要做的改进工作
  4. 【NOIP】提高组2012 同余方程
  5. cname 别名记录 解析过程_云解析是什么?需要购买吗?
  6. 前端学习(1757):前端调试值之网络条件与user-Agent的设置
  7. oracle数据同步异常,案例:DataGuard同步异常问题处理记录
  8. IBM heapAnalyzer
  9. Java8新特性总结 - 序
  10. oracle 带库,ORACLE RMAN下针对带库装置的操作
  11. messagebox java_如何从messagebox获得答案
  12. 自动化如何帮助全球共抗疫情?
  13. 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_08 转换流_5_InputStreamReader介绍代码实现...
  14. Centos中安装memcached
  15. OC小实例关于init方法不小心的错误
  16. 统计android代码行数据,Android Studio代码行数统计插件Statistics
  17. 关于pdf转html的个人方法,pdf转html的另类方法
  18. 《公路测设技术》课程网课最新作业测验考试
  19. 面向对象的编程(上)_方法的重载(overload)练习
  20. background的使用方法

热门文章

  1. mysqlbinlog 导出日志 乱码 sql
  2. [DSP 日常记录] #2 TI DSP 的简单介绍与 DSP 的一些名词解释
  3. 关于分布式事务 两阶段提交 一阶段提交 Best Efforts 1PC模式和事务补偿机制的研究
  4. Java字符串String相关
  5. mysqldumpnbsp;参数说明
  6. 联想适合计算机专业的游戏本,全球最佳游戏笔记本电脑Top 10
  7. 【直播聊天室】特点、构成及解决方案简介
  8. wps多人协作后怎么保存_wps在线协作,多人实时填表,数据统计方法
  9. 刚从阿里、头条面试回来,熬夜整理华为最新Java笔试题,进阶学习
  10. linux 连接 ftp 下载文件