转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 软件开发 >> Delphi程序 >> 正文
直接用WinSock API 发E-mail.         ★★★★

直接用WinSock API 发E-mail.

作者:闵涛 文章来源:闵涛的学习笔记 点击数:1877 更新时间:2009/4/23 18:30:24
unit SMTP_Connections;

//------------------------------------------
//定义单元
//---------------------------------------------
interface

uses
  
Classes, StdCtrls;

const
  
WinSock = ''''wsock32.dll'''';
  Internet = 2;
  Stream  = 1;
  fIoNbRead = $4004667F;
  WinSMTP = $0001;
  LinuxSMTP = $0002;

type

  
TWSAData = packed record
    
wVersion: Word;
    wHighVersion: Word;
    szDescription: array[0..256] of Char;
    szSystemStatus: array[0..128] of Char;
    iMaxSockets: Word;
    iMaxUdpDg: Word;
    lpVendorInfo: PChar;
  end;
  PHost = ^THost;
  THost = packed record
    
Name: PChar;
    aliases: ^PChar;
    addrtype: Smallint;
    Length: Smallint;
    addr: ^Pointer;
  end;

  TSockAddr = packed record
    
Family: Word;
    Port: Word;
    Addr: Longint;
    Zeros: array[0..7] of Byte;
  end;


function WSAStartup(Version:word; Var Data:TwsaData):integer; stdcallfarexternal winsock;
function socket(Family,Kind,Protocol:integer):integer; stdcallfarexternal winsock;
function shutdown(Socket,How:Integer):integer; stdcallfarexternal winsock;
function closesocket(socket:Integer):integer; stdcallfarexternal winsock;
function WSACleanup:integer; stdcallfarexternal winsock;
function bind(Socket:Integer; Var SockAddr:TSockAddr; AddrLen:integer):integer; stdcallfarexternal winsock;
function listen(socket,flags:Integer):integer; stdcallfarexternal winsock;
function connect(socket:Integer; Var SockAddr:TSockAddr; AddrLen:integer):integer; stdcallfarexternal winsock;
function accept(socket:Integer; Var SockAddr:TSockAddr; Var AddrLen:Integer):integer; stdcallfarexternal winsock;
function WSAGetLastError:integer; stdcallfarexternal winsock;
function recv(socket:integer; data:pchar; datalen,flags:integer):integer; stdcallfarexternal winsock;
function send(socket:integer; var data; datalen,flags:integer):integer; stdcallfarexternal winsock;
function gethostbyname(HostName:PChar):PHost; stdcallfarexternal winsock;
function WSAIsBlocking:boolean; stdcallfarexternal winsock;
function WSACancelBlockingCall:integer; stdcallfarexternal winsock;
function ioctlsocket(socket:integer; cmd: Longint; var arg: longint): Integer; stdcallfarexternal winsock;
function gethostname(name:pchar; size:integer):integer; stdcallfarexternal winsock;

procedure _authSendMail(MailServer,uname,upass,mFrom,mFromName,mToName,Subject:string;mto,mbody:TStringList);
function ConnectServer(mhost:string;mport:integer):integer;
function ConnectServerwin(mhost:string;mport:integer):integer;
function DisConnectServer:integer;
function Stat: string;
function SendCommand(Command: String): string;
function SendData(Command: String): string;
function SendCommandWin(Command: String): string;
function ReadCommand: string;
function encryptB64(s:string):string;


var
  
mconnHandle: Integer;
  mFin, mFOut: Textfile;
  EofSock: Boolean;
  mactive: Boolean;
  mSMTPErrCode: Integer;
  mSMTPErrText: string;
  mMemo: TMemo;

implementation

uses
  
SysUtils, Sockets, IdBaseComponent,
  IdCoder, IdCoder3to4, IdCoderMIME, IniFiles,Unit1;

var
  
mClient: TTcpClient;

procedure _authSendMail(MailServer, uname, upass, mFrom, mFromName,
  mToName, Subject: string; mto, mbody: TStringList);
var
  
tmpstr: string;
  cnt: Integer;
  mstrlist: TStrings;
  RecipientCount: Integer;
begin
  if 
ConnectServerWin(Mailserver, 25) = 250 then
  begin
    
Sendcommandwin(''''AUTH LOGIN '''');
    SendcommandWin(encryptB64(uname));
    SendcommandWin(encryptB64(upass));
    SendcommandWin(''''MAIL FROM: '''' + mfrom);
    for cnt := 0 to mto.Count - 1 do
      
SendcommandWin(''''RCPT TO: '''' + mto[cnt]);
    Sendcommandwin(''''DATA'''');
    SendData(''''Subject: '''' + Subject);
    SendData(''''From: "'''' + mFromName + ''''" <'''' + mfrom + ''''>'''');
    SendData(''''To: '''' + mToName);
    SendData(''''Mime-Version: 1.0'''');
    SendData(''''Content-Type: multipart/related; boundary="Esales-Order";'''');
    SendData(''''     type="text/html"'''');
    SendData('''''''');
    SendData(''''--Esales-Order'''');
    SendData(''''Content-Type: text/html;'''');
    SendData(''''        charset="iso-8859-9"'''');
    SendData(''''Content-Transfer-Encoding: QUOTED-PRINTABLE'''');
    SendData('''''''');
    for cnt := 0 to mbody.Count - 1 do
      
SendData(mbody[cnt]);
    Senddata('''''''');
    SendData(''''--Esales-Order--'''');
    Senddata('''' '''');
    mSMTPErrText := SendCommand(crlf + ''''.'''' + crlf);
    try
      
mSMTPErrCode := StrToInt(Copy(mSMTPErrText, 1, 3));
    except
    end
;
    SendData(''''QUIT'''');
    DisConnectServer;
  end;
end;


function Stat: string;
var
  
s: string;
begin
  
s := ReadCommand;
  Result := s;
end;

function EchoCommand(Command: string): string;
begin
  
SendCommand(Command);
  Result := ReadCommand;
end;

function ReadCommand: string;
var
  
tmp: string;
begin
  repeat
    
ReadLn(mfin, tmp);
    if Assigned(mmemo) then
      
mmemo.Lines.Add(tmp);
  until (Length(tmp) < 4) or (tmp[4] <> ''''-'''');
  Result := tmp
end;

function SendData(Command: string): string;
begin
  
Writeln(mfout, Command);
end;

function SendCommand(Command: string): string;
begin
  

[1] [2] [3]  下一页


[VB.NET程序]Auto Complete combo Box(VB.NET Source Use API…  [VB.NET程序]在 VB 中使用 Unicode API
[VB.NET程序]API 更改系统菜单条目  [VB.NET程序]在VB中调用Windows API的注意事项
[VB.NET程序]vb调用winInet API接口post数据到指定的url  [VB.NET程序]如 何 用 API 播 放 CD
[VB.NET程序]VB5.0与Windows API 间的呼叫技巧  [VB.NET程序]在VB6中用WINDOWS API函数读写INI文件
[VB.NET程序]Visual Basic调用Windows API函数的应用举例  [VB.NET程序]VB + API 获取 IE 的 代理服务器 配制
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · C语言系列  · VB.NET程序
    · JAVA开发  · Delphi程序
    · 脚本语言
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台