程式的主流程為: 開啟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. Python3 网络编程

    虽然大家现在对互联网很熟悉,但是计算机网络的出现比互联网要早很多. 计算机为了联网,就必须规定通信协议,早期的计算机网络,都是由各厂商自己规定一套协议,IBM.Apple和Microsoft都有各自的 ...

  2. WPF 列表控件中的子控件上下文绑定

    <DataGrid Grid.ColumnSpan=" Height="Auto" SelectedItem="{Binding Path=SelectP ...

  3. 解决使用 Composer 的时候提示输入 Token

    Could not fetch https://api.github.com/repos/RobinHerbots/jquery.inputmask/contents/bower.json?ref=0 ...

  4. Reactor模式(反应器模式)

    Reactor这个词译成汉语还真没有什么合适的,很多地方叫反应器模式,但更多好像就直接叫reactor模式了,其实我觉着叫应答者模式更好理解一些.通过了解,这个模式更像一个侍卫,一直在等待你的召唤,或 ...

  5. C# Windows Service调用IBM Lotus Notes发送邮件

    近日研究了下IBM Lotus Mail,这货果然是麻烦,由于公司策略,没有开放smtp,很多系统邮件都没有办法发送,于是入手google学习Lotus Mail,想做成Windows服务,提供wcf ...

  6. 关于tabBar的图片不能正常显示问题

    可以先把图片的源文件的名称后面加上@2x  这种图片显示不正常问题原因可能是没有二倍图造成的!!

  7. DB天气app冲刺第四天

    今天卡壳了 做得很慢.. 明天继续 换一种思路试一下吧..

  8. 解决WP8应用里ListBox绑定数据变多导致越来越卡

    ListBox控件绑定数据,当滑动到底部的时候加载数据到列表上,这样就会产生一个问题,当ListBox上面绑定的数据有几千条的时候,界面将会卡顿,我们可以通过在ListBox上只绑定指定数量的数据,其 ...

  9. ubuntu安装svn manager

    环境:系统ubuntu14.04 0. 更新软件库 sudo apt-get update sudo apt-get upgrade -y 1. 安装apache,svn,svn的apache模块 s ...

  10. css中table-layout:fixed 属性的用法

    table-layout:fixed 属性的用法:如果想要一个table固定大小,里面的文字强制换行(尤其是在一长串英文文本,并且中间无空格分隔的情况下),以达到使过长的文字 不撑破表格的目的,一般是 ...