在项目中,我们需要监听邮件服务器,看是否有新的邮件进入。下面的代码可以帮助我们监听新邮件,并对已有的邮件进行查找:

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#:新邮件监听及搜索的更多相关文章

  1. vue 前端处理监听关键字搜索

    根据组件的业务需要,有时候搜索是把关键字返回给后台,后台处理后再把数据返回给前端渲染(多次请求服务器):有时候是前端把页面的数据全部获取下来,前端处理关键字的搜索(影响页面加载) 我这个文章是介绍第二 ...

  2. H5新特性监听手机的返回键

    var hiddenProperty ='hidden' in document ? 'hidden' :'webkitHidden' in document ? 'webkitHidden' : ' ...

  3. eas中删除原来的监听事件添加新的监听事件

    kdtEntrys.removeKDTEditListener(kdtEntrys.getListeners(KDTEditListener.class)[0]);  kdtEntrys.addKDT ...

  4. ORACLE清理、截断监听日志文件(listener.log)

    在ORACLE数据库中,如果不对监听日志文件(listener.log)进行截断,那么监听日志文件(listener.log)会变得越来越大,想必不少人听说过关于"LISTENER.LOG日 ...

  5. 涂抹Oracle笔记1-创建数据库及配置监听程序

    一.安装ORACLE数据库软件及创建实例OLTP:online transaction processing 指那些短事务,高并发,读写频繁的数据库系统.--DB_BLOCK_SIZE通常设置较小.O ...

  6. ORACLE监听配置及测试实验(2)

    实验四 在tnsname.ora里添加默认监听代号 [oracle@oracle01 admin]$ vi tnsnames.ora 添加一行 PORT1528=(ADDRESS = (PROTOCO ...

  7. 为什么有监听socket和连接socket,为什么产生两个socket

    为什么有监听socket和连接socket,为什么产生两个socket 先看一半的socket建立连接的双方的过程: 客户端: socket()---->创建出 active_socket_fd ...

  8. 11g R2 rac linstener 监听配置

    两个节点host,ipvip ,scan的信息 #eth0-Public IP 162.12.0.1    cqltjcpt1 162.12.0.3    cqltjcpt2 #eth1 PRIVAT ...

  9. linux epoll机制对TCP 客户端和服务端的监听C代码通用框架实现

    1 TCP简介 tcp是一种基于流的应用层协议,其“可靠的数据传输”实现的原理就是,“拥塞控制”的滑动窗口机制,该机制包含的算法主要有“慢启动”,“拥塞避免”,“快速重传”. 2 TCP socket ...

随机推荐

  1. java求几个数字的和输出详细步骤

    设计思想:要求几个数字的和,就要把输入的字符串转换成浮点型,然后求和再输出. 程序流程图: 程序源代码: //此程序用于从命令行接收多个数字,就和并输出. //作者:赵东睿 //2015.9.26 p ...

  2. Java50道经典习题-程序42 求数字

    题目:809*??=800*??+9*??+1其中??代表两位数,若有这样得数,求??代表的两位数 public class Prog42{ public static void main(Strin ...

  3. jQuery实例代码-表单相关

    select option 获取选中项的文本值 $("#ddl_GoOutReasonType option:selected").text() 根据索引定于option项 $(& ...

  4. 【转】php通过curl跨域向asp.net服务器上传文件及参数

    转:http://blog.sina.com.cn/s/blog_13331dce50102vq32.html 这是一个由php通过调用asp.net接口向asp.net服务器post上传文件及参数并 ...

  5. OpenCV自带dnn的Example研究(6)— text_detection

    这个博客系列,简单来说,今天我们就是要研究 https://docs.opencv.org/master/examples.html下的 6个文件,看看在最新的OpenCV中,它们是如何发挥作用的. ...

  6. 完美解决:"library not found for - "

    分析原因,解决问题 在Xcode编译的时候,可能会遇到报这个错误"library not found for - ",这是为什么呢? 由于我们在项目中使用了一些第三方的库,如百度的静态库.当Xcode ...

  7. Opencv常用函数讲解

    1.approxPolyDP(Mat(ps), poly, 5, true);//根据点集,拟合出多边形 2.fillConvexPoly(mask, Mat(ps), Scalar(255));根据 ...

  8. kuangbin专题十六 KMP&&扩展KMP POJ3080 Blue Jeans

    The Genographic Project is a research partnership between IBM and The National Geographic Society th ...

  9. spring cloud 超时时间

    zuul.host.socket-timeout-millis=60000 #zuul socket连接超时zuul.host.connect-timeout-millis=60000 #zull 请 ...

  10. Android点击事件(click button)的四种写法

    在学习android开发和测试的时候发现不同的人对于click事件的写法是不一样的,上网查了一下,发现有四种写法,于是想比较一下四种方法的不同 第一种方法:匿名内部类 代码: package com. ...