程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> Delphi 讓你發送 Flash 電子郵件

Delphi 讓你發送 Flash 電子郵件

編輯:Delphi

   無論 Outlook XP 還是最新的 Foxmail 4.0,都只能 在 Html 格式的電子郵件中嵌入 JPG、GIF 格式圖片,而 音色俱佳的Flash動畫卻只能作為電子郵件附件發送給好友, 你可曾感到遺憾?
經過一番實驗探索,我使用Delphi終於實現了將Flash 動畫(.SWF 格式)嵌入到電子郵件正文中發送的功能, Foxmail、Outlook均可以按照Html格式的郵件查看,而 且263、163等免費電子郵件還支持Web界面直接浏覽。可 惜的是,Sina、Sohu 免費電子郵件的 Web 界面則不支持, 只能將Flash動畫作為附件提供。
一、程序原理
下面對本程序相關的重要理論知識做些解釋,幫助大 家理解本程序的原理。更多的內容,限於文章篇幅,請參見 相關的參考書、幫助文件。
1.TNMSMTP 控件
電子郵件發送過程都必須遵循 SMTP協議。客戶端和 服務器通過該協議進行通信,由客戶端發送出電子郵件, SMTP 服務器通過網絡上其他 SMTP 服務器,最終將郵件 傳遞到收信人的郵件服務器。本程序作為電子郵件客戶端程 序,最基本的功能是要實現電子郵件發送,為了簡化編程, 使用了Delphi 5自帶的TNMSMTP控件,該控件封裝了對 SMTP編程。由於該控件繼承自TPowersock,因而必要時 可以直接調用底層的 Socket過程,又不失靈活性。
例如,雖然 TNMSMTP不直接支持“SMTP服務器認 證功能”(請參考《電腦愛好者》2001年16期《制作支持“服 務器認證”的 VB 電子郵件程序》,包括下文“BASE64 編 碼”),但是,可以利用 TNMSMTP的 Connect事件和繼承 自 TPowersock的Transaction方法,實現SMTP服務器認 證。其原理在於,Connect事件發生在 TNMSMTP與服務 器連接成功之時,此時,使用Transaction方法發出SMTP 服務器認證所規定的“AUTH LOGIN”命令,並輸入經過 BASE64編碼後的用戶名和密碼,可以實現認證。因此,本 程序實現了SMTP服務器認證。
另外,TNMSMTP 的 SendStart 事件在郵件發送開始 時觸發,在該事件中,可以通過修改 TNMSMTP 的 FinalHeader屬性值,實現修改電子郵件的郵件頭信息。在 本程序中需要修改郵件頭的Content-Type屬性,使接收嵌 入Flash動畫電子郵件的客戶端軟件(如Foxmail)能正確 處理郵件內容。
2.MIME 協議
目前,幾乎所有的郵件服務器和客戶端軟件都支持“多 用途Internet郵件擴展”協議Multipurpose Internet Mail Extensions (MIME)。該協議的最新版由 RFC2045
(Internet 消息體格式)、RFC2046 (媒體類型)、 RFC2047(無 ASCII 文本消息頭擴展)、RFC2048(注 冊過程)、RFC2049(一致性標准和例子)等共同規定。 該協議遵循了RFC822中規定的電子郵件內容只能包括簡單 的 ASCII 文本字符(如字母、數字、標點符號等),定 義了在電子郵件中包括經過編碼的二進制文件的方法,編 碼後的內容將只包括文本字符。目前,實現對二進制文件 編碼的規范有很多,BASE64 編碼規范也是其中之一。本 程序使用 TMemoryStream 對象,實現了通用的 BASE64 編碼函數 EncodeBASE64,能夠對 SWF 文件進行編碼。
通過MIME協議,電子郵件中不但可以添加附件,還可 以添加HTML格式內容,包括圖片、聲音、動畫等。Outlook、 Foxmail 4.0等軟件都可以編輯HTML格式的郵件,但是並 不支持直接嵌入Flash動畫。事實上,正確利用MIME協議, 可以在HTML格式的郵件中嵌入Flash動畫,並在郵件正文 中顯示出來,其原理和在HTML 格式郵件中顯示圖片、播 放聲音是一樣的。在Html格式郵件中嵌入Flash動畫與向 網頁中添加動畫所需要的代碼是一樣的 , 同樣使用 
<OBJECT>、<EMBED>標記,感興趣的朋友可以查看一個包 含Flash動畫的網頁源代碼,對比本程序。
在本程序中,設置郵件MIME消息頭的Content-Type 屬性為multipart/related; boundary="---SwfEmail by JDH",表示該郵件包括多個不同數據類型的部分,各個部&n

[1] [2] [3] [4] [5] [6] [7] 下一頁

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved