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

Вниз

API и сокет   Найти похожие ветки 

 
Sour ©   (2002-08-19 12:19) [0]

Кто-нибудт знает как на API создать сокет, чтобы можно было конектиться на какой-то адрес на любой порт, а потом делать так:
Sok.Write("helo");
Здесь получить с сервака 250 и продолжать дальше....
Sok.Write("mail from:<user1@loh.tut>");
Здесь получить с сервака что все OK
Sok.Write("rcpt to:<sourpost@nvkz.net>");
Здесь получить с сервака что все OK
Sok.Write("data");
Здесь получить с сервака что все OK
Sok.Write("bla...bla...bla...");
Здесь получить с сервака что все OK
Sok.Write(".");
Здесь получить с сервака что все OK
Sok.Write("quit");
Здесь получить с сервака что все OK


 
Digitman ©   (2002-08-19 12:30) [1]

Чем не устраивает TClientSocket ?


 
Sour ©   (2002-08-19 12:39) [2]

Мне все это дело надо реализовать БЕЗ VCL!!!!!!
Хочу на API...


 
Digitman ©   (2002-08-19 13:22) [3]

А как это делает TClientSocket на том же самом WinsockAPI, надо понимать, тебе недосуг разобраться ?


 
VID ©   (2002-08-20 09:55) [4]


> Digitman © (19.08.02 13:22)
> А как это делает TClientSocket на том же самом WinsockAPI,
> надо понимать, тебе недосуг разобраться ?


Да, да... распечатай листинг кода модуля winsock.pas и читай перед сном, как хорошую сказу ;)


 
Digitman ©   (2002-08-20 10:49) [5]

>VID

1. "Хорошая сказка" начинается с scktcomp.pas
2. Если это в мой адрес, скажу лишь, что в твоих комментариях, сударь, я не нуждаюсь.


 
VID ©   (2002-08-20 21:16) [6]

>Digitman: да, ладно, я ж пошутил.. настроение такое было :)


 
madcap ©   (2002-08-21 01:30) [7]

Мне тоже это надо было, но ответа я не получил
зато нашел пример на Си, но перевести на Delphi несмог
void SendMail(void)
{
SOCKET nSMTPServerSocket;
struct sockaddr_in smtp_address;
int nConnect;
int iLength;
int iMsg = 0;
int iEnd = 0;
BYTE sBuf[4096];

char *MailMessage[] =
{
"HELO axel.ru\r\n",
"MAIL FROM:<vasya_pupkin@cool_mail.ru>\r\n", // адрес отправителя
"RCPT TO:<purpe@usa.net>\r\n", // адресок получателя
"DATA\r\n",
"Самое крутое сообщение!!!\r\n\r\n.\r\n", // тело сообщения
"QUIT\r\n",
NULL
};

nSMTPServerSocket = socket(PF_INET, SOCK_STREAM, 0);

if(nSMTPServerSocket != INVALID_SOCKET) {
smtp_address.sin_family = AF_INET;
// далее вносим в структуру IP-адрес сервера, через который пойдёт письмо
smtp_address.sin_addr.s_addr = inet_addr("212.96.192.1");
smtp_address.sin_port = htons(25);

nConnect = connect(nSMTPServerSocket, (PSOCKADDR)&smtp_address,
sizeof(smtp_address));

if(nConnect) {
}
else {
do {
iLength = recv(nSMTPServerSocket, (LPSTR)sBuf+iEnd, sizeof(sBuf)-iEnd, 0);
iEnd += iLength;
sBuf[iEnd] = "\0! ";
send(nSMTPServerSocket, (LPSTR)MailMessage[iMsg], strlen(MailMessage[iMsg]), 0);
iMsg++;
} while(MailMessage[iMsg]);
}

closesocket(nSMTPServerSocket);
}
}



 
madcap ©   (2002-08-21 01:32) [8]

>Sour
Если у тебя получится скинь примерчик
madcap@web-com-ua.com


 
suka866   (2002-08-21 20:10) [9]

Письмо хочешь отправлять? Мне в свое время тоже ни одна сука не отвечала, пришлось самому разбираться. Вот тебе моя тестовая прога с тех времен


unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, WinSock, ExtCtrls;

type
TForm1 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Label1: TLabel;
Label2: TLabel;
Edit3: TEdit;
Label3: TLabel;
Memo1: TMemo;
Label4: TLabel;
Button1: TButton;
Edit4: TEdit;
Label5: TLabel;
Label6: TLabel;
Bevel1: TBevel;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}
{$INCLUDE base64.inc}


var SMTPsock:integer;
base64string,Boundary:string;

function GenerateBoundary : string;
var
s: string;
i : integer;
begin
randomize;
s := "gMS4";
for i := 1 to 20 do
begin
s := s + chr( 97 + random( 25));
end;
result := s+"56H";
end;

procedure SendMes(mes:string);
var i:integer;
begin
for i:=1 to length(mes) do if send(SMTPsock,mes[i],1,0)=SOCKET_ERROR then exit;
end;

procedure sendmail;
var conr:integer;
SMTPaddr:sockaddr_in;
wsad:WSAData;
recvBuf: array[0..255] of char;
begin
if WSAStartup($0101, wsad) = 0 then
begin
SMTPsock:=socket(AF_INET, SOCK_STREAM, IPPROTO_IP);
if SMTPsock<>INVALID_SOCKET then
begin
SMTPaddr.sin_family := AF_INET;
SMTPaddr.sin_addr.S_addr := inet_addr(pchar(Form1.Edit3.Text));
SMTPaddr.sin_port := htons(25);
conr:=connect(SMTPsock,SMTPaddr,sizeof(SMTPaddr));
if conr=0 then
begin
recv(SMTPsock,recvBuf,sizeof(recvBuf),0);
SendMes("HELO tom.inbox.lv"+#13+#10);
recv(SMTPsock,recvBuf,sizeof(recvBuf),0);
SendMes("MAIL FROM: "+Form1.Edit1.Text+#13+#10);
recv(SMTPsock,recvBuf,sizeof(recvBuf),0);
SendMes("RCPT TO: "+Form1.Edit2.Text+#13+#10);
recv(SMTPsock,recvBuf,sizeof(recvBuf),0);
SendMes("DATA"+#13+#10);
recv(SMTPsock,recvBuf,sizeof(recvBuf),0);
SendMes("To: "+"qwe <"+Form1.Edit2.Text+">"+#13+#10);
SendMes("From: "+"asd <"+Form1.Edit1.Text+">"+#13+#10);
SendMes("Subject: "+Form1.Edit4.Text+#13+#10);

{SendMes(#13+#10+Form1.Memo1.Text+#13+#10+#13+#10);}
Boundary:=GenerateBoundary;
SendMes("Mime-Version: 1.0"+#13+#10);
SendMes("Content-Type: multipart/mixed; boundary=""+Boundary+"""+#13+#10);
SendMes(#13+#10+"--"+Boundary+#13+#10);
SendMes("Content-Type: text/plain; charset="us-ascii""+#13+#10);
SendMes(#13+#10+Form1.Memo1.Text+#13+#10+#13+#10);

SendMes(#13+#10+"--"+Boundary+#13+#10);
SendMes("Content-Type: text/html; charset="us-ascii""+#13+#10);
SendMes(#13+#10+" <font color=#FF0000>"+Form1.Memo1.Text+"</font>"+#13+#10+#13+#10);


SendMes("--"+Boundary+#13+#10);
SendMes("Content-Type: application/octet-stream; name="attach.txt""+#13+#10);
//SendMes("Content-Type: text/plain; name="attach.txt""+#13+#10);
SendMes("Content-Transfer-Encoding: base64"+#13+#10);
SendMes("Content-Disposition: attachment; filename="attach.txt""+#13+#10);
base64string:=Q_Base64Encode(Pointer(Form1.Memo1.Text),length(Form1.Memo1.Text));

SendMes(#13+#10+base64string+#13+#10);

SendMes("--"+Boundary+"--"+#13+#10);
SendMes(#13+#10+"."+#13+#10);
recv(SMTPsock,recvBuf,sizeof(recvBuf),0);
SendMes("QUIT"+#13+#10);
recv(SMTPsock,recvBuf,sizeof(recvBuf),0);
end;
closesocket(SMTPsock);
end;
WSACleanup();
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
sendmail;
end;

end.


Исходник кодирования Base64 не привожу, ибо про аттач не спрашивалось. Токмо закоменти строки, отсылающие аттач.


 
suka866   (2002-08-21 20:13) [10]

Да, забыл сказать - ответы SMTP сервака не проверяются (но принимаются в recvBuf). Если хочешь допиши сам, но в принципе и так работает.


 
madcap ©   (2002-08-22 02:48) [11]


> suka866

Большое СПАСИБО


 
ssv   (2002-08-22 09:34) [12]

> suka866

А можно ли это перелапатить под UDP, а потом еще и получить ответ,
Просто я здесь особо не въезжаю



Страницы: 1 вся ветка

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

Наверх




Память: 0.5 MB
Время: 0.021 c
3-78239
brestmarket
2002-10-01 01:44
2002.10.24
Проблема при сжатии ADO-database при помощи JetEngine.CompactData


1-78420
saxon
2002-10-15 17:24
2002.10.24
Memory leak


6-78559
Metallica
2002-08-22 19:52
2002.10.24
Как сделать поиск строки в Нэте, если известен URL.


1-78412
саша
2002-10-15 09:51
2002.10.24
как сделать чтобы программу небыло видно на панели задач?


1-78478
TankMan
2002-10-13 03:50
2002.10.24
Как передать n-ой форме приложения параметры.