C#:新邮件监听及搜索
在项目中,我们需要监听邮件服务器,看是否有新的邮件进入。下面的代码可以帮助我们监听新邮件,并对已有的邮件进行查找:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Office.Interop.Outlook; namespace EmailReceiver
{
public class EmailAnalyzer
{
static ApplicationClass outlookApp = new Microsoft.Office.Interop.Outlook.ApplicationClass();
static NameSpace ns; static EmailAnalyzer()
{
ns = outlookApp.GetNamespace("MAPI");
} public static void Start()
{
AnalyzeNewItem();
} public static List<MailItem> GetMailItemsWithInFolders(Folders folders, string folderName)
{
List<MailItem> allmails = new List<MailItem>();
if (folders != null)
{
int foldersCount = folders.Count; for (int i = 1; i <= foldersCount; i++)
{
var subFolder = folders[i];
if (!subFolder.Name.Equals(folderName, StringComparison.InvariantCultureIgnoreCase))
{
continue;
} foreach (var item in subFolder.Items)
{
if (item is MailItem)
{
var mail = item as MailItem;
allmails.Add(mail);
}
}
}
}
return allmails;
} public static List<Folders> GetUnderlyingFolders(Folders inputFolder)
{
List<Folders> allFolders = new List<Folders>();
if (inputFolder != null)
{
int foldersCount = inputFolder.Count;
if (foldersCount > 0)
{
for (int i = 1; i <= foldersCount; i++)
{
var subFolder = inputFolder[i];
allFolders.AddRange(GetUnderlyingFolders(subFolder.Folders));
}
}
else
{
allFolders.Add(inputFolder);
}
}
return allFolders;
} public static List<Folders> GetUnderlyingFolders(Folders inputFolder, string folderName)
{
List<Folders> allFolders = new List<Folders>();
if (inputFolder != null)
{
int foldersCount = inputFolder.Count;
if (foldersCount > 0)
{
for (int i = 1; i <= foldersCount; i++)
{
var subFolder = inputFolder[i];
if (subFolder.Name.Equals(folderName, StringComparison.InvariantCultureIgnoreCase))
{
allFolders.AddRange(GetUnderlyingFolders(subFolder.Folders));
}
}
}
else
{
allFolders.Add(inputFolder);
}
}
return allFolders;
} public static List<MailItem> GetUnderlyingItems(string folderName = "")
{
var inbox = ns.GetDefaultFolder(OlDefaultFolders.olFolderInbox);
return GetUnderlyingItems(inbox.Folders, !string.IsNullOrEmpty(folderName) ? null : inbox.Items, folderName);
} private static List<MailItem> GetUnderlyingItems(Folders inputFolder, Items items, string folderName = "")
{
List<MailItem> allItems = new List<MailItem>();
if (inputFolder != null)
{
if (items != null)
{
foreach (var item in items)
{
if (item is MailItem)
{
var mail = item as MailItem;
allItems.Add(mail);
}
}
} int foldersCount = inputFolder.Count;
if (foldersCount > 0)
{
for (int i = 1; i <= foldersCount; i++)
{
var subFolder = inputFolder[i];
if (!string.IsNullOrEmpty(folderName))
{
if (folderName.Equals(subFolder.Name, StringComparison.InvariantCultureIgnoreCase))
{
foreach (var item in subFolder.Items)
{
if (item is MailItem)
{
var mail = item as MailItem;
allItems.Add(mail);
}
}
}
else
{
allItems.AddRange(GetUnderlyingItems(subFolder.Folders, null, folderName));
}
}
else
{
allItems.AddRange(GetUnderlyingItems(subFolder.Folders, subFolder.Items, folderName));
}
}
} } return allItems;
} private static void AnalyzeNewItem()
{
var allItems = GetUnderlyingItems(""); var matchedItems = allItems.Where(s => s.Subject != null && s.Subject.ToLower().Contains("")).ToList();
var count = matchedItems.Count;
foreach (MailItem item in matchedItems)
{
Console.WriteLine(item.Subject);
Console.WriteLine(item.To);
Console.WriteLine(item.SenderName);
Console.WriteLine(item.ReceivedTime);
//Console.WriteLine(item.Body);
} Console.ReadLine();
}
}
}
同时附上常用的邮件发送组件:
public static class MailHelper
{
private const string SMTPHost = "mail.pimco.com";
private const string FromAdress = "hailongli@pimco.com";
private const string FromDisplay = "Hailong LI";
private static readonly MailAddress From;
private static List<string> toList = new List<string>(); static MailHelper()
{
From = new MailAddress(FromAdress, FromDisplay);
toList.Clear();
toList.Add(FromAdress);
} public static void SendToMyself(string subject, string body)
{
MailHelper.Send(new List<string>(), null, subject, body, null);
} private static void Send(List<string> to, string subject, string body, List<System.Net.Mail.Attachment> attachments)
{
MailHelper.Send(to, null, subject, body, attachments);
} private static void Send(List<string> to, List<string> cc, string subject, string body, List<System.Net.Mail.Attachment> attachments)
{
if (to == null || to.Count == )
{
var ex = new ArgumentNullException("must assign a receiver.");
return;
} MailMessage message = new MailMessage { Subject = subject, Body = body };
message.From = From;
to.ForEach(t => message.To.Add(t));
if (cc != null)
{
cc.ForEach(c => message.CC.Add(c));
} if (attachments != null)
{
attachments.ForEach(attachemet => message.Attachments.Add(attachemet));
} SmtpClient client = new SmtpClient(SMTPHost);
client.UseDefaultCredentials = true;
client.DeliveryMethod = SmtpDeliveryMethod.Network;
client.SendCompleted += delegate(object sender, AsyncCompletedEventArgs e)
{
SmtpClient smtpClient = sender as SmtpClient;
if (smtpClient != null)
{
smtpClient.Dispose();
}
}; client.SendAsync(message, null);
}
}
C#:新邮件监听及搜索的更多相关文章
- vue 前端处理监听关键字搜索
根据组件的业务需要,有时候搜索是把关键字返回给后台,后台处理后再把数据返回给前端渲染(多次请求服务器):有时候是前端把页面的数据全部获取下来,前端处理关键字的搜索(影响页面加载) 我这个文章是介绍第二 ...
- H5新特性监听手机的返回键
var hiddenProperty ='hidden' in document ? 'hidden' :'webkitHidden' in document ? 'webkitHidden' : ' ...
- eas中删除原来的监听事件添加新的监听事件
kdtEntrys.removeKDTEditListener(kdtEntrys.getListeners(KDTEditListener.class)[0]); kdtEntrys.addKDT ...
- ORACLE清理、截断监听日志文件(listener.log)
在ORACLE数据库中,如果不对监听日志文件(listener.log)进行截断,那么监听日志文件(listener.log)会变得越来越大,想必不少人听说过关于"LISTENER.LOG日 ...
- 涂抹Oracle笔记1-创建数据库及配置监听程序
一.安装ORACLE数据库软件及创建实例OLTP:online transaction processing 指那些短事务,高并发,读写频繁的数据库系统.--DB_BLOCK_SIZE通常设置较小.O ...
- ORACLE监听配置及测试实验(2)
实验四 在tnsname.ora里添加默认监听代号 [oracle@oracle01 admin]$ vi tnsnames.ora 添加一行 PORT1528=(ADDRESS = (PROTOCO ...
- 为什么有监听socket和连接socket,为什么产生两个socket
为什么有监听socket和连接socket,为什么产生两个socket 先看一半的socket建立连接的双方的过程: 客户端: socket()---->创建出 active_socket_fd ...
- 11g R2 rac linstener 监听配置
两个节点host,ipvip ,scan的信息 #eth0-Public IP 162.12.0.1 cqltjcpt1 162.12.0.3 cqltjcpt2 #eth1 PRIVAT ...
- linux epoll机制对TCP 客户端和服务端的监听C代码通用框架实现
1 TCP简介 tcp是一种基于流的应用层协议,其“可靠的数据传输”实现的原理就是,“拥塞控制”的滑动窗口机制,该机制包含的算法主要有“慢启动”,“拥塞避免”,“快速重传”. 2 TCP socket ...
随机推荐
- ROS nodelet 理解记录
发现网上许多的例子都是基于官网的例子,还需要做进一步的说明. 1. NODELET_DEBUG 是无法打印的信息的,需要使用NODELET_INFO NODELET_DEBUG("Addin ...
- eval实例
.... var sel_MedicineType = 'sel_MedicineType' + lastIndex; eval(sel_MedicineType + "= new C_Se ...
- Glib学习笔记(二)
你将学到什么 如何实现Object的构造函数和析构函数 如何在条件检测不允许的情况下终止对象创建 Object的构造函数 对象的构造函数是不允许失败,如果你需要一个允许失败的GObject构造函数,使 ...
- 剑指offer —— 替换空格
1.问题:请实现一个函数,将一个字符串中的空格替换成“%20”.例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. 2.思路:可能首先想到的应该就是 ...
- luogu2257 YY的GCD--莫比乌斯反演
link 给定N, M,求1<=x<=N, 1<=y<=M且gcd(x, y)为质数的(x, y)有多少对 多组数据T = 10000 N, M <= 10000000 ...
- dorado中的视图实现类和监听器
视图模型实现类(DefaultViewModel.java)的主要功能: 1. Dataset的初始化以及数据导入 2. 各种View组件的初始化工作 DefaultViewModel也是动态创建 ...
- Django forum
Django是比较有名的Python Web框架,很多著名的网站如Instagram就是用的Django.V2EX是一个界面简洁,功能丰富的论坛,最新源码尚未开源.网络上有很多模仿V2EX外观使用其它 ...
- 2-28 switch
- Oracle redo undo
通常对undo有一个误解,认为undo用于数据库物理地恢复到执行语句或事务之前的样子,但实际上并非如此.数据库只是逻辑地恢复到原来的样子,所有修改都被逻辑地取消,但是数据结构以及数据库块本身在回滚后可 ...
- Go语言基础之13--线程安全及互斥锁和读写锁
一.线程安全介绍 1.1 现实例子 A. 多个goroutine同时操作一个资源,这个资源又叫临界区 B. 现实生活中的十字路口,通过红路灯实现线程安全 C. 火车上的厕所(进去之后先加锁,在上厕所, ...