java mail 接收邮件
package com.mw.utils; import com.mw.bean.SmsAlarmLogBean; import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.search.FlagTerm;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Properties;
import java.util.regex.Matcher;
import java.util.regex.Pattern; /**
*
*/
public class MonitorMail { public static final String prefix ="[";
public static final String suffix ="]"; public static final String regex="\\[([^}]*)\\]";
public Pattern pattern = Pattern.compile(regex);
//邮箱服务地址
private String host;
//邮箱协议(pop3 imap,协议需要小写)
private String protocol;
//服务端口
private int port;
//邮箱name
private String username;
//邮箱密码
private String password; private URLName url; private Session session; private Store store; private Boolean filter; private Folder folder; private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); /**
*
* @param protocol 协议
* @param host 服务器
* @param port 端口
* @param username 邮箱账号
* @param password 邮箱密码
*/
public MonitorMail(String protocol,String host,int port,String username,String password){ //协议小写
this.protocol=protocol.toLowerCase();
this.host=host;
this.port=port;
this.username=username;
this.password=password; } /**
* 初始化连接邮箱服务器
* @return
* @throws Exception
* store.isConnected();
*/ public MonitorMail initConnect() throws NoSuchProviderException,MessagingException{
//INBOX 为抓取收件箱的邮件
this.url = new URLName(protocol, host, port, "INBOX", username, password);
Properties props = new Properties();
props.put("mail.imap.timeout",4000);
props.put("mail.imap.connectiontimeout",4000);//连接超时时间
this.session = Session.getInstance(props, null);
//得到邮件仓库
this.store = session.getStore(url);
//连接server
this.store.connect(); return this; } /**
* 获取收件箱所有的信息消息
* @return
* @throws Exception
*/
public Message[] requireMessage() throws Exception{
this.folder = store.getFolder(url);
folder.open(Folder.READ_WRITE);
//index 索引
FlagTerm ft =
new FlagTerm(new Flags(Flags.Flag.SEEN), false); //false代表未读,true代表已读
Message[] message = folder.search(ft);
return message; } /**
* 获取邮箱内容
* @return
* @throws Exception
*/
public List<String> requireText(boolean filter) throws Exception{
this.filter=filter;
ArrayList<String> candidate =new ArrayList<>();
//获取邮箱内容对象
Message[] message = requireMessage(); for(int i=0;i<message.length;i++){
String text="";
//文本类型mail
if (message[i].isMimeType("text/plain")) { text = message[i].getContent().toString();
//媒体类型
}else if(message[i].isMimeType("multipart/*")){
text = requireMultipartContext(message[i]);
} //默认拦截器过滤mail 内容
if(filter){
String filterContent = defaultFilter(text);
if(filterContent!=null){
candidate.add(filterContent);
updateState(message[i]);
}
}else {
String filterContent = customerFilter(text);
candidate.add(filterContent);
updateState(message[i]);
} }
/**
System.out.println("发件人:" + formatAddress(message.getFrom())
+ "\n发送时间:" + formatDate(message.getSentDate())
+ "\n收件人:" + formatAddress(message.getRecipients(Message.RecipientType.TO))
// + "\n收件时间:" + formatDate(msg.getReceivedDate())
// + "\n抄送:" + formatAddress(msg.getRecipients(Message.RecipientType.CC))
// + "\n暗送:" + formatAddress(msg.getRecipients(Message.RecipientType.BCC))
+ "\n主题:" + message.getSubject());
**/ return candidate;
} protected void updateState(Message msg) throws Exception{
if(protocol.equals("imap")) {
//pop3没有判断邮件是否为已读的功能,要使用imap才可以进行邮件的标记状态
msg.setFlag(Flags.Flag.SEEN, true);//设置邮件为已读状态
// msg.saveChanges();
}
} /**
* 获取Multipart/*类型的邮箱内容
* @param message
* @return
*/
public String requireMultipartContext(Message message) throws Exception{
StringBuffer strBuf =new StringBuffer();
if (message.isMimeType("multipart/*")) {
Multipart mp = (Multipart) message.getContent();
int count = mp.getCount();
for (int j = 0; j < count; j++) {
BodyPart bp = mp.getBodyPart(j);
String disposition = bp.getDisposition();
if (disposition != null && disposition.equals(Part.ATTACHMENT)) {
System.out.println("附件:" + bp.getFileName());
} else {
if (bp.isMimeType("text/plain")) {
//邮件文本内容
strBuf.append(bp.getContent()); }
}
}
}
return strBuf.toString();
} /**
* 默认拦截,匹配"[][][][]" 此类型格式的mail
* @param mailContent
* @return 匹配失败返回null
*/
protected String defaultFilter(String mailContent){
StringBuffer buffer =new StringBuffer();
Matcher matcher = pattern.matcher(mailContent);
while(matcher.find()){
buffer.append(matcher.group());
}
String content = buffer.toString();
if(content.length()==0){
return null;
}
return content;
} /**
* 解析mail 内容
* @param content
* @return
*/
public SmsAlarmLogBean defaultParseText(String content){
if(!filter){
throw new IllegalStateException("只可以解析[][][]格式的邮件内容");
}
String[] info = content.split(suffix);
SmsAlarmLogBean alarm =null;
if(info.length>7){
alarm= new SmsAlarmLogBean();
alarm.setAlarm_type(preIndex(info[5]));
alarm.setServer_name(preIndex(info[0]));
alarm.setPc_ip(preIndex(info[1]));
alarm.setStart_time(preIndex(info[3]));
alarm.setProcess_name(preIndex(info[7]));
alarm.setEquip_name(preIndex(info[4])); }
return alarm;
} /**
* 自定义拦截器
*/
public String customerFilter(String mailContent){ return mailContent;
} /**
* 自定义解析
* @param content
* @return
*/
public Object customerParseText(String content){
return null;
} public static String preIndex(String info){
String substring ="";
if(info.length()>=2) {
substring= info.substring(1);
}
return substring;
} public void close()throws Exception{
if(folder !=null) {
if (folder.isOpen()) {
folder.close(true);
}
};
if(store!=null){
if(store.isConnected()){
store.close();
}
} } public static String formatDate(Date date) {
return sdf.format(date);
} public static String formatAddress(Address[] addr) {
StringBuffer sb = new StringBuffer();
if (addr == null) {
return "";
}
for (int i = 0; i < addr.length; i++) {
Address a = addr[i];
if (a instanceof InternetAddress) {
InternetAddress ia = (InternetAddress) a;
sb.append(ia.getPersonal() + "<" + ia.getAddress() + ">,");
} else {
sb.append(a.toString());
}
}
if (sb.length() != 0) {
return sb.substring(0, sb.length() - 1);
}
return "";
} //test MonitorMail
public static void main(String[] args) throws Exception {
MonitorMail mail =new MonitorMail("imap","192.168.0.101",143,"test@luobin.com",
"Pass1234");
List<String> strings = mail.initConnect().requireText(true);//fasle返回我们自定义的,根据业务需求
System.out.println(strings);
mail.close(); } }
java mail 接收邮件的更多相关文章
- 关于java mail 发邮件的问题总结(转)
今天项目中有需要用到java mail发送邮件的功能,在网上找到相关代码,代码如下: import java.io.IOException; import java.util.Properties; ...
- java来接收邮件并解析邮件正文中的表格
这里是实际需求中的一个DEMO 有一部分内容进行了注释和处理,参考需要修改成自己的实际参数.另这个是对于实际一个场景的案例并不是通用解决的工具类. import org.jsoup.Jsoup; im ...
- java mail 读取邮件列表,
// 准备连接服务器的会话信息 Properties props = new Properties(); props.setProperty("mail.store.protocol&quo ...
- 关于使用Java Mail发邮件的问题
今天做东西的时候突然遇到需要发邮件的问题,然后就使用SMTP协议进行邮件的发送.用了一个工具类简化邮件发送的功能, 在这次试验中,我使用了自己的QQ邮箱进行发送邮件的发送者. public class ...
- Java邮件服务学习之三:邮箱服务客户端-Java Mail
一.java mail的两个JAR包 1.mail.jar:不在JDK中,核心功能依赖JDK4及以上,该jar包已经加入到java EE5: 下载地址:http://www.oracle.com/te ...
- java mail
java mail 1.配置 mvn <dependency> <groupId>javax.mail</groupId> <artifactId>ma ...
- 基于java mail实现简单的QQ邮箱发送邮件
刚学习到java邮件相关的知识,先写下这篇博客,方便以后翻阅学习. -----------------------------第一步 开启SMTP服务 在 QQ 邮箱里的 设置->账户里开启 S ...
- 通过Java发送邮件和接收邮件的工具类
一.第一种 使用SMTP协议发送电子邮件 第一步:加入mail.jar包 (1)简单类型 package com.souvc.mail; import java.util.Date; import j ...
- Java Mail(二):JavaMail介绍及发送一封简单邮件
http://blog.csdn.net/ghsau/article/details/17839983 ************************************************ ...
随机推荐
- web前端基础学习路线
1.HTML和CSS的基础知识,完成网页的初步设计 2.JavaScript基础知识和DOM.BOM的学习 3.前端基础框架:CSS框架Bootstrap.JavaScript框架jquery的熟悉使 ...
- Flume概念与原理、与Kafka优势对比《转》
https://blog.csdn.net/gyshun/article/details/79710534
- 关于Spring的Quartz定时器设定
在实际的开发业务中经常会遇到定时执行某个任务,如果项目使用的ssh框架的话,就需要配合spring来使用定时器.spring的定时器是一个固定的配置格式,具体的applicationContext配置 ...
- scheduleAtFixedRate 与 scheduleWithFixedDelay 的区别
总结: scheduleAtFixedRate ,是以上一个任务开始的时间计时,period时间过去后,检测上一个任务是否执行完毕,如果上一个任务执行完毕,则当前任务立即执行,如果上一个任务没有执行完 ...
- altium designer 制作内部不铺铜的封装,如三极管下面禁止铺铜
制作封装的时候,按P键或菜单栏中点击place选项点选Polygon Pour Cutout.画一个原件禁止铺铜区域即可.
- jenkins使用git拉取gitlab代码
1 在安装jenkins的主机上新加一个jenkins用户, 切换到jenkins用户登录, 生成公钥私钥ssh-keygen -t rsa -C "your email" -f ...
- 使用requests+BeautifulSoup爬取龙族V小说
这几天想看龙族最新版本,但是搜索半天发现 没有网站提供 下载, 我又只想下载后离线阅读(写代码已经很费眼睛了).无奈只有自己 爬取了. 这里记录一下,以后想看时,直接运行脚本 下载小说. 这里是从 ...
- es6的理解
目录:let——和var的区别const 特性:暂时性死区解构赋值 [] {}属性简洁函数简洁 属性表达式可以作为对象的属性名字符串扩展数组扩展对象扩展 Object.getPrototypeOf(实 ...
- @Data的注解使用以及在IDEA上安装
平时在开发过程中创建实体类的时候就经常的操作是:先写成员变量,然后再提供getXxx().setXxx()方法,然后看需要再提供toString等方法.这样一来不仅会发现每写一个实体类的话就会有很多相 ...
- leetcode1033
class Solution: def numMovesStones(self, a: int, b: int, c: int) -> 'List[int]': l = list() l.app ...