【Java】Java 发送邮件详解

本贴最后更新于 1929 天前,其中的信息可能已经事过境迁

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 邮箱为例,依次打开设置、账户。
image.png
然后找到 SMTP 服务,开启 SMTP 服务后,获取授权码:
image.png

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(); }

编译后成功收取到邮件:
image.png

  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3195 引用 • 8215 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...