Форум: "Сети";
Текущий архив: 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