背景:最近在做一个小工具,读取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协议读取邮件内容遇到的问题的更多相关文章

  1. 使用 EWS(Exchange Web Service)协议读取邮件、发送邮件

    问题: 公司之前可以通过POP3协议收发邮件,因而在SoapUI中用JavaMail可以读取邮件,后来配置了Office 365,POP3协议端口不再开放,邮件全部读取失败,报login timeou ...

  2. [PHP] PHP调用IMAP协议读取邮件类库

    socket.php 为连接socket的类库 imap.php 基于socket的imap协议封装 test.php 进行测试 require_once 'socket.php'; require_ ...

  3. [日常] imap协议读取邮件

    telnet imap.sina.net 143 A01 LOGIN shihan@appdev.sinanet.com 密码 A02 list "" * //列出邮件夹 * LI ...

  4. C#程序模拟登录批量获取各种邮件内容信息

    一般来说,如果现实中你有这样一种需求“假如你是褥羊毛的羊毛党,你某日发现了一个app有一个活动,通过邮箱注册账号激活可以领5元红包,而恰恰你手上又有一批邮箱可用,那么批量获取邮箱中的激活链接去激活则是 ...

  5. 读取本地outlook邮件内容

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  6. 利用Python imaplib和email模块 读取邮件文本内容及附件内容

    python使用imap接收邮件的过程探索 https://www.cnblogs.com/yhlx/archive/2013/03/22/2975817.html #! encoding:utf8 ...

  7. javamail 发送、读取邮件

    概述 1.邮件相关的标准 厂商所提供的 JavaMail 服务程序可以有选择地实现某些邮件协议,常见的邮件协议包括: SMTP(Simple Mail Transfer Protocol) :即简单邮 ...

  8. 【转】【Python】Python发送邮件(常见四种邮件内容)

    在写脚本时,放到后台运行,想知道执行情况,会通过邮件.SMS(短信).飞信.微信等方式通知管理员,用的最多的是邮件.在linux下,Shell脚本发送邮件告警是件很简单的事,有现成的邮件服务软件或者调 ...

  9. javamail模拟邮箱功能获取邮件内容-中级实战篇【内容|附件下载方法】(javamail API电子邮件实例)

    引言: JavaMail jar包下载地址:http://java.sun.com/products/javamail/downloads/index.html 此篇是紧随上篇文章而封装出来的,阅读本 ...

随机推荐

  1. CentOS 7安装zabbix步骤

    Zabbix配置安装 1.前期准备: 我自己的基础环境:CentOS 7 + Mysql 5.6 可以根据官网介绍一步一步安装,官网地址:https://www.zabbix.com/ 图1: 然后点 ...

  2. Oracle登录命令

    1.运行SQLPLUS工具 C:\Users\wd-pc>sqlplus 2.直接进入SQLPLUS命令提示符 C:\Users\wd-pc>sqlplus /nolog 3.以OS身份连 ...

  3. Codeforces 689B. Mike and Shortcuts SPFA/搜索

    B. Mike and Shortcuts time limit per test: 3 seconds memory limit per test: 256 megabytes input: sta ...

  4. jquery获取radio单选框的值

    1.获取原有单选框的值 var value=$("input[name='is_setting']:checked").val(); 2.获取重选后的单选框的值 <tr> ...

  5. VMware workstation 设定开机引导等待时间

    找到虚拟机磁盘文件所在的目录,编辑里面的扩展名为vmx文件,记事本即可操作,在末尾加入如下一行: bios.bootDelay = "20000" 这里的数字是毫秒,上面例子中的数 ...

  6. MySql 几个小技巧

    分页查看: 在 mysql 环境下,执行命令: pager more,之后的结果分屏了. 简明扼要地查看表结构: describe table_name

  7. 学习socket的小例子

    /************************************************************** 技术博客 http://www.cnblogs.com/itdef/   ...

  8. 原生 JS 实现移动端 Touch 滑动反弹

    什么是 Touch滑动?就是类似于 PC端的滚动事件,但是在移动端是没有滚动事件的,所以就要用到 Touch事件结合 js去实现,效果如下: 1. 准备工作 什么是移动端的 Touch事件?在移动端 ...

  9. centos6.5 设置ssh无密码登录

    :关闭防火墙 vim /etc/selinux/config 把SELINUX=enforcing修改为SELINUX=disabled   A机器root连接B机器root用户 (root用户登录) ...

  10. Dice 5 ==> dice 7

    https://github.com/Premiumlab/Python-for-Algorithms--Data-Structures--and-Interviews/blob/master/Moc ...