C# Po3协议读取邮件内容遇到的问题
背景:最近在做一个小工具,读取PO3协议邮件服务器的指定人员的邮件,东西做出来了,弄了一个While死循环,20秒执行一次,
结果运行了3天,周一来IT人员找上门来了,你的电脑什么情况,怎么一个小时下载流量达到1个G多,而且都是PO3协议的,哈哈,哈哈
心理很想呵呵,但是还得如实跟他解释了一下情况,然后立刻把程序停止了。
接下来我就是找问题啦,最后找到了原因是因为我每次都是循环读取邮箱中的180条邮件,这180条中还有好多有几十兆附件的,哈哈
解决办法和问题原因:
问题就出现这循环读取以及读取过的内容里面,因为PO3协议不支持读取未读的邮件,或是说标记邮件为已读的。所以我当时只能从所有邮件中不断重复循环读取,
直到有新的需要的邮件进来,处理一下,继续循环。后来我找到了一个办法,POP3协议有一个UID的东西,每个邮件都是唯一的,每次都获取到邮箱所有邮件的UID,
然后保存到本地,下次用本地的和这个对比,有新的UID进来,只针对这个新的UID进行邮件读取,这样所有事就都解决了,流量也很小很小了。
我这里使用的是MailKit.dll,
开源的项目,在项目中用nuget一下DLL下载下来,nuget命令去官网看吧。
粘贴出来主要代码:
IList<string> msgUids = client.GetMessageUids();
IList<string> notReadUids = new List<string>();
foreach (var item in msgUids)
{
if (!alreadySentMsgId.Contains(item))
{
notReadUids.Add(item);
sw.WriteLine(item); //记录没有读取过的邮件的UID
}
}
if (notReadUids.Count != ) //如果有未读过的邮件才进行读取及解析
{
IList<MimeMessage> notReadMessages = client.GetMessages(notReadUids);
}
C# Po3协议读取邮件内容遇到的问题的更多相关文章
- 使用 EWS(Exchange Web Service)协议读取邮件、发送邮件
问题: 公司之前可以通过POP3协议收发邮件,因而在SoapUI中用JavaMail可以读取邮件,后来配置了Office 365,POP3协议端口不再开放,邮件全部读取失败,报login timeou ...
- [PHP] PHP调用IMAP协议读取邮件类库
socket.php 为连接socket的类库 imap.php 基于socket的imap协议封装 test.php 进行测试 require_once 'socket.php'; require_ ...
- [日常] imap协议读取邮件
telnet imap.sina.net 143 A01 LOGIN shihan@appdev.sinanet.com 密码 A02 list "" * //列出邮件夹 * LI ...
- C#程序模拟登录批量获取各种邮件内容信息
一般来说,如果现实中你有这样一种需求“假如你是褥羊毛的羊毛党,你某日发现了一个app有一个活动,通过邮箱注册账号激活可以领5元红包,而恰恰你手上又有一批邮箱可用,那么批量获取邮箱中的激活链接去激活则是 ...
- 读取本地outlook邮件内容
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- 利用Python imaplib和email模块 读取邮件文本内容及附件内容
python使用imap接收邮件的过程探索 https://www.cnblogs.com/yhlx/archive/2013/03/22/2975817.html #! encoding:utf8 ...
- javamail 发送、读取邮件
概述 1.邮件相关的标准 厂商所提供的 JavaMail 服务程序可以有选择地实现某些邮件协议,常见的邮件协议包括: SMTP(Simple Mail Transfer Protocol) :即简单邮 ...
- 【转】【Python】Python发送邮件(常见四种邮件内容)
在写脚本时,放到后台运行,想知道执行情况,会通过邮件.SMS(短信).飞信.微信等方式通知管理员,用的最多的是邮件.在linux下,Shell脚本发送邮件告警是件很简单的事,有现成的邮件服务软件或者调 ...
- javamail模拟邮箱功能获取邮件内容-中级实战篇【内容|附件下载方法】(javamail API电子邮件实例)
引言: JavaMail jar包下载地址:http://java.sun.com/products/javamail/downloads/index.html 此篇是紧随上篇文章而封装出来的,阅读本 ...
随机推荐
- Spring编程式事务管理
--------------------siwuxie095 Spring 编程式事务管理 以转账为例 ...
- TZOJ 4435 n皇后问题(回溯)
描述 在 n×n 的国际象棋棋盘上放置n个皇后,使得任何一个皇后都无法直接吃掉其他的皇后(任两个皇后都不能处于同一条横行.纵行或斜线上) 输入 输入有多组(直到-1结束) 每组一行 一个整数 n(0& ...
- python之socket运用之执行命令
服务端的代码 import socket import subprocess HOST = "127.0.0.1" PORT = 5001 ip_bind = (HOST,PORT ...
- tomcat启动时端口占用的问题怎么解决
PS:web项目在启动的时候,一般会报Address already in use: bind,常规的处理思路为:删除任务管理器中的javaw.exe进程即可:当删除仍然解决不了时,一般处理思路如下, ...
- Python学习记录day7
目录 Python学习记录day7 1. 面向过程 VS 面向对象 编程范式 2. 面向对象特性 3. 类的定义.构造函数和公有属性 4. 类的析构函数 5. 类的继承 6. 经典类vs新式类 7. ...
- 20-最大k乘积问题
/* 最大k乘积问题 题目内容: 设I是一个n位十进制整数.如果将I划分为k段,则可得到k个整数. ...
- 遍历XML文件
#encoding=utf-8 from xml.etree import ElementTree as ET #要找出所有人的年龄 per=ET.parse('d:\\1.xml') p=per.f ...
- linux 版本号的查看
1.# uname -a (Linux查看版本当前操作系统内核信息) Linux localhost.localdomain 2.4.20-8 #1 Thu Mar 13 17:54:28 E ...
- js和jquery获取span里面的值
JQ和Js获取span标签的内容 html: 1 <span id="content">‘我是span标签的内容’</span> javascript获取: ...
- Luogu 3959 [NOIP2017] 宝藏- 状压dp
题解 真的想不到这题状压的做法...听说还有跑的飞快的模拟退火,要是现场做绝对滚粗QAQ. 不考虑深度,先预处理出 $pt_{i, S}$ 表示让一个不属于 集合 $S$ 的 点$i$ 与点集 $S$ ...