mail.cpp 2XR & All


[ Комментарии ] [ Добавить комментарий ] [ Доска объявлений HackZone ]

Отправитель: XR, October 08, 1998, 13:11:08:

В ответ на: mail.cpp 2XR & All (отправитель: ZaK, October 07, 1998, 17:12:47):

попробую на память ;)
(токо под Уних - не обессудь ;))
За работоспособность не отвечаю ;)))
#include <stdio.h>
#include <string.h>
#include <netdb.h>
#include <netinet/in.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <unistd.h>


char rquest[2048];
char answ[2048];

int x, s;
char *str;
char CR=13;
char LF=10;

void smpt_client(char* host,int port, char* message)
{
int nCharSend = 0;
int nCharRecv = 0;
int s,in;
if ((s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP))
== -1) {
perror("\nsocket()");
return;
}
if(open_sock(s,host,port) != 0) return;
in=0;
do{
nCharRecv=recv(s,answ+in,
sizeof(answ)-in,
RECV_FLAGS);
if(nCharRecv 0);
if(strncmp(answ,"2",1)!=0)
{
printf("SMTP error\n");
return;
}
sprintf(rquest,"MAIL FROM:[email protected]\n")
nCharSend =
send(s,rquest,strlen(rquest),SEND_FLAGS);
if(nCharSend == -1 )
{
printf("\nError occurred during send().\n");
return;
}
//потом по тому же принципу ...
answ == "2**" - OK
answ == "5**" - err
//см - RFC821
далее
rquest="RCPT TO:[email protected]\n"
answ == ?
rquest="DATA\n"
answ=="3**" // готов к приему данных

потом в rquest идут данные
конец данных обозначается последовательностью
"\n.\n"
да - для SMTP длина строкм не более 1000байт

close(s);
return;
}

int open_sock(int sock, char *server, int port) {
struct sockaddr_in blah;
struct hostent *he;
bzero((char *)&blah,sizeof(blah));
blah.sin_family=AF_INET;
blah.sin_addr.s_addr=inet_addr(server);
blah.sin_port=htons(port);

if ((he = gethostbyname(server)) != NULL) {
bcopy(he->h_addr, (char *)&blah.sin_addr, he->h_length);
}
else {
if ((blah.sin_addr.s_addr = inet_addr(server)) 255)
{
printf("Name too long.\n");
exit(0);
}
smtp_client(argv[1],25,argv[2]);
}




Комментарии:


Цитировать сообщение


[ Комментарии ] [ Доска объявлений HackZone ]