Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2002.10.24;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.009 c
3-78275
mav13
2002-10-02 21:36
2002.10.24
Пароли на алиас в BDE Administrator забыли работники отдела.


8-78545
PycUS
2002-06-24 22:51
2002.10.24
Звук


1-78329
NewMen
2002-10-14 14:27
2002.10.24
Form->max.


3-78218
Rom Shell
2002-10-04 11:18
2002.10.24
Переиндексация


3-78311
Sayan
2002-10-04 08:55
2002.10.24
Нафигатор по базе





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский