程式的主流程為: 開啟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. Apache服务

    Apache服务的安装: Apache服务程序的软件包名称是:httpd 安装方法: rpm软件包安装.源码编译安装.yum安装 yum install httpd 安装完成后启动: revice h ...

  2. Huffman Coding 哈夫曼编码

    作者:jostree 转载请注明出处 http://www.cnblogs.com/jostree/p/4096079.html 使用优先队列实现,需要注意以下几点: 1.在使用priority_qu ...

  3. DataTable 数据量大时,导致内存溢出的解决方案

    /// <summary> /// 分解数据表 /// </summary> /// <param name="originalTab">需要分 ...

  4. C#使用oledb方式将excel数据导入到datagridview后数据被截断为 255 个字符

    问题描述:在使用oledb方式将excel数据导入到datagridview中,在datagridview单元格中的数据没有显示全,似乎只截取了数据源中的一段 解决方案:1.关于该问题,微软官方答案: ...

  5. php 魔术方法__get()和__set()理解

    __get()方法,官方手册上是这样解释的 : ' 当调用(自己加的:或设置|赋值)当前环境下未定义或不可见的类属性或方法时,重载方法会被调用.本节后面将使用"不可访问属性(inaccess ...

  6. PHP学习心得(七)——常量

    常量的范围是全局的. 可以用 define() 函数来定义常量. <?php define("CONSTANT", "Hello world."); ec ...

  7. 《C和指针》读书笔记——第二章 基本概念

    1.编译过程: source code→Compiler→Object code→Linker←Lib ↓ Exe 2.经过初始化的静态变量(static)在程序执行前能获得他们的值. 3.绝大多数环 ...

  8. Sublime Text 3插件之Emmet:HTML/CSS代码快速编写神器

    一.快速编写HTML代码 1.  初始化 HTML文档需要包含一些固定的标签,比如<html>.<head>.<body>等,现在你只需要1秒钟就可以输入这些标签. ...

  9. Android常用的工具类(转)

    主要介绍总结的Android开发中常用的工具类,大部分同样适用于Java.目前包括HttpUtils.DownloadManagerPro.ShellUtils.PackageUtils.Prefer ...

  10. HTML5&CSS3&JavaScript&PHP&MySQL学习笔记

    1.在文字间添加一条水平线  使用<hr />  注意该符号不是成对出现的 2.<q> </q>用来标记于段落中的较短引用,浏览器会在它之间的语句两端加上双引号. ...