Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.01.13;
Скачать: CL | DM;

Вниз

как отправить письмо полностью на 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 вся ветка

Текущий архив: 2003.01.13;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.019 c
1-37197
Andy BitOff
2002-12-30 22:18
2003.01.13
ScrollBar


4-37454
rhf
2002-11-24 19:14
2003.01.13
Popup меню из ресурса


1-37078
Sergunja
2002-12-28 23:13
2003.01.13
Двоичный файл


4-37458
Демонов Е.В.
2002-11-26 05:36
2003.01.13
Вопрос о адресном пространстве.


3-36980
sanilo
2002-12-17 15:05
2003.01.13
Транзакции