携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第11天,点击查看活动详情 >>
问题描述: 最近接手了一个新的需求,之前也是没做过,就产生了一个大大的问号,发邮件的场景有很多,不知道大家有没有遇到接收邮件,做一些邮件的处理。我这个需求就是取我电子邮箱中的邮件去做一些业务处理,我们用的是微软的Office365 的outlook邮箱,这里我就先从outlook的邮件接收做示例。
电子邮件传输的协议分三种:POP, IMAP, And SMTP,它们都隶属于TCP/IP协议簇,POP和IMAP用来做电子邮件的接收处理,而SMTP用作发送电子邮件的协议,负责将邮件从一个“邮局”传送到另一个“邮局”。
微软官方给出的三种协议的Setting如下:
| Email Provider | IMAP Settings | POP Settings | SMTP Settings |
|---|---|---|---|
| Microsoft 365 Outlook Hotmail Live.com | Server: outlook.office365.com Port: 993 Encryption: SSL/TLS | Server: outlook.office365.com Port: 995 Encryption: SSL/TLS | Server: smtp.office365.com Port: 587Encryption: STARTTLS |
| MSN | Server: imap-mail.outlook.com Port: 993 Encryption: SSL/TLS | Server: pop-mail.outlook.com Port: 995 Encryption: SSL/TLS | Server: smtp-mail.outlook.com Port: 587 Encryption: STARTTLS |
以下是我是在这个开发中使用到的电子邮件server连接的建立以及读取电子邮件的方式:
// 配置连接信息
Properties properties = new Properties();
properties.put("mail.store.protocol", "imaps");
properties.put("mail.imap.host", "outlook.office365.com");
properties.put("mail.imap.port", 993);
properties.put("mail.imap.starttls.enable", "true");
Session emailSession = Session.getDefaultInstance(properties);
// emailSession.setDebug(true);
Store store = emailSession.getStore("imaps");
// host\username\password
store.connect("outlook.office365.com","peate.zhu@XXX.com", "XXX.2022");
//获取到邮箱默认接收的文件夹
Folder emailFolder = store.getFolder("INBOX");
// Folder.READ_ONLY 打开并将其设置为只读状态
// Folder.READ_WRITE为开启读写状态
emailFolder.open(Folder.READ_ONLY);
// Message[] 为该默认文件夹下的所有邮件数组
Message[] messages = emailFolder.getMessages();
希望这简简单单的开发中总结 能给你最实用的帮助,给你节省大把时间,用最核心的代码干最有用的事,后边可以给大家更新使用SMTP发送邮件等一些实用的技巧,包括我们常用的项目管理工具的一些便于自助开发的东西。不断探索,知识共享。掘金 倔劲,干就完了!