邮件协议以及java实现邮件功能

createh53周前 (12-15)技术教程19

前言

公司项目要求,需要在某个时间点向全公司未填报工时的员工推送提醒邮件。借着这个机会在这边给大家分享一下邮件的一些协议以及如何通过java实现发送代码


协议介绍

Smtp协议:邮件服务器之间传递消息所使用的协议

用户代理(如Foxmail,outlook之类的软件)向邮件服务器发送邮件以及邮件服务器之间发送邮件都需要使用到smtp协议。它定义了多个通信体交换报文的规则。


下面通过一个案列按照smtp的协议发送一封邮件


首先得知道常见的smtp命令

HELO 与服务器确认

AUTH LOGIN 进行登录验证

MAIL FROM 发件人信息,填写与认证信息不同往往被定位为垃圾邮件或恶意邮件

RCPT TO 收信人地址

DATA 输入邮件基本信息

FROM 发信人显示信息

TO 服务器收件人显示信息

SUBJECT 邮件主题

QUIT 断开链接


返回码信息

220 服务就绪

250 请求动作成功完成

235 认证通过

221 处理中

354 发送开始,往往与data指令结合

500 指令错误

550 命令无法执行


接下来我们打开cmd玩个有趣的东西


1,在命令行输入 telnet smtp.qq.com 25,返回220标识服务就绪




2,输入auth login 来进行登录验证




返回提示输入用户信息,这边是用的qq邮箱,所以使用邮箱账号@qq.com前面部分的账号进行base64加密后输入,然后会提示你输入密码,使用授权码base64输入(由于隐私问题,这边就打码了哦)。




返回连接成功。


3,发送邮件




试试看,你是否能够收到邮件,如果有问题可以评论区咨询哦


POP3协议:邮件访问协议,用于用户代理去邮件服务器上访问邮件

还有一个访问协议IMAP,它俩的区别在于pop3只能讲邮件下到本地后进行删除移动等操作,而IMAP可以直接操作远程服务器的资源


既然上面已经通过小例子发送了邮件,接下来我们再通过一个案列来通过POP3来接收邮件



JAVA处理

通过上面的一些小案例,相信大家对邮件的协议有了些了解,那如何通过应用程序来发送邮件呢,下面就给大家介绍

public class MailUtil {

@Value("${mail.account}")
private String account;
@Value("${mail.password}")
private String password;
@Value("${mail.host}")
private String host;
@Value("${mail.port}")
private String port;
@Value("${mail.protocol}")
private String protocol;

public void sendMessage(String receiver, String subject, String content) throws Exception {
Properties properties = new Properties();
properties.setProperty("mail.transport.protocol", protocol);
properties.setProperty("mail.smtp.host", host);
properties.setProperty("mail.smtp.port", port);
// 使用smtp身份验证
properties.put("mail.smtp.auth", "true");
// 使用SSL,企业邮箱必需 start
// 开启安全协议
MailSSLSocketFactory mailSSLSocketFactory = null;
try {
mailSSLSocketFactory = new MailSSLSocketFactory();
mailSSLSocketFactory.setTrustAllHosts(true);
} catch (GeneralSecurityException e) {
e.printStackTrace();
}
properties.put("mail.smtp.enable", "true");
properties.put("mail.smtp.ssl.socketFactory", mailSSLSocketFactory);
properties.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
properties.put("mail.smtp.socketFactory.fallback", "false");
properties.put("mail.smtp.socketFactory.port", port);
Session session = Session.getDefaultInstance(properties, new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(account, password);
}
});
MimeMessage mimeMessage = new MimeMessage(session);
mimeMessage.setFrom(new InternetAddress(account, null));
InternetAddress[] internetAddressTo = InternetAddress.parse(receiver);
mimeMessage.setRecipients(Message.RecipientType.TO, internetAddressTo);
// 主题
mimeMessage.setSubject(subject);
// 时间
mimeMessage.setSentDate(new Date());
// 容器类 附件
MimeMultipart mimeMultipart = new MimeMultipart();
// 可以包装文本,图片,附件
MimeBodyPart bodyPart = new MimeBodyPart();
// 设置内容
bodyPart.setContent(content, "text/html; charset=UTF-8");
mimeMultipart.addBodyPart(bodyPart);
mimeMessage.setContent(mimeMultipart);
mimeMessage.saveChanges();
Transport.send(mimeMessage);
}
}


代码分析:首先是通过配置协议,账号,密码等来进行连接。session连接后,封装邮件的主题包括发送人,收件人,主题,邮件内容等,最后进行发送。

代码逻辑比较清晰易懂,大家可以试试


结尾

今天就给大家介绍到这里,如果大家有什么问题,欢迎在评论区留言,大家一起讨论


相关文章

Java 发送邮件

使用Java应用程序发送E-mail十分简单,但是首先你应该在你的机器上安装JavaMail API 和Java Activation Framework (JAF) 。 你可以在 JavaMail...

手把手教你用 Java 发送邮件,不用框架

邮件发送也是一个老生常谈的问题了,代码虽然简单,但是许多小伙伴对过程不太理解,所以还是打算和各位小伙伴聊聊这个话题。邮件协议我们经常会听到各种各样的邮件协议,比如 SMTP、POP3、IMAP ,那么...

100个Java工具类之15:免费发送邮件

该系列为java工具类系列,主要展示100个常用的java工具类。本系列工具类的核心目的主要有三点:1,以便他用:提供可用的Java工具类,方便大家使用,避免重复造轮子2,个人记录:作为个人记录,同时...

在Spring Boot中实现邮件发送功能的详细指南

有时候,我们可能会用邮件确认、或者是发送重置密码的链接,或者是通过邮件来发送一些通知提醒的功能,在Spring Boot中内置了邮件发送的功能,下面我们就来看看如何在Spring Boot中利用现有的...

Spring Boot集成Spring Email发送邮件

引言在当今数字化时代,电子邮件仍然是重要的沟通工具之一。在使用Spring Boot框架开发应用程序时,有时需要集成邮件发送功能,以便在用户注册、找回密码、接收通知等场景中向用户发送邮件。本文将介绍如...

阿里二面:说下如何基于SpringBoot发送邮件?

在我们实际业务开发中邮件发送其实是一个非常常见的需求,用户注册,找回密码等地方都会用到,使用JavaSE代码发送邮件步骤还是挺繁琐的。SpringBoot中对于邮件发送,提供了相关的自动化配置类,使得...