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 网络编程
虽然大家现在对互联网很熟悉,但是计算机网络的出现比互联网要早很多. 计算机为了联网,就必须规定通信协议,早期的计算机网络,都是由各厂商自己规定一套协议,IBM.Apple和Microsoft都有各自的 ...
- WPF 列表控件中的子控件上下文绑定
<DataGrid Grid.ColumnSpan=" Height="Auto" SelectedItem="{Binding Path=SelectP ...
- 解决使用 Composer 的时候提示输入 Token
Could not fetch https://api.github.com/repos/RobinHerbots/jquery.inputmask/contents/bower.json?ref=0 ...
- Reactor模式(反应器模式)
Reactor这个词译成汉语还真没有什么合适的,很多地方叫反应器模式,但更多好像就直接叫reactor模式了,其实我觉着叫应答者模式更好理解一些.通过了解,这个模式更像一个侍卫,一直在等待你的召唤,或 ...
- C# Windows Service调用IBM Lotus Notes发送邮件
近日研究了下IBM Lotus Mail,这货果然是麻烦,由于公司策略,没有开放smtp,很多系统邮件都没有办法发送,于是入手google学习Lotus Mail,想做成Windows服务,提供wcf ...
- 关于tabBar的图片不能正常显示问题
可以先把图片的源文件的名称后面加上@2x 这种图片显示不正常问题原因可能是没有二倍图造成的!!
- DB天气app冲刺第四天
今天卡壳了 做得很慢.. 明天继续 换一种思路试一下吧..
- 解决WP8应用里ListBox绑定数据变多导致越来越卡
ListBox控件绑定数据,当滑动到底部的时候加载数据到列表上,这样就会产生一个问题,当ListBox上面绑定的数据有几千条的时候,界面将会卡顿,我们可以通过在ListBox上只绑定指定数量的数据,其 ...
- ubuntu安装svn manager
环境:系统ubuntu14.04 0. 更新软件库 sudo apt-get update sudo apt-get upgrade -y 1. 安装apache,svn,svn的apache模块 s ...
- css中table-layout:fixed 属性的用法
table-layout:fixed 属性的用法:如果想要一个table固定大小,里面的文字强制换行(尤其是在一长串英文文本,并且中间无空格分隔的情况下),以达到使过长的文字 不撑破表格的目的,一般是 ...