Delphi使用Python來解碼郵件

2021-09-06 01:44:55 字數 2517 閱讀 9133

估計很多人和我一樣,在使用indy的時候都會受不了眾多的bug,不得不邊使用邊修改。

近來一直使用indy來收發郵件,從d7到d2007再到d2010,後來直接從svn中檢出乙個最新版本來,讓人驚喜的是新版本中修復了一些bug,讓人沮喪的是新版本中又重新引入了一些新的bug,唉,鍛鍊人啊。

前幾天簡單看了一下python,測試了一下發現python對郵件的處理簡直簡練至極!並且接收和解碼上也勝indy很多,於是就想用python來處理郵件。但因為工程是用delphi的,所以就上網搜尋了一下,發現了pythonfordelphi,使用了一下,很不錯,於是就用python做了個解碼,然後在delphi中呼叫。

python4delphi:

入門:

噢,它竟然在google上和yahoo上都安了家:

看一下python端的**:

1import

email23

fp =

open(

"test.eml", 

"r")  

#開啟eml檔案

4msg 

=email.message_from_file(fp) 5#

msg = email.message_from_string(str) #也可以從字串建立

6subject 

=msg.get(

"subject") 

#取信件頭里的subject, 也就是主題7#

下面的三行**只是為了解碼象=?gbk?q?=cf=e0=c6=ac?=這樣的subject8h 

=email.header.header(subject)

9dh 

=email.header.decode_header(h)

10subject 

=dh[0][0]

11print

"subject:

", subject

12print

"from: 

", email.utils.parseaddr(msg.get(

"from

"))[1] 

#取from

13print

"to: 

", email.utils.parseaddr(msg.get("to

"))[1] 

#取to

1415

#迴圈信件中的每乙個mime的資料塊16i

=017textplain=''

18texthtml=''

1920

forpar 

inmsg.walk():

21if

notpar.is_multipart(): 

#這裡要判斷是否是multipart,是的話,裡面的資料是無用的,至於為什麼可以了解mime相關知識。

22name 

=par.get_param(

"name") 

#如果是附件,這裡就會取出附件的檔名

23print

name

2425

ifname:

26print

'有附件'+

name  

#此處略,不對附件做處理,只處理文字內容

27else:28

#不是附件,是文字內容29#

print par.get_payload(decode=true) # 解碼出文字內容,直接輸出來就可以了。

30content_type

=par.get_content_type()

31if

content_type in[

'text/plain']:

32textplain

=par.get_payload(decode

=true)

33textplain.value

=textplain  

#這裡textplain.value和下面的texthtml.value在正常python中是不能正確執行的,是pytho4delphi中的物件

34if

content_type in[

'text/html']:

35texthtml

=par.get_payload(decode

=true)

36texthtml.value

=texthtml

3738

fp.close()39

好了,上面只是示例性地處理了文字內容

下面在delphi中增加兩個tpythondelphivar,分別為textplain和texthtm,然後:

1pe.execstrings(memo1.lines);

//memo1中為上面的python**,當然可以放到檔案中

2showmessage(texthtml.valueasstring);

//這時texthtml.valueasstring就是解碼後的郵件超文字內容,如果有text

/plain內容,取textplain的值即可。

好了,不要再和indy生氣了!  :-)

使用python 來實現炒股

以前有這種想法,自從平時下班後自學python 開始,這種想法就越演越烈。其實筆者 也只有一年時間,經驗遠遠不足,但想著平時私下時間拿來做點啥事,因此也是這篇文章的由來。1.的策略 對於 的研究,一直想再專門寫個 論述 論 特別是這兩年量化投資盛行,基本都是在python語言基礎上進行的策略回歸。總...

使用python來登入網頁

用 python 來爬取這個網頁的一些基本資訊.首先要做的,是使用 python 來登入這個網頁,並列印出這個網頁 html 的 source code.注意,因為網頁中存在中文,為了正常顯示中文,read 完以後,我們要對讀出來的文字進行轉換,decode 成可以正常顯示中文的形式.下面我們就來試...

使用psyco來加速python程式

最近在寫乙個python的 由於要處理大量的迴圈語句,導致整個程式執行起來顯得很吃力,所以想試試psyco這個模組。使用方法 1 在自己的python 中加入import psyco psyco.full psyco.full 是對所有的函式都編譯,但是記憶體開銷也隨之增加不少,在我的專案中測試發現...