程式的主流程為: 開啟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讀取信件的更多相关文章

  1. 讓 SourceTree 讀取自定的 SSH key

    我目前都在 Mac 底下開發,用 Git 來管理我的程式碼,比較一番之後決定用 SourceTree 來做為 Git client.SourceTree 是一款 Mac 底下的版本控制系統 clien ...

  2. Android Training精要(五)讀取Bitmap對象實際的尺寸和類型

    讀取Bitmap對象實際的尺寸和類型 BitmapFactory.Options options = new BitmapFactory.Options(); options.inJustDecode ...

  3. PHPExcel讀取excel數據

    require_once 'PHPExcel.php'; $PHPReader = new PHPExcel_Reader_Excel2007(); $filePath = 'wjyl.xlsx'; ...

  4. 【WIN10】程序內文件讀取與保存

    DEMO下載:http://yunpan.cn/cFHIZNmAy4ZtH  访问密码 cf79 1.讀取與保存文件 Assets一般被認為是保存用戶文件數據的地方.同時,微軟還支持用戶自己創建文件夾 ...

  5. 設定 gpio 為 讀取用途,需注意的參數

    Schematic 解說 上面的 線路圖, R1 R2 只能有一個被接上, R3 R4 只能有一個被接上, 是使用 gpio 讀取 電壓 判斷為0 或是 1 這時的 gpio 設定,其中一個參數需設為 ...

  6. 無法使用 system/bin/r 讀取 pmic pm8937 hardware regitster 的原因

    Platform Qualcomm MSM8917 + PM8937 + PMI8940 起因 同事問我 PM8937 的 VREG_L17 如何設定成 3.3V, 從 PM8937 hardware ...

  7. C#、VSTO讀取Excel類

    之前寫的類存在Excel進程不能結束的Bug,重寫ExcelReader類,類實例清理時Excel進程自動結束. class ExcelReader { // Excel Object public ...

  8. POI 讀取EXCEL

    /*** 獲取單元格數值* * @param cell* @return*/private String getCellValue(Cell cell) {String cellValue = &qu ...

  9. SMBUS讀取數據的方法

    第一步     将HST_D0寄存器清零 第二部     确定HST_STS (SMB_BASE 00h)寄存器裡面的所有狀態位是清除的(写清零) 第三步     往XMIT_SLVA(SMB_BAS ...

随机推荐

  1. hdu 5014 Number Sequence

    为了a异或b的和最大,只需另b在不大于n的情况下按位取反即可. 这里有两个输出小技巧可以参考: 1.在用printf输出__int64时,在windows下使用格式"%I64d", ...

  2. Web前端新人笔记之height、min-height的区别

     浏览器参照基准:Firefox, Chrome, Safari, Opera, IE: * IE6不支持CSS min-height属性.最小高度的定义:1. 元素拥有默认高度:2. 当内容超出元素 ...

  3. 简单的JQuery分页代码

    1. [代码][JavaScript]代码      001 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" ...

  4. JS 立即执行的函数表达式(function)写法

    1. 正确的写法 对于JavaScript 来说,括弧()里面不能包含语句,所以在这一点上,解析器在解析function关键字的时候,会将相应的代码解析成function表达式,而不是function ...

  5. [转]内嵌WORD/OFFICE的WINFORM程序——DSOFRAMER使用小结

    最近一直想用VC#2005做个内嵌WORD/OFFICE的WINFORM程序,目前主要有以下解决途径: 1.直接通过API把WORD/OFFICE的窗口句柄给放到WINFORM中(感觉较为复杂): 2 ...

  6. js: get event handler bound to the element

    jQuery._data(jQuery(this)[0], "events" ).click[0].handler $._data( $("#myabc")[0 ...

  7. 开发安全的Web程序

    目录0x1:什么是安全的Web应用程序0x2:过滤输入的数据0x3:转义输出的数据0x4:Register Globals0x5:magic_quotes_gpc0x6:错误信息的报告0x7:文件的安 ...

  8. hdu 4814 Golden Radio Base

    详解见:http://blog.csdn.net/tri_integral/article/details/18666797 #include<cstdio> #include<cs ...

  9. 如何在Ubuntu Unity上修改应用程序图标

    转自如何在Ubuntu Unity上修改应用程序图标 这篇文章将教大家在Ubuntu Unity上修改应用程序图标,这个教程适合于Ubuntu 14.04, Ubuntu 13.10, Ubuntu ...

  10. 什么是实时应用程序自我保护(RASP)?

    什么产品可以定义为 RASP? RASP 英文为 Runtime application self-protection,它是一种新型应用安全保护技术,它将保护程序想疫苗一样注入到应用程序和应用程序融 ...