首页 > 其他 > 详细

C#:新邮件监听及搜索

时间:2014-02-25 14:10:55      阅读:359      评论:0      收藏:0      [点我收藏+]

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

bubuko.com,布布扣

 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();
        }
    }
}
bubuko.com,布布扣

 同时附上常用的邮件发送组件:

bubuko.com,布布扣
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 == 0)
{
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);
}
}
bubuko.com,布布扣

C#:新邮件监听及搜索

原文:http://www.cnblogs.com/allanli/p/3564998.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!