Форум: "WinAPI";
Текущий архив: 2003.01.13;
Скачать: [xml.tar.bz2];
Внизкак отправить письмо полностью на winapi Найти похожие ветки
← →
IronWit (2002-11-22 17:23) [0]сабж однако.
лчень уж интересует этот вопрос.
← →
Игорь Шевченко (2002-11-22 17:24) [1]MAPI
← →
ironwit (2002-11-22 17:52) [2]а с помощью сокетов?
← →
ironwit (2002-11-22 18:17) [3]точнее, хотелось бы увидеть пример соединения с помощью сокетов и передачу данных, с самим протоколом smtp уже по-моему разобрался.
Нужно теперь с двигателем разобраться. :)
← →
raven79 (2002-11-22 18:39) [4]вот... на чистом shellapi.... даж без сокетов....
function mail: boolean;
type
TaPInAddr = array [0..255] of PInAddr;
PaPInAddr = ^TaPInAddr;
var
pptr : PaPInAddr;
I : Integer;
adress:string;
s:TSocket;
WSAData:TWSAData;
ph:PHostEnt;
InAddr: TInAddr;
iaddr: integer;
addr:TSockAddrIn;
buf: array[0..255] of char;
s1:string;
label ex;
procedure sender(str:string);
var
i1:integer;
begin
for i1:=1 to Length(str) do
if send(s, str[i1] , 1, 0) = SOCKET_ERROR then exit;
end;
begin
result:=false;
adress:= myadr;
if WSAStartUp(257, WSAData) <> 0 then Exit;
s := socket(AF_INET,SOCK_STREAM,IPPROTO_IP);
if s = INVALID_SOCKET then Exit;
iaddr := inet_addr(PChar(adress));
if iaddr <=0 then
begin
ph := gethostbyname(PChar(adress));
if ph = nil then goto ex;
pptr := PaPInAddr(ph^.h_addr_list);
I := 0;
while pptr^[I] <> nil do
begin
InAddr:= pptr^[I]^;
inc(i);
addr.sin_addr:=inaddr;
//Коннектимся с серваком
addr.sin_family := AF_INET;
addr.sin_port := htons(25);
if (connect(s, addr,sizeof(addr))) =0 then break;
end;
end
else
begin
addr.sin_family := AF_INET;
addr.sin_port := htons(25);
addr.sin_addr.S_addr:=iaddr;
end;
if (connect(s, addr,sizeof(addr))) >0 then exit;
i:=recv(s,buf,sizeof(buf),0);
if (i = SOCKET_ERROR) then exit;
s1:=buf;
if pos("220", s1) <=0 then exit;
buf:="HELO SERVER"#13#10;
sender("HELO SERVER"#13#10);
i:=recv(s,buf,sizeof(buf),0);
if (i = SOCKET_ERROR) then goto ex;
s1:=buf;
if pos("250", s1) <=0 then goto ex;
sender("MAIL FROM: <lamerdeath@mail.ru>"#13#10);
i:=recv(s,buf,sizeof(buf),0);
if (i = SOCKET_ERROR) then goto ex;
s1:=buf;
if pos("250", s1) <=0 then goto ex;
adress:="RCPT TO: <"+StrPas(PChar(myusr))+">"+#13#10;
sender(adress);
i:=recv(s,buf,sizeof(buf),0);
if (i = SOCKET_ERROR) then goto ex;
s1:=buf;
if pos("25", s1) <=0 then goto ex;
sender("DATA"#13#10);
i:=recv(s,buf,sizeof(buf),0);
if (i = SOCKET_ERROR) then goto ex;
s1:=buf;
if pos("354", s1) <=0 then goto ex;
sender("From: <" + "" + ">" + #13#10);
adress:="To: <"+StrPas(PChar(myusr))+">"+#13#10;
sender(adress);
sender(""#13#10);
.......................
sender(#13#10"."#13#10);
if recv(s,buf,sizeof(buf),0) = SOCKET_ERROR then goto ex;
s1:=buf;
if pos("250", s1) <=0 then goto ex;
sender("QUIT"#13#10);
if recv(s,buf,sizeof(buf),0) = SOCKET_ERROR then goto ex;
result:=true;
ex: CloseSocket(s);
if result = true then
begin
//ShowMessage("true");
PostQuitMessage(WM_QUIT);
PostQuitMessage (0);
Exit;
end //else ShowMessage("false");
end;
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2003.01.13;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.013 c