程式的主流程為: 開啟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. ubuntu的syslog为空,停止写入解决方法

    修改syslog权限: chown syslog:adm syslog

  2. Express框架学习总结

    最近学了Express框架,在学习的过程中,参考了一些资料,感觉Express框架比原生Node.js好用多了.下面我将我学习总结的内容如下: Express中文网     http://www.ex ...

  3. CentOS添加RPMforge软件源

    1.查看CentOS版本 cat /etc/redhat-release 2.查看系统位数 uname -i 3.下载rpm包 wget "rpm地址" CentOS 6: i68 ...

  4. Mac下无法推出硬盘

    Q:刚刚mac使用移动硬盘,使用后推出时弹出无法推出,提示:Finder正在使用中. 解决:打开#活动监视器#(找不到可以在spotlight中搜索),找到Finder应用,双击,强制退出后再启动Fi ...

  5. 读取Excel列内容

    http://blog.sina.com.cn/s/blog_6e001be701016yi8.html

  6. RPM是RedHat Package Manager(RedHat软件包管理工具)

    RPM是RedHat Package Manager(RedHat软件包管理工具)类似Windows里面的“添加/删除程序” rpm 执行安装包二进制包(Binary)以及源代码包(Source)两种 ...

  7. c++ 联合体

    联合体分配的内存大小是成员变量中最大变量的大小 联合体的成员变量共享内存 小段模式(X86就是) 低位数据存在低地址单元 大端模式                     高位字节存在低地址单元

  8. Eclipse 安装Activiti 插件失败解决方法

    遇到的错误为:1.4.0' but it could not be found等.

  9. http://sofar.blog.51cto.com/353572/1540874

    http://sofar.blog.51cto.com/353572/1540874 http://singlefly.blog.51cto.com/4658189/1368579 http://ww ...

  10. 进程间通信(IPC) 简介

    IPC是进程间通信的简称.传统上该术语描述的是运行在某个操作系统之上的不同进程间消息传递的不同方式. 我们讨论分为四个领域: 消息传递(管道,FIFO,消息队列(system v消息队列,posix消 ...