2011-11-14 72 views
1

我正在學習TCL,並試圖創建一個TCL項目,該項目使用IMAP獲取未歸檔的消息,然後將它們添加到我的數據庫中。我有基本的連接,登錄,讀取和讀取數據的所有工作,但現在我很困惑如何獲取文件並保存它。TCL和IMAP - 提取原始.eml文件

是否有可能直接保存文件,或者我需要以某種方式自己創建一個文件後,我個人獲取標題,正文,附件等?

P.S.

我在這個主題上找到的任何東西都是在PHP/C#或其他任何東西,但TCL!並且它們都具有內置函數來獲取數據並保存。我找到了TCL的imap4庫,但它似乎沒有與PHP相同的功能。

+0

Hi Keith。恐怕我不完全明白你的問題。你提到的這個「文件」是什麼?你爲什麼提到一個數據庫? – TrojanName

+0

抱歉,我的意思是電子郵件,以獲取整個電子郵件和所有信息,然後保存在本地。提到一個數據庫只是爲了解釋我爲什麼要問這個問題,以及我想要做什麼。 –

回答

2

從我在互聯網上看到的「.eml」是舊的軟件調用「mbox格式」,也就是說,它只是一個純文本文件,它包含一個電子郵件消息,因爲它通過電線傳輸SMTP。

從我在section about the "FETCH" command in the IMAP RFC中看到的,FETCH FULL命令是假定提取給定消息的全部內容的東西。

由於寫的東西在Tcl的文件是一個沒有腦子,我只是嘗試這條路線:

  1. 使用FETCH FULL得到完整的信息;
  2. 以寫/附加模式打開名稱以「.eml」結尾的文件,將結果通道配置爲具有「二進制」語義(通過調用chan config $fd -translation binary);
  3. 在那裏寫入提取的內容,關閉文件。

然後通過嘗試將結果文件導入到Outlook或Thunderbird或其他內容來驗證它是如何工作的。

+0

非常感謝您的出色答案,我在查找命令時遇到了麻煩,但也許我只需要更新我的TCL版本,然後我就試試看! –

+0

@KeithBurke,'chan'命令出現在8.5中。如果你有一個更老的版本,可以使用'fconfigure $ fd -translation binary'(我當然也可以在8.5+中工作)。 – kostix

+0

對不起,真的很晚回覆,但這並沒有實際工作,當我這樣做時,我得到: * 1 FETCH(FLAGS(\ Seen NonJunk)INTERNALDATE「26-Oct-2011 16:33:20 +0200」RFC822。 SIZE 1732 ENVELOPE(「Wed,26 Oct 2011 16:33:19 +0200」「=?ISO-8859-1?Q?grpicm_35436_ge = E4ndert_von_wr?=」((NIL NIL「system」「grp.de」))( (NIL NIL「system」「grp.de」))((NIL NIL「system」「grp.de」))((NIL NIL「kb」「grp.de」)(NIL NIL「keu」「grp.de 「))((NIL NIL」wr「」grp.de「))NIL NIL」<[email protected]>「)BODY(」text「」plain「(」charset「」 ISO-8859-1「)NIL NIL」8BIT「150 5)) C OK Fetch完成。 –

4

用途:

FETCH <message ID> BODY.PEEK[] 

,以獲得完整的信息(主體+標題)。

相關問題