zoukankan      html  css  js  c++  java
  • 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 == 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);
    }
    }
  • 相关阅读:
    caffe用到的命令和零碎知识
    Manjaro — ssh出现22端口拒绝访问问题(port 22: Connection refused)
    Linux 解压z01 .z02 .z03... zip分卷
    Manjaro_Windows双系统安装
    Linux 的chsh命令
    mat2json, python读取mat成字典, 保存json
    最便捷的caffe编译方法 ---- cmake+anaconda虚拟环境
    复制跳过软链接
    使用Screen解决ssh连接中断导致的训练中断问题
    Caffe训练时Loss=87.3365问题
  • 原文地址:https://www.cnblogs.com/allanli/p/3564998.html
Copyright © 2011-2022 走看看