选择显示字体大小

delphi让你发送flash电子邮件(2)

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   安全   模式   框架   测试   开源   游戏

SQL数据库相关

My-SQL   Ms-SQL   Access   DB2   Oracle   Sybase   SQLserver   索引   存储过程   加密   数据库   分页   视图  

手机无线相关

3G   Wap   CDMA   GRPS   GSM   IVR   彩信   短信   无线   增值业务

网页设计制作相关

HTML   CSS   网页配色   网页特效   Javascript   VBscript   Dreamweaver   Frontpage   JS   Web   网站设计

网站建设推广相关

建站经验   网站优化   网站排名   推广   Alexa

操作系统/服务器相关

Windows XP   Windows 2000   Windows 2003   Windows Me   Windows 9.x   Linux   UNIX   注册表   操作系统   服务器   应用服务器

图形图像多媒体相关

Photoshop   Fireworks   Flash   Coreldraw   Illustrator   Freehand   Photoimpact   多媒体   图形图像

标准 网站致力的规范

Valid CSS!

无不良内容,无不良广告,无恶意代码

Valid XHTML 1.0 Transitional

creativecommons