一个Windows Form获取Inbox下目录及邮件并另存邮件为msg文件的例程
来源:互联网 发布:c语言指针相减 编辑:程序博客网 时间:2024/06/05 10:38
这是根据一个客户要求写的简单例程用来替代Outlook view control的(Outlook view control的龟速实在令人不爽)由于没多大价值但是随便扔了又显得可惜,所以贴在这里希望能抛砖引玉给大家一个交流的机会。
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;using System.Runtime.InteropServices;using System.Diagnostics;using Outlook = Microsoft.Office.Interop.Outlook;using System.Security.Cryptography;namespace WindowsOutlookIssue{ public partial class Form1 : Form { private Outlook.Application OlApp = null; private Outlook.MAPIFolder OlInbox = null; private string SavePath = null; public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { Process[] ps = Process.GetProcessesByName("OUTLOOK"); if (ps.Length > 0) { OlApp = Marshal.GetActiveObject("Outlook.Application") as Outlook.Application; } else { OlApp = new Outlook.Application(); } if (OlApp != null) { Outlook.NameSpace OlSession = OlApp.Session; Outlook.OlDefaultFolders d = Outlook.OlDefaultFolders .olFolderInbox; OlInbox = OlSession.GetDefaultFolder(d); TreeNode root = new TreeNode("Inbox"); treeView1.Nodes.Add(root); IterateInbox(OlInbox, root); treeView1.ExpandAll(); ListMails(OlInbox); } } private void Form1_FormClosed(object sender, FormClosedEventArgs e) { if (OlApp != null) Marshal.ReleaseComObject(OlApp); } private void IterateInbox(Outlook.MAPIFolder folder, TreeNode root) { if (folder.Folders.Count > 0) { foreach (Outlook.MAPIFolder f in folder.Folders) { TreeNode child = new TreeNode(f.Name); root.Nodes.Add(child); IterateInbox(f, child); } } } private void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e) { Outlook.MAPIFolder currentFolder = GetCurrentFolder(e.Node .FullPath); ListMails(currentFolder); } private Outlook.MAPIFolder GetCurrentFolder(string Path) { Outlook.MAPIFolder result = null; string[] list = Path.Split('\\'); if (list.Length == 1) result = OlInbox; if (list.Length > 1) { Outlook.MAPIFolder temp = null; result = OlInbox; for (int i = 1; i < list.Length; i++) { temp = result.Folders[list[i]]; result = temp; } } return result; } private void ListMails(Outlook.MAPIFolder folder) { listView1.Items.Clear(); string labe = "/" + folder.Items.Count.ToString(); for (int i = 1; i <= folder.Items.Count; i++) { var obj = folder.Items[i]; if (obj is Outlook.MailItem) { Outlook.MailItem mail = (Outlook.MailItem)obj; ListViewItem li = new ListViewItem(mail.ReceivedTime .ToLongDateString()); li.SubItems.Add(mail.Subject); li.SubItems.Add(mail.EntryID); listView1.Items.Add(li); } Text = i.ToString() + labe; } } private void sToolStripMenuItem_Click(object sender, EventArgs e) { FolderBrowserDialog fbd = new FolderBrowserDialog(); fbd.ShowDialog(); SavePath = fbd.SelectedPath; } private void saveCurrentItemToolStripMenuItem_Click(object sender, EventArgs e) { if (SavePath != null) { if (listView1.SelectedItems.Count != 1) { MessageBox.Show("Please select only one item"); } else { string EntryID = listView1.SelectedItems[0].SubItems[2] .Text; Outlook.MailItem mail = OlApp.Session .GetItemFromID(EntryID); if (mail != null) { mail.SaveAs(SavePath + "\\" + FileNameMaker(mail.ReceivedTime, mail.Subject) + ".msg", Outlook.OlSaveAsType.olMSGUnicode); } } } else { MessageBox.Show("Please set Save Path first!"); } } private string FileNameMaker(DateTime received, String subject) { string result = null; using (MD5 md5Hash = MD5.Create()) { byte[] buffer = md5Hash.ComputeHash(Encoding.UTF8 .GetBytes(subject + "||" + received.ToLongDateString())); StringBuilder builder = new StringBuilder(); for (int j = 0; j < buffer.Length; j++) { builder.Append(buffer[j].ToString("x2")); } result = builder.ToString(); } return result; } private void saveAllItemsToolStripMenuItem_Click(object sender, EventArgs e) { if (SavePath != null) { foreach (ListViewItem li in listView1.Items) { string EntryID = li.SubItems[2].Text; Outlook.MailItem mail = OlApp.Session .GetItemFromID(EntryID); if (mail != null) { mail.SaveAs(SavePath + "\\" + FileNameMaker(mail.ReceivedTime, mail.Subject) + ".msg", Outlook.OlSaveAsType.olMSGUnicode); } } } else { MessageBox.Show("Please set Save Path first!"); } } }}
- 一个Windows Form获取Inbox下目录及邮件并另存邮件为msg文件的例程
- VC获取邮件存为eml文件到本地
- windows c获取一个目录下的所有文件
- 一个获取指定目录下一定格式的文件名称和文件修改时间并保存为文件的python脚本
- 一个获取指定目录下一定格式的文件名称和文件修改时间并保存为文件的python脚本
- JavaMail的语法格式(以获取一个邮件为例)
- Android 检查gmail Inbox邮件
- msg邮件转eml邮件
- [LotusNotes] 找回属于Louts Notes Inbox文件夹的 邮件
- Windows下的SVN安装配置及SVNNotify邮件通知
- 一个往Outlook邮件中嵌图片的例程
- 如何通过 ASP 来发送带附件、格式为 HTML 的邮件?下面提供了一个例程.
- 获取一个目录下的所有文件
- 获取一个目录下的文件信息
- 获取一个目录下的文件结构
- Windows下邮件服务器
- 存两个找工作的邮件
- Windows下Bugzilla发送邮件的配置
- 几篇介绍ZooKeeper的文章
- .NET 3.5 Keyword Description
- jboss Debug不能启动
- [团队管理]—从10则经典故事学管理
- C# Exception所有异常对象的基类
- 一个Windows Form获取Inbox下目录及邮件并另存邮件为msg文件的例程
- 使用ScriptX.cab控件
- 浅谈设计模式——外观模式
- ucos II 任务间 通信之五:消息队列1
- ucos II 任务间 通信之五:消息队列2
- Qt 正则表达式 例子
- Curses library not found. Please install appropriate package
- Swing所支持的事件监听器
- html Dom