delphi让你发送flash电子邮件完整源代码:
{******unit1.pas源代码内容如下******}
unit unit1;
interface
uses
windows, messages, sysutils, classes, graphics, controls, forms,
dialogs, stdctrls, extctrls, psock, nmsmtp;
type
tform1 = class(tform)
label1: tlabel;
txtto: tedit;
label2: tlabel;
txtfrom: tedit;
label3: tlabel;
txtsubject: tedit;
label4: tlabel;
memcontents: tmemo;
label5: tlabel;
txtusername: tedit;
label6: tlabel;
txtpassword: tedit;
chksmtpverify: tcheckbox;
btnsend: tbutton;
btnopen: tbutton;
txtswffile: tedit;
label7: tlabel;
opendialog1: topendialog;
label8: tlabel;
txtsmtpserver: tedit;
nmsmtp1: tnmsmtp;
label9: tlabel;
txtport: tedit;
procedure btnopenclick(sender: tobject);
procedure btnsendclick(sender: tobject);
procedure nmsmtp1sendstart(sender: tobject);
procedure nmsmtp1connect(sender: tobject);
procedure chksmtpverifyclick(sender: tobject);
private
{ private declarations }
public
{ public declarations }
end;
var
form1: tform1;
function encodestring(decoded:string):string;
function encodebase64(encoded: tmemorystream {tmailtext}; decoded: tmemorystream): integer; //编码函数
implementation
{$r *.dfm}
{对参数tmemorystrema中的字节流进行base64编码,编码后的结果
保存在encoded中,函数返回编码长度}
function encodebase64(encoded: tmemorystream ; decoded: tmemorystream): integer;
const
_code64: string[64] =
('abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz0123456789+/');
var
i: longint;
b: array[0..2279] of byte;
j, k, l, m, quads: integer;
stream: string[76];
encline: string;
begin
encoded.clear;
stream := '';
quads := 0;
{为提高效率,每2280字节流为一组进行编码}
j := decoded.size div 2280;
decoded.position := 0;
{对前j*2280个字节流进行编码}
for i := 1 to j do
begin
decoded.read(b, 2280);
for m := 0 to 39 do
begin
for k := 0 to 18 do
begin
l:= 57*m + 3*k;
stream[quads+1] := _code64[(b[l] div 4)+1];
stream[quads+2] := _code64[(b[l] mod 4)*16 + (b[l+1] div 16)+1];
stream[quads+3] := _code64[(b[l+1] mod 16)*4 + (b[l+2] div 64)+1];
stream[quads+4] := _code64[b[l+2] mod 64+1];
inc(quads, 4);
if quads = 76 then
begin
stream[0] := #76;
encline := stream+#13#10;
encoded.write(encline[1], length(encline));
quads := 0;
end;
end;
end;
end;
{对以2280为模的余数字节流进行编码}
j := (decoded.size mod 2280) div 3;
for i := 1 to j do
begin
decoded.read(b, 3);
stream[quads+1] := _code64[(b[0] div 4)+1];
stream[quads+2] := _code64[(b[0] mod 4)*16 + (b[1] div 16)+1];
stream[quads+3] := _code64[(b[1] mod 16)*4 + (b[2] div 64)+1];
stream[quads+4] := _code64[b[2] mod 64+1];
inc(quads, 4);
{每行76个字符}
if quads = 76 then
begin
stream[0] := #76;
encline := stream+#13#10;
encoded.write(encline[1], length(encline));
quads := 0;
end;
end;
{“=”补位}
if (decoded.size mod 3) = 2 then
begin
decoded.read(b, 2);
stream[quads+1] := _code64[(b[0] div 4)+1];
stream[quads+2] := _code64[(b[0] mod 4)*16 + (b[1] div 16)+1];
stream[quads+3] := _code64[(b[1] mod 16)*4 + 1];
stream[quads+4] := '=';
inc(quads, 4);
end;
if (decoded.size mod 3) = 1 then
begin
decoded.read(b, 1);
stream[quads+1] := _code64[(b[0] div 4)+1];
stream[quads+2] := _code64[(b[0] mod 4)*16 + 1];
stream[quads+3] := '=';
stream[quads+4] := '=';
inc(quads, 4);
end;
stream[0] := chr(quads);
if quads > 0 then
begin
encline := stream+#13#10;
encoded.write(encline[1], length(encline));
end;
result := encoded.size;
end;
{对参数decoded字符串进行base64编码,返回编码后的字符串}
function encodestring(decoded:string):string;
var
mmtemp,mmdecoded:tmemorystream;
strtemp:tstrings;
begin
mmtemp := tmemorystream.create;
mmdecoded:=tmemorystream.create;
strtemp:=tstringlist.create;
strtemp.add(decoded);
strtemp.savetostream(mmtemp);
mmtemp.position := 0;
{剔除mmtemp从strtemp中带来的字符#13#10}
mmdecoded.copyfrom(mmtemp,mmtemp.size-2);
{对mmdecoded进行base64编码,由mmtemp返回编码后的结果}
encodebase64(mmtemp,mmdecoded);
{获得base64编码后的字符串}
mmtemp.position:=0;
strtemp.loadfromstream(mmtemp);
{返回结果必须从strtemp[0]中获得,如果使用strtemp.text会
带来不必要的字符#13#10}
result:=strtemp[0];
end;
procedure tform1.btnopenclick(sender: tobject);
begin
{打开对话框,选择swf文件}
if opendialog1.execute then
begin
nd;
end;
procedure tform1.btnsendclick(sender: tobject);
var
mmswffile,mmencoded:tmemorystream;
iresult:integer;
strstemp:tstrings;
strcontents:tstringlist;
i:integer;
begin
{验证用户输入信息}
if txtto.text='' then
begin
showmessage('请输入收信人!');
exit;
end;
if txtfrom.text='' then
begin
showmessage('请输入发信人!');
exit;
end;
if txtsmtpserver.text='' then
begin
showmessage('请输入smtp服务器!');
exit;
end;
if txtport.text='' then
begin
showmessage('请输入端口号!');
exit;
end;
if txtswffile.text='' then
begin
showmessage('请选择swf文件!');
exit;
end;
{检验服务器认证的用户名和密码}
if chksmtpverify.checked = true then
if (txtusername.text='') or (txtpassword.text='') then
begin
showmessage('您已选择smtp服务器需要认证'+#13#10+'请输入用户名和密码!');
exit;
end;
{设置smtp服务器地址、端口}
nmsmtp1.host:=txtsmtpserver.text;
nmsmtp1.port:=strtoint(txtport.text);
{断开原来的连接,保证tform1.nmsmtp1connect中服务器认证的执行}
if nmsmtp1.connected then
begin
nmsmtp1.disconnect;
end;
{连接服务器}
nmsmtp1.connect;
{创建流}
mmswffile:=tmemorystream.create;
mmencoded:=tmemorystream.create;
{加载文件至流mmswffile}
mmswffile.loadfromfile(txtswffile.text);
{对mmswffile进行base64编码,mmencoded为编码后内容}
iresult:=encodebase64(mmencoded,mmswffile);
strstemp:=tstringlist.create;
mmencoded.position:=0;
strstemp.loadfromstream(mmencoded);
{----生成邮件内容----}
strcontents:=tstringlist.create;
strcontents.add('--------------swfemail by jdh');
strcontents.add('content-type: text/html; charset=gb2312');
strcontents.add('content-transfer-encoding: 8bit');
{注意:空行是邮件格式所必需的!}
strcontents.add('');
strcontents.add('< html >< head >< title >swfemail< /title >< /head >');
strcontents.add('< body >');
{添加邮件正文内容}
for i:=0 to memcontents.lines.count-1 do
begin
strcontents.add(memcontents.lines[i] + '< br >');
end;
{添加swf文件相关内容}
strcontents.add('< object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/
cabs/flash/swflash.cab#version=5,0,0,0">');
strcontents.add('< param name=movie value="cid:jdh_swfemail@001" >');
strcontents.add('< param name=quality value=high >');
strcontents.add('< embed src="cid:jdh_swfemail@001" quality=high pluginspage="http://www.macromedia.com/shockwave/download/index.cgi?
p1_prod_version=shockwaveflash" type="application/x-shockwave-flash" >');
strcontents.add('< /embed>< /object >< /body >< /html >');
strcontents.add('');
strcontents.add('--------------swfemail by jdh');
strcontents.add('content-type: image/swf');
strcontents.add('content-id: < jdh_swfemail@001 >');
strcontents.add('content-transfer-encoding: base64');
strcontents.add('content-disposition: inline; filename="'+extractfilename(txtswffile.text)+'"' );
strcontents.add('');
strcontents.add(strstemp.text);
strcontents.add('');
{----生成邮件内容结束----}
{设置邮件发送信息}
nmsmtp1.postmessage.fromaddress := txtfrom.text;
nmsmtp1.postmessage.fromname := txtfrom.text;
nmsmtp1.postmessage.toaddress.text := txtto.text;
nmsmtp1.postmessage.body.text := strcontents.text;
nmsmtp1.postmessage.subject := txtsubject.text;
{发送电子邮件}
nmsmtp1.sendmail;
showmessage('邮件发送成功!');
end;
procedure tform1.nmsmtp1connect(sender: tobject);
var
strusername,strpassword:string;
begin
{如果smtp服务器需要认证,则进行认证}
if chksmtpverify.checked = true then
begin
{对用户名和密码进行base64编码}
strusername:=encodestring(txtusername.text);
strpassword:=encodestring(txtpassword.text);
{进行认证,输入编码后的用户名、密码}
nmsmtp1.transaction('auth login');
nmsmtp1.transaction(strusername);
nmsmtp1.transaction(strpassword);
end;
end;
procedure tform1.nmsmtp1sendstart(sender: tobject);
begin
{在邮件发送开始时修改邮件的消息头,标明邮件为多部分组成}
nmsmtp1.finalheader.values['content-type'] := '
multipart/related; boundary="------------swfemail by jdh"';
end;
procedure tform1.chksmtpverifyclick(sender: tobject);
begin
{根据是否需要smtp服务器认证,改变用户名、密码状态}
if chksmtpverify.checked = true then
begin
txtusername.enabled := true;
txtusername.color:= clwindow;
txtpassword.enabled := true;
txtpassword.color:= clwindow;
end
else
begin
txtusername.enabled := false;
txtusername.color:= clsilver;
txtpassword.enabled := false;
txtpassword.color:= clsilver;
end;
end;
end.
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器