Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > отправить почту


Автор: Гость_Serj 5.2.2004, 16:12
У меня не получается вот это:

struct sockaddr_in A; WSADATA W; SOCKET S; struct hostent *H;

char helo[]={"HELO mail.ru\n"};
char mail[]={"MAIL FROM: <my@mail.ru>\n"};
char rcpt[]={"RCPT TO: <your@bail.ru>\n"};
char data[]={"DATA\n"};
char point[]={"\n.\n"};
char quit[]={"QUIT\n"};
char buff[2048];
char mainmail[]={"TEST"};

void main ()
{
WSAStartup (0x101, &W);
S = socket (AF_INET, SOCK_STREAM, 0);
A.sin_family = AF_INET;
A.sin_port = htons (25);
H = gethostbyname ("mail.ru");
A.sin_addr.s_addr=*((unsigned long *) H->h_addr);

connect (S, (struct sockaddr *) &A, sizeof (A));

recv (S, buff, 2048, 0);
printf("\n%s",buff);

send (S,helo,strlen(helo),0);
recv (S, buff, 2048, 0);
printf("\n%s",buff);

send (S,mail,strlen(mail),0);
recv (S, buff, 2048, 0);
printf("\n%s",buff);

и после это, сообщение 421 - SMTP command timeout.
Подскажите как правильно отправить письмо на mail.
Спасибо.

Автор: shedon 5.2.2004, 16:35
Код

char message[] = "Это сообщение будет отправлено";

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:<mail@mail.ru>\r\n",   // адрес отправителя
"RCPT TO:<mail@mail.ru>\r\n",     // адресок получателя
"DATA\r\n",
message,   // тело сообщения
"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("194.67.23.10"); //smtp.mail.ru - 194.67.23.10
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);
 }

Автор: Unregistered 7.2.2004, 13:06
После получения сообщения 354 начинается отправка сообщения и ничего не происходит минут этак 10. Почему так и как сделать, чтобы сообщение уходило немедленно.
Спасибо.

Автор: Unregistered 7.2.2004, 14:26
Точнее, после отправки message на строке с :
iLength = recv(nSMTPServerSocket, (LPSTR)sBuf+iEnd, sizeof(sBuf)-iEnd, 0);
все зависает?!

Автор: shedon 7.2.2004, 15:34
Зависать, не должно у тебя стоит файрвол, прокси сервер, какая винда(работать должно подо всеми, но проверял, только под Win2k) ?

Автор: Unregistered 7.2.2004, 17:14
Прокси есть, внд 2000, но виснет конкретно.

Автор: Step 7.2.2004, 18:07
есть прокся - есть проблемма, а какая прокся стоит....

Автор: shedon 7.2.2004, 18:19
Если есть прокси, то вместо 194.67.23.10 вводи IP прокси сервера. Прокся должна быть настроена, на то что бы переслать данное сообщение на нужный адресс.

Автор: Unregistered 7.2.2004, 18:36
Вводил адрес прокси, но до отправки mail-а дело не доходит, в RCPT TO не устраивает адрес (ощибка 554). Хотя он реальный. Я пытался отправить на другой адрес, то же самое.

Step
Цитата
а какая прокся стоит....
, как это пнять : "..какая..".

Автор: shedon 7.2.2004, 18:54
А на какой порт настроена прокси для smtp, возможно не на 25, а на другой.
Скорее всего дело в настройках прокси.

Автор: Unregistered 8.2.2004, 22:20
У меня в настройках подключения указан прокси и номер порта. Я подставлял все это, но на передаче данных виснет. Я уже весь соплями изошол...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)