龙空技术网

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

NeverMore 118

前言:

眼前大家对“javasmtp”大体比较关注,小伙伴们都想要了解一些“javasmtp”的相关文章。那么小编同时在网摘上搜集了一些关于“javasmtp””的相关内容,希望咱们能喜欢,我们快快来学习一下吧!

前言

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

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

结尾

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

标签: #javasmtp