Delphi让你发送Flash电子邮件(1)

2016-01-29 14:14 10 1 收藏

Delphi让你发送Flash电子邮件(1),Delphi让你发送Flash电子邮件(1)

【 tulaoshi.com - Delphi 】

 
Delphi让你发送Flash电子邮件

  无论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",表示该邮件包括多个不同数据类型的部分,各个部分之间用"---SwfEmail by JDH"(不包括引号)区分。在邮件内容的这些部分中,根据每部分的内容不同,再为其添加相应的MIME消息头,具体可参见程序源代码。

二、编程实战

  启动Delphi 5,参考图1在Form1上创建各种控件。图中黑色方框内标明了控件名称,其中txt前缀表示TEdit控件,mem前缀表示TMemo控件,chk前缀表示TCheckbox控件,btn前缀表示TButton控件,NMSMTP1是TNMSMTP控件,OpenDialog1是TOpenDialog控件。图2列出了一部分控件的某些关键属性。

现在添加代码如下:


{******Unit1.pas源代码内容如下******}
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, Psock, NMsmtp;
type

......
procedure TForm1.btnOpenClick(Sender: TObject);
begin
{打开对话框,选择SWF文件}
if OpenDialog1.Execute then

procedure TForm1.NMSMTP1

来源:https://www.tulaoshi.com/n/20160129/1492810.html

延伸阅读
eMule为什么会发送电子邮件   eMule 0.46a及更高版本 有以下两个可能: 1.你可能在选项 - 通知中开启了邮件通知,并且勾选了弹出消息当下面的一个下载已完成或紧急:磁盘空间不足,失去服务器连接。 2.防火墙的误报。 eMule 0.46a之前的版本 在0.46a以前,eMule根本不会发送电子邮件。 问题的跟源...
Visual C#是微软公司推出的下一代程序开发语言。他不仅具有Visual C++功能强大的特点,又具有Visual Basic的简洁,易上手的特点。所以一经推出,就收到了广大程序开发人员的欢迎。Visual C#和Visual C++的一个明显的区别在于,Visual C#本身是没有类库的,而Visual C++却是自身就带有类库。Visual C#虽然没有类库,但作为.Net框架中的一个...
标签: PHP
  我经常听到这样一个问题:"我有一个从网站发来的合同。我如何给通过表单发送的电子邮件增加一个附件呢?" 首先我要说的是要做到这个没有什么简单的办法。你要很好的理解PHP或其它的服务器端的脚本语言。当然你还要一个真正支持PHP的网站的账号。如果满足了这个前提,在你读完了本章后就可以用PHP发送带附件的电子邮件了。 ...
标签: PHP
由于 PHP 没有提供现成的smtp函数,却提供了一个功能不甚灵活的mail()函数,这个函数需要服务器配置上的支持,并且不支持smtp验证,在很多场合无法正常的 工作 ,因此不建议使用。本文的目的在于为新手指明方向,并没有涉及那些高级的内容,一来本身水平有限,二来也担心不能准确的讲述相关的概念,进而对各位造成误导,还请自...
标签: ASP
  Click here to copy the Code to your clipboard (Only for IE Users) 'Declare Variables Dim CDONTSObj, MessageBody 'Create the CDONTS object Set CDONTSObj = Server.CreateObject("CDONTS.NewMail") 'To Address CDONTSObj.To = "info@scriptmate.com" 'From Address CDONTSObj.From = "you@yours...