最近在工作中用到邮件的功能比较多,发邮件,收邮件,解析邮件。
首先还是奉上大牛的链接,https://www.cnblogs.com/ysocean/p/7666061.html,大牛的博客中对邮件的各种功能,包括底层原理剖析的一干二净。在此多谢大牛在前方的指路,让我们少走很多弯路。
结合自己工作中的实际情况,做下总结,便于日后复习查看。(仅供自己学习记录)
1、发邮件服务器:STMP。收邮件服务器:POP3,IMAP。
2、无论收发邮件,最根本的就是连接上邮箱的服务器和自己的邮箱。所以几个参数一定要准备好。
//发邮件
Properties props = new Properties();
//设置用户的认证方式
props.setProperty("mail.smtp.auth", "true");
//设置传输协议
props.setProperty("mail.transport.protocol", "smtp");
//设置发件人的SMTP服务器地址
props.setProperty("mail.smtp.host", "smtp.163.com");
//收邮件
Properties props = new Properties();
//设置传输协议
props.setProperty("mail.store.protocol", "pop3");
//设置收件人的POP3服务器
props.setProperty("mail.pop3.host", "pop3.163.com");
代码是用网易作为例子,更换其他邮箱,自然去找到其他邮箱的服务器地址。
3、连接到收件箱之后,如果邮箱只做中转站,并不存放邮件,那么就把邮件删掉。
//删除邮件
message.setFlag(Flags.Flag.DELETED, true);
4、不能虎头蛇尾,在最后需要把邮件对象关闭。
//发邮件
//关闭邮件连接
transport.close();
//收邮件
//关闭邮件夹对象
folder.close();
//关闭连接对象
store.close();
5、发邮件的时候,邮件内容包括图片和附件的情况。
MimeBodyPart 和 MimeMultipart 的用法。
MimeBodyPart 是普通节点,用来创建文本节点和图片节点。因为文本和图片都算邮件正文内容,所以文本节点和图片节点之间必然存在关系。这时将两个普通节点添加到混合节点MimeMultipart中,再通过setSubType方法建立关联关系。
因为邮件内容需要的是普通节点,所以组合之后的混合节点需转化成普通节点。
//图片节点
MimeBodyPart image = new MimeBodyPart();
//文本节点
MimeBodyPart text = new MimeBodyPart();
//混合节点
MimeMultipart mm_text_image = new MimeMultipart();
mm_text_image.addBodyPart(text);
mm_text_image.addBodyPart(image);
//关联关系
mm_text_image.setSubType("related");
转化成普通节点
MimeBodyPart text_image = new MimeBodyPart();
text_image.setContent(mm_text_image);
添加附件是同样的道理,但是实际中遇到的问题是附件名中文乱码,用以下方法解决。
//附件节点
MimeBodyPart attachment = new MimeBodyPart();
//设置附件的文件名(需要编码)
attachment.setFileName(MimeUtility.encodeText("文件名"));
6、实际应用中,经常会有在某网站通过通过绑定邮箱注册账号的需求。进入自己邮箱点击链接即可激活成功。通过在慕课网的学习,也总结如下:
class User{
private Integer uid;//主键
private String username;//账号
private String password;//密码
private String email;//绑定邮箱
private Integer state;//是否激活成功 1:激活成功 0:未激活成功
private String code;//激活码
}
state来判断账号是否在服务器申请成功。默认为0,当邮箱绑定成功之后,状态值改为1。账号申请成功。
code通过uuid来生成。
public String getUUID{
return UUID.randomUUID().toString().replace("-","");
}
网友评论