MailSystem.NET Gmail IMAP讀取信件
程式的主流程為: 開啟SSL連線,逐一讀取收信匣中的信件,將信件內文HTML及附檔逐一存檔後,再將信件移至垃圾桶。
程式碼如下,補充說明我寫在註解裡,請參考:
static void Main(string[] args)
{
Imap4Client clnt = new Imap4Client();
//使用ConnectSsl進行加密連線
var hmm = clnt.ConnectSsl("imap.gmail.com", );
//登入
clnt.Login("blahblah@gmail.com", "blahblah");
//取得收件匣
Mailbox inbox = clnt.SelectMailbox("inbox");
//因讀完信就會移至垃圾桶,故由後讀到前,以免序號變動
for (int n = inbox.MessageCount; n > ; n--)
{
//取回第n封信
ActiveUp.Net.Mail.Message m = inbox.Fetch.MessageObject(n);
//為每封郵件建立專屬資料夾(要換掉主旨不能當資料夾名稱的字元)
string msgFolder = string.Format("{0:yyyyMMddHHmmsss}-{1}",
m.ReceivedDate, ReplaceInvalidPathChars(m.Subject));
if (!Directory.Exists(msgFolder))
Directory.CreateDirectory(msgFolder);
//將信件內文(HTML)寫入MailBody檔案
string f = Path.Combine(msgFolder, "MailBody.html");
File.WriteAllText(f, m.BodyHtml.Text);
//逐一寫入附件檔案
foreach (MimePart att in m.Attachments)
{
f = Path.Combine(msgFolder,
//換掉不能當檔案名的字元
ReplaceInvalidFileNameChars(att.Filename));
File.WriteAllBytes(f, att.BinaryContent);
}
//將信件移至垃圾桶(CopyMessage即可產生移動資料夾的效果)
inbox.CopyMessage(n, "[Gmail]/Trash");
Console.WriteLine("{0}.{1}", n, m.Subject);
}
Console.Read();
}
//將不可做為路徑名稱的字元換成_
static string ReplaceInvalidPathChars(string raw)
{
foreach (char c in Path.GetInvalidPathChars())
raw = raw.Replace(c, '_');
return raw;
}
//將不可做為檔案名稱的字元換成_
static string ReplaceInvalidFileNameChars(string raw)
{
foreach (char c in Path.GetInvalidFileNameChars())
raw = raw.Replace(c, '_');
return raw;
}
MailSystem.NET Gmail IMAP讀取信件的更多相关文章
- 讓 SourceTree 讀取自定的 SSH key
我目前都在 Mac 底下開發,用 Git 來管理我的程式碼,比較一番之後決定用 SourceTree 來做為 Git client.SourceTree 是一款 Mac 底下的版本控制系統 clien ...
- Android Training精要(五)讀取Bitmap對象實際的尺寸和類型
讀取Bitmap對象實際的尺寸和類型 BitmapFactory.Options options = new BitmapFactory.Options(); options.inJustDecode ...
- PHPExcel讀取excel數據
require_once 'PHPExcel.php'; $PHPReader = new PHPExcel_Reader_Excel2007(); $filePath = 'wjyl.xlsx'; ...
- 【WIN10】程序內文件讀取與保存
DEMO下載:http://yunpan.cn/cFHIZNmAy4ZtH 访问密码 cf79 1.讀取與保存文件 Assets一般被認為是保存用戶文件數據的地方.同時,微軟還支持用戶自己創建文件夾 ...
- 設定 gpio 為 讀取用途,需注意的參數
Schematic 解說 上面的 線路圖, R1 R2 只能有一個被接上, R3 R4 只能有一個被接上, 是使用 gpio 讀取 電壓 判斷為0 或是 1 這時的 gpio 設定,其中一個參數需設為 ...
- 無法使用 system/bin/r 讀取 pmic pm8937 hardware regitster 的原因
Platform Qualcomm MSM8917 + PM8937 + PMI8940 起因 同事問我 PM8937 的 VREG_L17 如何設定成 3.3V, 從 PM8937 hardware ...
- C#、VSTO讀取Excel類
之前寫的類存在Excel進程不能結束的Bug,重寫ExcelReader類,類實例清理時Excel進程自動結束. class ExcelReader { // Excel Object public ...
- POI 讀取EXCEL
/*** 獲取單元格數值* * @param cell* @return*/private String getCellValue(Cell cell) {String cellValue = &qu ...
- SMBUS讀取數據的方法
第一步 将HST_D0寄存器清零 第二部 确定HST_STS (SMB_BASE 00h)寄存器裡面的所有狀態位是清除的(写清零) 第三步 往XMIT_SLVA(SMB_BAS ...
随机推荐
- 在linux CentOS6上安装web环境
感谢浏览,欢迎交流=.= 都说linux作为服务器优于window,近期也是学习了下linux. win7下安装了linux虚拟机,购买linux阿里云主机,开启linux之旅. 进入正题,在linu ...
- PXE安装linux系统
利用网络安装系统流程:1.配置dhcp,让客户端能够自动获取ip,在dhcp配置中添加pxelinux.0配置,使客户端连接tftp文件2.复制光盘镜像的isolinux文件夹下面的所有文件到tftp ...
- Sublime Text 3插件安装方法
安装Sublime Tex 3t插件的方法: 按快捷键Ctrl + ~ 调出console 粘贴以下代码到console并回车: import urllib.request,os; pf = 'Pac ...
- 纯javascript 回到 顶部 实例
很多网站都会采用瀑布式的加载模式,像qq空间加载好友动态,为了用户体验更好,很多网站会加上回到顶部的连接,但大多数网站都是一下子就回到了顶部,当然,这样有这样的好处,但是我是个比较喜欢很炫的东西的人, ...
- Android开发系列之Android项目的目录结构
今天开始正式学习Android开发的种种细节,首先从最基本的概念和操作学起. 首先看一下Android项目的目录结构. 这是我随便建立的一个test项目,我们重点关注一下几个方面的内容: 1.src目 ...
- Python设计模式——状体模式
需求,根据当前的时间,返回工作状态 #encoding=utf-8 __author__ = 'kevinlu1010@qq.com' def get_state(hour): if hour> ...
- MVC-Html.ActionLink的几种写法
Html.ActionLink("linkText","actionName") Html.ActionLink("linkText",&q ...
- centos 下 yum 安装 nginx 平滑切换安装到 Tengine
---恢复内容开始--- 据说淘宝的Tengine很牛X,所以我们今天也来玩玩,我们这里是某开放云的vps,现在已经安装好了nginx,现在我们要平滑切换到安装Tengine. 下载Tengine,解 ...
- SQL中not and or优先级问题
SQL中 not and or优先级问题 刚刚在项目中遇到这样一个问题,SQL语句如下: 我想要的结果的条件是:1. LIBRARY_ID=1 或者 LIB_ID=1 2.STATUS=3 但是结果 ...
- BZOJ 1729: [Usaco2005 dec]Cow Patterns 牛的模式匹配
Description 约翰的N(1≤N≤100000)只奶牛中出现了K(1≤K≤25000)只爱惹麻烦的坏蛋.奶牛们按一定的顺序排队的时候,这些坏蛋总会站在一起.为了找出这些坏蛋,约翰让他的奶牛排好 ...