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

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. 8.8 Deep Learning Software

    深度学习软件 -CPU vs GPU -Deep Learning Framework - Caffe / Caffe2 - Theano / TensorFlow - Torch / PyTorch ...

  2. [译]javascript中定义函数的各种方法

    本文翻译youtube上的up主kudvenkat的javascript tutorial播放单 源地址在此: https://www.youtube.com/watch?v=PMsVM7rjupU& ...

  3. 获取GridView控件总列数

    GridView控件,它不管是放在MasterPage母版页内,还是放在Page单独网页内,它不管是自动显示列AutoGenerateColumns="true",还是手动定列Au ...

  4. FPM包定制完成 (等待实现 里程碑 1 和 2) 2018年4月13日 2:18:32

    前期环境准备: 关闭SELINUX  :   setenforce 0 关闭SELINUX  :   sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' / ...

  5. 51nod - 1179 - 最大的最大公约数 - 枚举

    因为 \(\sum\limits_{i=1}^{n}\lfloor\frac{n}{i}\rfloor=O(nlogn)\) 所以直接暴力就可以了. #include<bits/stdc++.h ...

  6. 转场动画CALayer (Transition)

    1.将对应UI控件的层调用以下接口即可 1.1 .h文件 // // 文 件 名:CALayer+Transition.h // // 版权所有:Copyright © 2018年 leLight. ...

  7. json互转笔记

    JSON.parse()与JSON.stringify()的区别 JSON.parse()[从一个字符串中解析出json对象] 例子: //定义一个字符串 var data='{"name& ...

  8. yum源安装Percona

    yum源安装更为简单,方便.话不多说,开始吧. 1.下载yum源 yum -y install https://www.percona.com/redir/downloads/percona-rele ...

  9. 区块链中的密码学(四)- Merkle树和SPV节点

    什么是Merkle Tree? Merkle Tree 的命名来自于美国密码学家Ralph C. Merkle ,关于他的个人资料:传送门https://en.wikipedia.org/wiki/R ...

  10. luogu3312 [SDOI2014]数表 (莫比乌斯反演+树状数组)

    link \(\sum_{i=1}^n\sum_{j=1}^m[s(\gcd(i,j))\le a]s(\gcd(i,j))\) \(=\sum_{p=1}^ns(p)[s(p)\le a]\sum_ ...