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 ...
随机推荐
- Python3 内建模块 datetime/collections/base64/struct
datetime 我们先看如何获取当前日期和时间: >>> from datetime import datetime >>> now = datetime.now ...
- MAC自带的lnmp
MAC自身带有apache,php. 1.启动apache服务 sudo apachectl start/restart/stop 2.查看php的版本 php -v 3.让apache支持ph ...
- LNMP1.2一键安装教程
系统需求: CentOS/RHEL/Fedora/Debian/Ubuntu/Raspbian Linux系统 需要2GB以上硬盘剩余空间 128M以上内存,Xen的需要有SWAP,OpenVZ的另外 ...
- 解决Twitter Bootstrap Tab URL链接问题
例如这样的一个Tabs 代码: <ul class="nav nav-tabs" id="myTab"> <li class="ac ...
- web2py--------------用web2py写 django的例子 --------建立一个投票应用(2)
建立模型 我们在models下及那里polls.py 文件内容如下 # -*- coding: utf-8 -*- pollsdb=DAL(uri='sqlite://polls.db') polls ...
- poj 2796 Feel Good 单调栈区间问题
Feel Good 题意:给你一个非负整数数组,定义某个区间的参考值为:区间所有元素的和*区间最小元素.求该数组中的最大参考值以及对应的区间. 比如说有6个数3 1 6 4 5 2 最大参考值为6,4 ...
- c++二分答案 之 跳石头
题目: 题目描述 Description 一年一度的“跳石头”比赛又要开始了! 这项比赛将在一条笔直的河道中进行,河道中分布着一些巨大岩石.组委会已经选择好了两块岩石作为比赛起点和终点.在起点和终点之 ...
- android正在运行进程和后台缓存进程的区别
正在运行的进程:需要占用一定的cpu资源和RAM(内存)空间,多少的话看是什么应用,要消耗一定的电量,影响手机速度等性能. 后台缓存的进程:不需要占用cpu资源,会在RAM中写入一部分数据,当下次打开 ...
- Get your Windows product key from a script
The product key is located in the registry under HKLM\Software\Microsoft\Windows NT\CurrentVersion I ...
- SWFUpload下载地址
SWFUpload托管在谷歌代码上面,点击下载: https://code.google.com/p/swfupload/