線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2056
推到 Plurk!
推到 Facebook!

以telnet直接取得郵件內容的實作

答題得分者是:yckuo
pcernet
初階會員


發表:69
回覆:113
積分:41
註冊:2002-11-29

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-03-14 20:01:22 IP:61.218.xxx.xxx 未訂閱
小弟想以telent直接取得郵件內容,不過只能取得整封信件,想將信件分區段,表頭區、本文區、附加檔區,想請對這方面有研究或是經驗的前輩指教。 Return-Path... ......... . 如果使用 Indy 的 IdPOP3 & IdMessage 則均已將區段分妥,小弟以 pos(#10 ".",mailtext) 來取得檔案的尾巴 但就是不知道該如何直接取得文件主體的內容,不要表頭也不要附加檔資訊,可否請高手指教,謝謝。
ddy
站務副站長


發表:262
回覆:2105
積分:1169
註冊:2002-07-13

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-03-31 21:26:57 IP:211.74.xxx.xxx 未訂閱
你若是要以TELNET 來存取Mail Server 可以參考看看    port : 110   (POP3) 指令 User username Pass password  stat   ---->取得郵件資訊(總數與總大小) List   ---->取得郵件資訊(編號與各郵件大小) RETR   --->取得郵件內容 quit   ---->離開    例:
procedure TForm1.Button1Click(Sender: TObject);    begin
    try            IdTelnet1.Host := 'mail.abci.com.tw';
        IdTelnet1.Port := 110;
        IdTelnet1.Connect();
        IdTelnet1.SendCmd('User david');
        IdTelnet1.SendCmd('Pass 1233');
        IdTelnet1.SendCmd('retr 1');
        Application.ProcessMessages;        finally
        IdTelnet1.Disconnect;
    end;    end;    procedure TForm1.IdTelnet1DataAvailable(Sender: TIdTelnet;
    const Buffer: string);
begin
    memo1.text := buffer;
end;    
但是如果你只想單純的取得郵件內容(不要表頭資訊…) 可能要費點功夫自己處理(字串處理,例如以固定的空白區分或是特別的字眼) 因為POP3 的協定,取回郵件內容時,它就已包含了郵件相關資訊 所以…如果Indy 已做了分段這部份的處理,那麼直接取用比較單純 以Telnet 驗證, retr 指令所傳回的是完整的內容(紅色部份) ---------------------------------------------------------
+OK mail.abci.com.tw POP3 伺服器就緒,版本: v6.0.7
user david
+OK david... 收件者已確認。
pass 1111
+OK david@mail.abci.com.tw 的信箱共有 2 封郵件 (195748 八位元組)。
list
+OK 2 195748
1 666
2 195082
.
retr 1      ---------------->(取回郵件)

+OK 666 八位元組
Return-path: 
Received: from WorldClient ([127.0.0.1])
        by excelsi.com.tw ([127.0.0.1])
        with SMTP (MDaemon.PRO.v6.0.7.R)
        for ; Mon, 31 Mar 2003 20:02:41 +0800
Received: from [211.74.166.37] via WorldClient with HTTP;
        Mon, 31 Mar 2003 20:02:40 +0800
Date: Mon, 31 Mar 2003 20:02:40 +0800
From: "david" 
To: david@mail.abci.com.tw
Subject: Test
Message-ID: 
X-Mailer: WorldClient 6.0.7
X-MDRcpt-To: david@excelsi.com.tw
X-MDRemoteIP: 127.0.0.1
X-Return-Path: david@excelsi.com.tw
X-MDaemon-Deliver-To: david@excelsi.com.tw    Test    .    
----------------------------------------------------------- 發表人 - ddy 於 2003/03/31 21:31:13
pcernet
初階會員


發表:69
回覆:113
積分:41
註冊:2002-11-29

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-04-02 09:31:59 IP:61.218.xxx.xxx 未訂閱
非常感謝您對此一問題的重視,雖然您的文章對使用 telnet 取得郵件介紹的很清楚,但如何將郵件本文中的各各區段(boundary)分別取出,還是沒有特別說明,還是要謝謝您。
ddy
站務副站長


發表:262
回覆:2105
積分:1169
註冊:2002-07-13

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-04-02 11:25:32 IP:61.218.xxx.xxx 未訂閱
引言: 但如何將郵件本文中的各各區段(boundary)分別取出,還是沒有特別說明
這部份說穿了,就是字串處理 結尾你已知如何取得,那麼觀察本文開頭處有何特別處
X-MDRemoteIP: 127.0.0.1
X-Return-Path: david@excelsi.com.tw
X-MDaemon-Deliver-To: david@excelsi.com.tw
Test
最後一個mail address 之後就是本文了 如果覺得字串處理麻煩,那你不妨看看IdMessage1.Body source code是如何做的 也是一樣的方法 如果是為了了解其原理,不妨一試 實用上…indy IdPOP3 & IdMessage 就蠻好用了
yckuo
高階會員


發表:55
回覆:389
積分:238
註冊:2003-03-07

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-04-04 12:08:33 IP:61.221.xxx.xxx 未訂閱
您好: ddy 已經說了,不過是 parse 而已.. 大致如下 ----=1234\r\n Content-Type: Content-Transfer-Encoding: Content-Disposition: attachment; filename="abc.zip"\r\n\r\n zzzzzzzzzzzzzzzzzzzzzzzzz\r\n zzzzzzzzzzzzzzzzzzzzzzzzz\r\n \r\n \r\n ----=1234--\r\n 以 ----=1234\r\n 開頭 1234 是唯一代號 以 ----=1234--\r\n 結束 中間的資訊,開頭部份是有關檔名,內文壓縮法等等資訊,讓您要將 body save 成檔案時能先正確的解出再 save. 或您可以找找 imap 來應用. yckuo
------
yckuo
系統時間:2024-05-04 13:39:05
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!