access violation at 0x00416979:write if address 0x04b90000.

路口xia车 2011-12-05 10:09:25
access violation at 0x00416979:write if address 0x04b90000.process stopped .use step or run to continue.
网上找了个API 用来发邮件。。邮件内容低于110 个字的适合 发邮件正常。。一旦多于110 个字, 就自动退出 出现上面那个错误。。 麻烦帮我看下 支个招。。
...全文
94 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
路口xia车 2011-12-08
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 jubobo 的回复:]
地址错误啊。超长了吧
[/Quote]

没超啊。。能看到。
都先生 2011-12-08
  • 打赏
  • 举报
回复
地址错误啊。超长了吧
路口xia车 2011-12-08
  • 打赏
  • 举报
回复

来人啊。。
路口xia车 2011-12-06
  • 打赏
  • 举报
回复
unit SendEmailAPI;

interface
uses windows, winsock,sysutils;
function DNASendEMail(PSmtp,PUser,PPass,PGetMail,PTOMail,Subject,MailText:ansistring):boolean;
implementation
var
SendBody:ansistring;
const
CRLF=#13#10;
BaseTable:ansistring='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';

{function StrLen(const Str: PChar): Cardinal; assembler;
asm
MOV EDX,EDI
MOV EDI,EAX
MOV ECX,0FFFFFFFFH
XOR AL,AL
REPNE SCASB
MOV EAX,0FFFFFFFEH
SUB EAX,ECX
MOV EDI,EDX
end;

function StrCopy(Dest: PChar; const Source: PChar): PChar; assembler;
asm
PUSH EDI
PUSH ESI
MOV ESI,EAX
MOV EDI,EDX
MOV ECX,0FFFFFFFFH
XOR AL,AL
REPNE SCASB
NOT ECX
MOV EDI,ESI
MOV ESI,EDX
MOV EDX,ECX
MOV EAX,EDI
SHR ECX,2
REP MOVSD
MOV ECX,EDX
AND ECX,3
REP MOVSB
POP ESI
POP EDI
end;
}
function StrPas(const Str: PChar): string;
begin
Result := Str;
end;

function FindInTable(CSource:char):integer;
begin
result:=Pos(ansistring(CSource),BaseTable)-1;
//rawbytestring
end;

function EncodeBase64(Source:ansistring):ansistring;
var
Times,LenSrc,i:integer;
x1,x2,x3,x4:ansichar;
xt:byte;
begin
result:='';
LenSrc:=length(Source);
if LenSrc mod 3 =0 then Times:=LenSrc div 3
else Times:=LenSrc div 3 + 1;
for i:=0 to times-1 do
begin
if LenSrc >= (3+i*3) then
begin
x1:=BaseTable[(ord(Source[1+i*3]) shr 2)+1];
xt:=(ord(Source[1+i*3]) shl 4) and 48;
xt:=xt or (ord(Source[2+i*3]) shr 4);
x2:=BaseTable[xt+1];
xt:=(Ord(Source[2+i*3]) shl 2) and 60;
xt:=xt or (ord(Source[3+i*3]) shr 6);
x3:=BaseTable[xt+1];
xt:=(ord(Source[3+i*3]) and 63);
x4:=BaseTable[xt+1];
end
else if LenSrc>=(2+i*3) then
begin
x1:=BaseTable[(ord(Source[1+i*3]) shr 2)+1];
xt:=(ord(Source[1+i*3]) shl 4) and 48;
xt:=xt or (ord(Source[2+i*3]) shr 4);
x2:=BaseTable[xt+1];
xt:=(ord(Source[2+i*3]) shl 2) and 60;
x3:=BaseTable[xt+1];
x4:='=';
end else
begin
x1:=BaseTable[(ord(Source[1+i*3]) shr 2)+1];
xt:=(ord(Source[1+i*3]) shl 4) and 48;
x2:=BaseTable[xt+1];
x3:='=';
x4:='=';
end;
result:=result+x1+x2+x3+x4;
end;
end;

function LookupName(const Name: AnsiString): TInAddr;
var
HostEnt: PHostEnt;
InAddr: TInAddr;
begin

HostEnt := gethostbyname(pAnsiChar(Name));
FillChar(InAddr, SizeOf(InAddr), 0);
if HostEnt <> nil then
begin
with InAddr, HostEnt^ do
begin
S_un_b.s_b1 := h_addr^[0];
S_un_b.s_b2 := h_addr^[1];
S_un_b.s_b3 := h_addr^[2];
S_un_b.s_b4 := h_addr^[3];
end;
end;
Result := InAddr;
end;

function StartNet(host:ansistring;port:integer;var sock:integer):Boolean;
var
wsadata:twsadata;
FSocket:integer;
SockAddrIn:TSockAddrIn;
err:integer;
begin
err:=WSAStartup($0101,WSAData);
FSocket:=socket(PF_INET,SOCK_STREAM,IPPROTO_IP);
if FSocket=invalid_socket then
begin
Result:=False;
Exit;
end;
SockAddrIn.sin_addr:=LookupName(host);
SockAddrIn.sin_family := PF_INET;
SockAddrIn.sin_port :=htons(port);
err:=connect(FSocket,SockAddrIn, SizeOf(SockAddrIn));
if err=0 then
begin
sock:=FSocket;
Result:=True;
end
else
begin
Result:=False;
end;
end;

procedure StopNet(Fsocket:integer);
var
err:integer;
begin
err:=closesocket(FSocket);
err:=WSACleanup;
end;

function SendData(FSocket:integer;SendStr:ansistring):integer;
var
DataBuf:array[0..1024] of ansichar;
err:integer;
//e:ansichar;
begin
strcopy(DataBuf,pansichar(SendStr));
err:=send(FSocket,DataBuf,strlen(DataBuf),MSG_DONTROUTE);
Result:=err;
end;

function GetData(FSocket:integer):String;
const
MaxSize=1024;
var
DataBuf:array[0..MaxSize] of char;
err:integer;
begin
err:=recv(FSocket,DataBuf,MaxSize,0);
Result:=Strpas(DataBuf);
end;

//Sends(SMTP服务器地址, 发送MAIL用户名, 发送MAIL的密码, 发送MAIL全名, 接收MAIL[可和发送MAIL相同],信笺主题, 信笺内容):Bool;

//发送邮件代码
function DNASendEMail(psmtp,puser,ppass,pgetmail,PTOMail,subject,mailtext:ansistring):boolean;
var
FSocket,res:integer;
begin
Result:=false;
sendbody:='SendEmail Unit By Anskya ';
if StartNet(PSmtp, 25, FSocket) then
begin
SendData(FSocket, 'HELO ' +Puser+ CRLF);
getdata(FSocket);
SendData(FSocket, 'AUTH LOGIN' + CRLF);
getdata(FSocket);
SendData(FSocket,EncodeBase64(Puser) + CRLF);
getdata(FSocket);
SendData(FSocket,EncodeBase64(PPass) + CRLF);
getdata(FSocket);
SendData(FSocket, 'MAIL FROM: <' + PGetMail + '>' + CRLF);
getdata(FSocket);
SendData(FSocket, 'RCPT TO: <' + PTOMail + '>' + CRLF);
getdata(FSocket);
SendData(FSocket, 'DATA' + CRLF);
getdata(FSocket);
SendBody := 'From:'+Subject+' <' + PGetMail + '>' + CRLF
+ 'To: <' + PGetMail + '>' + CRLF
+ 'Subject: ' + Subject + CRLF
+ CRLF
+ MailText + CRLF
+ '.' + CRLF;
res := SendData(FSocket, SendBody);
getdata(FSocket);
SendData(FSocket, 'QUIT' + CRLF);
getdata(FSocket);
StopNet(Fsocket);
if res <> SOCKET_ERROR then

begin
Result:=true;
end;
end;
end;
end.

那咱贴出来
bdmh 2011-12-06
  • 打赏
  • 举报
回复
鬼才知道你的api怎么操作的

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧