ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2

ANTICHAT — форум по информационной безопасности, OSINT и технологиям

ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию. Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club, и теперь снова доступен на новом адресе — forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
Вернуться   Форум АНТИЧАТ > Программирование > С/С++, C#, Delphi, .NET, Asm
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

smtp отправка почты - AUTH LOGIN - ошибка 500 ((
  #1  
Старый 17.01.2010, 18:12
isqad88
Новичок
Регистрация: 16.12.2009
Сообщений: 14
Провел на форуме:
20162

Репутация: 0
По умолчанию smtp отправка почты - AUTH LOGIN - ошибка 500 ((

Здравствуйте вот написал на Visual C++ 6.0 пример отправки почты на mail.ru:
Код:
#include <iostream>
#include <winsock2.h>

using namespace std;

int main()
{
	int err;
	
	WSADATA wsaData;
	SOCKET s;
	hostent *d_addr;
	struct sockaddr_in addr;
	char text[1024];//áóôåð äàííûõ
	
	err = WSAStartup(MAKEWORD(1, 1), &wsaData);
	if(err != 0)
	{
		cout<<"Error: "<<err<<"\n";
		return 1;
	}
	

	cout<<"Ha4aJIo Pa6oTIb c coketamu\n";
	//Ñîçäàíèå ñîêåòà
	s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
	if(s == INVALID_SOCKET)
	{
		cout<<"Invalid socket\n";
		return 1;
	}
	//ïîëó÷åíèå àäðåñà ñåðâåðà
	d_addr = gethostbyname("smtp.mail.ru");
	if(d_addr == NULL)
	{
		cout<<"Error gethostbyname\n";
		return 1;
	};
	//ñîåäèíÿåìñÿ
	
	addr.sin_family = AF_INET;//òèï TCP/IP
	addr.sin_addr.s_addr = *((unsigned long *) d_addr->h_addr);
	addr.sin_port = htons (25);
	//connect
	if(SOCKET_ERROR == (connect(s, (sockaddr *) &addr, sizeof (addr))))
	{
		cout<<"Error in connect\n";
		return 1;
	} else
	{
		cout<<"YsneLIIHoe coegunenue\n";
	}
	//ïîëó÷àåì äàííûå îò ñåðâåðà
	recv(s, text, sizeof(text), 0);
	cout<<"Recive - "<<text<<"\n";
	//Ïðèâåòñòâóåì ñåðâåð
	
	strcpy(text, "EHLO smtp.mail.ru\r\n");
	send(s, text, sizeof(text), 0);
	cout<<"Send - "<<text<<"\n";

	recv(s, text, sizeof(text), 0);
	cout<<"Recive - "<<text<<"\n";
	//àâòîðèçàöèÿ íà ñåðâåðå
	//memset(text, 0, sizeof(text));
	strcpy(text, "AUTH LOGIN\r\n");
	send(s, text, sizeof(text), 0);
	cout<<sizeof(text)<<"\n";
	cout<<"Send - "<<text<<"\n";
	recv(s, text, sizeof(text), 0);
	cout<<"Recive - "<<text<<"\n";


	closesocket(s);
	WSACleanup();



	
	
	return 0;
}
проблема в том что дойдя до строки AUTH LOGIN - сервак ругается на не правильную команду ((( подскажите как решить эту проблему???
 
Ответить с цитированием

  #2  
Старый 17.01.2010, 18:28
Spy2ex
Новичок
Регистрация: 20.09.2008
Сообщений: 29
Провел на форуме:
528520

Репутация: 13
По умолчанию

У тебя буффер один под запрос и ответ. text[]
либо обнуляй после каждого запроса -ответа, либо введи дополнительный.
 
Ответить с цитированием

  #3  
Старый 17.01.2010, 19:23
isqad88
Новичок
Регистрация: 16.12.2009
Сообщений: 14
Провел на форуме:
20162

Репутация: 0
По умолчанию

Цитата:
Сообщение от Spy2ex  
У тебя буффер один под запрос и ответ. text[]
либо обнуляй после каждого запроса -ответа, либо введи дополнительный.
Код:
#include <iostream>
#include <winsock2.h>

using namespace std;

int main()
{
	int err;
	
	WSADATA wsaData;
	SOCKET s;
	hostent *d_addr;
	struct sockaddr_in addr;
	char rec[1024];//áóôåð âõîäíûõ ñîîáùåíèé
	char sen[1024];//áóôåð èñõ ñîîáùåíèé
	
	err = WSAStartup(MAKEWORD(1, 1), &wsaData);
	if(err != 0)
	{
		cout<<"Error: "<<err<<"\n";
		return 1;
	}
	

	cout<<"Ha4aJIo Pa6oTIb c coketamu\n";
	//Ñîçäàíèå ñîêåòà
	s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
	if(s == INVALID_SOCKET)
	{
		cout<<"Invalid socket\n";
		return 1;
	}
	//ïîëó÷åíèå àäðåñà ñåðâåðà
	d_addr = gethostbyname("smtp.mail.ru");
	if(d_addr == NULL)
	{
		cout<<"Error gethostbyname\n";
		return 1;
	};
	//ñîåäèíÿåìñÿ
	
	addr.sin_family = AF_INET;//òèï TCP/IP
	addr.sin_addr.s_addr = *((unsigned long *) d_addr->h_addr);
	addr.sin_port = htons (25);
	//connect
	if(SOCKET_ERROR == (connect(s, (sockaddr *) &addr, sizeof (addr))))
	{
		cout<<"Error in connect\n";
		return 1;
	} else
	{
		cout<<"YsneLIIHoe coegunenue\n";
	}
	memset(rec, 0, sizeof(rec));
	memset(sen, 0, sizeof(sen));
	//ïîëó÷àåì äàííûå îò ñåðâåðà
	recv(s, rec, sizeof(rec), 0);
	cout<<rec<<"\n";
	//î÷èñòêà
	memset(rec, 0, sizeof(rec));
	//Ïðèâåòñòâóåì ñåðâåð
	
	strcpy(sen, "HELO smtp.mail.ru\r\n");
	send(s, sen, sizeof(sen), 0);
	cout<<sen<<"\n";
	//î÷èñòêà
	memset(sen, 0, sizeof(sen));


	recv(s, rec, sizeof(rec), 0);
	cout<<rec<<"\n";
	memset(rec, 0, sizeof(rec));
	//àâòîðèçàöèÿ íà ñåðâåðå
	
	strcpy(sen, "AUTH LOGIN\r\n");
	send(s, sen, sizeof(sen), 0);
	cout<<sen<<"\n";
	//î÷èñòêà
	memset(sen, 0, sizeof(sen));
	
	recv(s, rec, sizeof(rec), 0);
	cout<<rec<<"\n";
	memset(rec, 0, sizeof(rec));


	closesocket(s);
	WSACleanup();



	
	
	return 0;
}
Вот ввел два буфера, и все равно сервак ругается на не правильную команду 500 (( дело в AUTH LOGIN
 
Ответить с цитированием

  #4  
Старый 17.01.2010, 20:24
RaX
Познающий
Регистрация: 07.06.2008
Сообщений: 48
Провел на форуме:
247923

Репутация: 52
Отправить сообщение для RaX с помощью ICQ
По умолчанию

У многих smtp серверов (а особенно для мэйла, рамблера, гугла) для отправки сообщения нужно авторизироваться по POP3 протоколу, иначе было бы очень легко вводить произвольный адрес отправителя. Добавь сюда соединение на порт 110 и авторизируйся на ящик, с которого отправляешь.
 
Ответить с цитированием

  #5  
Старый 17.01.2010, 20:37
Spy2ex
Новичок
Регистрация: 20.09.2008
Сообщений: 29
Провел на форуме:
528520

Репутация: 13
По умолчанию

нужно подключаться, не на 25 порт а на 2525 в мейл.ру так, рабочий код.
Код:
#include <iostream>
#include <winsock2.h>

using namespace std;

int main()
{
	int err;
	
	WSADATA wsaData;
	SOCKET s;
	hostent *d_addr;
	struct sockaddr_in addr;
	char rec[1024];//áóôåð âõîäíûõ ñîîáùåíèé
	char sen[1024];//áóôåð èñõ ñîîáùåíèé
	
	err = WSAStartup(MAKEWORD(1, 1), &wsaData);
	if(err != 0)
	{
		cout<<"Error: "<<err<<"\n";
		return 1;
	}
	

	cout<<"Ha4aJIo Pa6oTIb c coketamu\n";
	//Ñîçäàíèå ñîêåòà
	s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
	if(s == INVALID_SOCKET)
	{
		cout<<"Invalid socket\n";
		return 1;
	}
	//ïîëó÷åíèå àäðåñà ñåðâåðà
	d_addr = gethostbyname("smtp.mail.ru");
	if(d_addr == NULL)
	{
		cout<<"Error gethostbyname\n";
		return 1;
	};
	//ñîåäèíÿåìñÿ
	
	addr.sin_family = AF_INET;//òèï TCP/IP
	addr.sin_addr.s_addr = *((unsigned long *) d_addr->h_addr);
	addr.sin_port = htons (2525);
	//connect
	if(SOCKET_ERROR == (connect(s, (sockaddr *) &addr, sizeof (addr))))
	{
		cout<<"Error in connect\n";
		return 1;
	} else
	{
		cout<<"YsneLIIHoe coegunenue\n";
	}
	memset(rec, 0, sizeof(rec));
	memset(sen, 0, sizeof(sen));
	
	 recv( s, rec, sizeof(rec)-1, 0 ); //I отвтет сервера

     strcpy(sen,"EHLO smtp.mail.ru\r\n");
     send(s,sen,strlen(sen),0); 
     recv( s, rec, sizeof(rec)-1, 0 );

     strcpy(sen,"AUTH LOGIN\r\n");
     send(s,sen,strlen(sen),0); 
     recv( s, rec, sizeof(rec)-1, 0 );


    closesocket(s);
	WSACleanup();	
	
	return 0;
}
 
Ответить с цитированием

  #6  
Старый 17.01.2010, 21:04
isqad88
Новичок
Регистрация: 16.12.2009
Сообщений: 14
Провел на форуме:
20162

Репутация: 0
По умолчанию

Цитата:
Сообщение от Spy2ex  
нужно подключаться, не на 25 порт а на 2525 в мейл.ру так, рабочий код.
Код:
#include <iostream>
#include <winsock2.h>

using namespace std;

int main()
{
	int err;
	
	WSADATA wsaData;
	SOCKET s;
	hostent *d_addr;
	struct sockaddr_in addr;
	char rec[1024];//áóôåð âõîäíûõ ñîîáùåíèé
	char sen[1024];//áóôåð èñõ ñîîáùåíèé
	
	err = WSAStartup(MAKEWORD(1, 1), &wsaData);
	if(err != 0)
	{
		cout<<"Error: "<<err<<"\n";
		return 1;
	}
	

	cout<<"Ha4aJIo Pa6oTIb c coketamu\n";
	//Ñîçäàíèå ñîêåòà
	s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
	if(s == INVALID_SOCKET)
	{
		cout<<"Invalid socket\n";
		return 1;
	}
	//ïîëó÷åíèå àäðåñà ñåðâåðà
	d_addr = gethostbyname("smtp.mail.ru");
	if(d_addr == NULL)
	{
		cout<<"Error gethostbyname\n";
		return 1;
	};
	//ñîåäèíÿåìñÿ
	
	addr.sin_family = AF_INET;//òèï TCP/IP
	addr.sin_addr.s_addr = *((unsigned long *) d_addr->h_addr);
	addr.sin_port = htons (2525);
	//connect
	if(SOCKET_ERROR == (connect(s, (sockaddr *) &addr, sizeof (addr))))
	{
		cout<<"Error in connect\n";
		return 1;
	} else
	{
		cout<<"YsneLIIHoe coegunenue\n";
	}
	memset(rec, 0, sizeof(rec));
	memset(sen, 0, sizeof(sen));
	
	 recv( s, rec, sizeof(rec)-1, 0 ); //I отвтет сервера

     strcpy(sen,"EHLO smtp.mail.ru\r\n");
     send(s,sen,strlen(sen),0); 
     recv( s, rec, sizeof(rec)-1, 0 );

     strcpy(sen,"AUTH LOGIN\r\n");
     send(s,sen,strlen(sen),0); 
     recv( s, rec, sizeof(rec)-1, 0 );


    closesocket(s);
	WSACleanup();	
	
	return 0;
}
Вообще ошибка 554 "Ошибка синхронизации"

Пытаюсь пройти pop3 авторизацию, пишет вообще ошибку не известная команда ""
 
Ответить с цитированием

  #7  
Старый 17.01.2010, 21:14
RaX
Познающий
Регистрация: 07.06.2008
Сообщений: 48
Провел на форуме:
247923

Репутация: 52
Отправить сообщение для RaX с помощью ICQ
По умолчанию

Цитата:
Сообщение от isqad88  
Вообще ошибка 554 "Ошибка синхронизации"

Пытаюсь пройти pop3 авторизацию, пишет вообще ошибку не известная команда ""
я уже выкладывал исходник отправки сообщения с регистрацией, правда код на Delphi:
http://forum.antichat.ru/thread76601.html

Там нужно делать 2 сокета, один для POP3, а другой для SMTP, причем закрывать оба только в конце, чтобы при отправке сообщения соединение по поп3 было открыто.
 
Ответить с цитированием

  #8  
Старый 17.01.2010, 21:55
slesh
Reservists Of Antichat - Level 6
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме:
3288241

Репутация: 3349


Отправить сообщение для slesh с помощью ICQ
По умолчанию

strcpy(sen, "AUTH LOGIN\r\n");
send(s, sen, sizeof(sen), 0);

схерали sizeof???? ты отправляешь строку. ПО этому strlen
 
Ответить с цитированием

  #9  
Старый 18.01.2010, 09:33
isqad88
Новичок
Регистрация: 16.12.2009
Сообщений: 14
Провел на форуме:
20162

Репутация: 0
По умолчанию

Код:
#pragma comment(lib, "Ws2_32.lib")
#include <iostream>
#include <winsock2.h>


using namespace std;



int main()
{
	int err;
	WSADATA wsaData;
	SOCKET s;
	SOCKET p;
	hostent *d_addr;
	struct sockaddr_in addr;
	char rec[1024];

	

	err = WSAStartup(MAKEWORD(1,1), &wsaData);
	if(err != 0)
	{
		cout<<"Error: "<<err<<"\n";
		return 1;
	}
	p = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
	if(p == INVALID_SOCKET)
	{
		cout<<"Invalid socket\n";
	}
	d_addr = gethostbyname("pop.mail.ru");
	if(d_addr == NULL)
	{
		cout<<"Error gethostbyname\n";
		return 1;
	};
	
	addr.sin_family = AF_INET;
	addr.sin_addr.s_addr = *((unsigned long *) d_addr->h_addr);
	addr.sin_port = htons (110);
	if(SOCKET_ERROR == (connect(p, (sockaddr *) &addr, sizeof (addr))))
	{
		cout<<"Error in connect\n";
		return 1;
	} else
	{
		cout<<"YsneLIIHoe coegunenue c pop.mail.ru\n";
	}
	
	//создаем 2й сокет для smtp
	s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
	if(s == INVALID_SOCKET)
	{
		cout<<"Invalid socket\n";
	}
	d_addr = gethostbyname("smtp.mail.ru");
	if(d_addr == NULL)
	{
		cout<<"Error gethostbyname\n";
		return 1;
	};
	
	addr.sin_family = AF_INET;
	addr.sin_addr.s_addr = *((unsigned long *) d_addr->h_addr);
	addr.sin_port = htons (25);
	if(SOCKET_ERROR == (connect(s, (sockaddr *) &addr, sizeof (addr))))
	{
		cout<<"Error in connect\n";
		return 1;
	} else
	{
		cout<<"YsneLIIHoe coegunenue c smtp.mail.ru\n";
	}
	recv(p, rec, sizeof(rec), 0);
	cout<<rec<<"\n";
	memset(rec, 0, sizeof(rec));
	//авторизуемся на pop
	strcpy(rec,"USER user\r\n");
	send(p, rec, strlen(rec),0);
	cout<<rec<<"\n";
	recv(p, rec, sizeof(rec), 0);
	cout<<rec<<"\n";

	strcpy(rec,"PASS parol\r\n");
	send(p, rec, strlen(rec), 0);
	cout<<rec<<"\n";
	recv(p, rec, sizeof(rec), 0);
	cout<<rec<<"\n";
	memset(rec, 0, sizeof(rec));
	//пробуем отправить сообщение
	strcpy(rec, "HELO smtp.mail.ru\r\n");
	send(s, rec, strlen(rec), 0);
	cout<<rec<<"\n";
	recv(s, rec, sizeof(rec), 0);
	cout<<rec<<"\n";
	memset(rec, 0, sizeof(rec));

	strcpy(rec, "MAIL FROM:user@mail.ru\r\n");
	send(s, rec, strlen(rec), 0);
	cout<<rec<<"\n";
	recv(s, rec, sizeof(rec), 0);
	cout<<rec<<"\n";
	memset(rec, 0, sizeof(rec));

	strcpy(rec, "RCPT TO:user2@mail.ru\r\n");
	send(s, rec, strlen(rec), 0);
	cout<<rec<<"\n";
	recv(s, rec, sizeof(rec), 0);
	cout<<rec<<"\n";
	memset(rec, 0, sizeof(rec));

	strcpy(rec, "DATA\r\n");
	send(s, rec, strlen(rec), 0);
	cout<<rec<<"\n";
	recv(s, rec, sizeof(rec), 0);
	cout<<rec<<"\n";
	memset(rec, 0, sizeof(rec));

	strcpy(rec, "from:user@mail.ru\r\nto:user2@mail.ru\r\nsubject:Hello\r\nHello Andrew!!\r\n.\r\n");
	send(s, rec, strlen(rec), 0);
	cout<<rec<<"\n";
	recv(s, rec, sizeof(rec), 0);
	cout<<rec<<"\n";
	memset(rec, 0, sizeof(rec));

	strcpy(rec, "QUIT\r\n");
	send(s, rec, strlen(rec), 0);
	cout<<rec<<"\n";
	recv(s, rec, sizeof(rec), 0);
	cout<<rec<<"\n";
	













	closesocket(p);
	closesocket(s);
	WSACleanup();

	return 0;
}
ТЕПЕРЬ ВСЕ РАБОТАЕТ!!! СПАСИБО ВСЕМ!!!
 
Ответить с цитированием

  #10  
Старый 18.01.2010, 10:34
RaX
Познающий
Регистрация: 07.06.2008
Сообщений: 48
Провел на форуме:
247923

Репутация: 52
Отправить сообщение для RaX с помощью ICQ
По умолчанию

Всегда с обычных смпт серверов нужно делать авторизацию, иначе они не отправят ничего.
Тогда адрес отправителя можно было бы произвольный выбирать
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Продам акки вконтакте [FREE] Покупка, продажа, услуги в Соц. Сетях 57 27.03.2009 22:08
Продажа аккаунтов vkontakte.ru [FREE] Покупка, продажа, услуги в Соц. Сетях 8 10.02.2009 20:35



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ