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

createh54个月前 (12-15)技术教程40

前言

公司项目要求,需要在某个时间点向全公司未填报工时的员工推送提醒邮件。借着这个机会在这边给大家分享一下邮件的一些协议以及如何通过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连接后,封装邮件的主题包括发送人,收件人,主题,邮件内容等,最后进行发送。

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


结尾

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


相关文章

钓鱼邮件是怎么实现的?

我们可能会收到一些钓鱼邮件,今天就说说这种邮件是怎么实现的,专门去百度了一下具体的定义,放出来给大家看看。按照道理来说,学习了本文,你也就可以去发钓鱼邮件了,但是不能做坏事哈!钓鱼邮件指利用伪装的电邮...

1.SpringBoot使用qq邮箱发送邮件25端口被封了怎么办?

文章目录前言1.SpringBoot发送邮件配置:1.1添加依赖:1.2账号配置(不使用25端口改用465端口进行发送);结尾前言我上面有一篇发送邮箱的总结,总结邮箱的发送使用方法,因为本地测试用的q...