Нажмите CTRL-D чтобы добавить нас в закладки
HackZone.RU - Скомпилировать код отправки письма на С++ в Dev C++
Войти / Регистрация / Участники
Определение даты выпуска iPhone по серийному номеру
-
Поиск по сайту
Форумы



Реклама

Программирование / C/C++/VC++ RSS подписка на сообщения с форума Subscribe


Новая тема Наиболее обсуждаемые темы Наиболее посещаемые темы
Поиск 
Период
Перейти

Просмотров - 10342
Скомпилировать код отправки письма на С++ в Dev C++
Добавить этот топик в закладки »
RSS-лента ответов »Subscribe
azamprod




Gold Member
# | Сообщение добавлено 05.07.2010 11:38:37
Код взял отсюда http://tinyurl.com/396cpjz
C++
#include <windows.h>
#include <winsock.h>
#include <stdio.h>
 
WSADATA ws;
SOCKET s;
struct sockaddr_in addr;
hostent *d_addr;
char text[1024];
 
int main()
{
// инициализируем сокеты
if (FAILED (WSAStartup (MAKEWORD( 1,1 ), &ws)))
{
printf("Error in WSAStartup(...)\n");
return 1; }
 
// создаем сокет
s = socket (AF_INET, SOCK_STREAM, 0);
if (s == INVALID_SOCKET)
{
printf("Error in socket(...)\n");
return 1; }
 
// получаем адрес сервера
d_addr = gethostbyname ("smtp.mail.ru");
if (d_addr==NULL)
{
printf("Error in 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))))
{
printf("Error in connect(...)\n");
return 1; }
 
// ждем ответ от сервера
recv(s,text,sizeof(text),0);
printf("recv - %s", text);
 
// приветствуем сервер
strcpy(text,"HELO smtp.mail.ru\r\n");
send(s,text,strlen(text),0);
printf("send - %s", text);
 
// ждем подтверждение от сервера
recv(s,text,sizeof(text),0);
printf("recv - %s", text);
 
// начинаем отправлять конверт состоящий из полей
// MAIL FROM: и RCPT TO: После каждого поля ждем
// подтверждение
 
// сообщаем отправителя
strcpy(text,"MAIL FROM: [email]sender@mail.ru[/email] ");
send(s,text,strlen(text),0);
printf("send - %s", text);
 
// ждем подтверждение от сервера
recv(s,text,sizeof(text),0);
printf("recv - %s", text);
 
// сообщаем получателя
strcpy(text,"RCPT TO: [email]receiver@mtu-net.ru[/email] ");
send(s,text,strlen(text),0);
printf("send - %s", text);
 
// ждем подтверждение от сервера
recv(s,text,sizeof(text),0);
printf("recv - %s", text);
 
// подаем команду, что готовы начать передачу письма
strcpy(text,"DATA\r\n");
send(s,text,strlen(text),0);
printf("send - %s", text);
 
// ждем подтверждение от сервера
recv(s,text,sizeof(text),0);
printf("recv - %s", text);
 
// передаем заголовок
 
// от кого письмо
strcpy(text,"FROM: [email]sender@mail.ru[/email] ");
send(s,text,strlen(text),0);
printf("send - %s", text);
 
// кому письмо
strcpy(text,"TO: [email]receiver@mtu-net.ru[/email] ");
send(s,text,strlen(text),0);
printf("send - %s", text);
 
// тема письма
strcpy(text,"SUBJECT: test\r\n");
send(s,text,strlen(text),0);
printf("send - %s", text);
 
// текст письма
strcpy(text,"Hi!\nIt is a message for you\n");
send(s,text,strlen(text),0);
printf("send - %s", text);
 
// говорим, что закончили
strcpy(text,"\r\n.\r\n");
send(s,text,strlen(text),0);
printf("send - %s", text);
recv(s,text,sizeof(text),0);
printf("recv - %s", text);
 
// прощаемся с сервером
strcpy(text,"QUIT");
send(s,text,strlen(text),0);
printf("send - %s", text);
 
// закрываем сокет
closesocket(s);
 
return 0;
}
Компилировал в Dev C++ выдает ошибки
[Linker error] undefined reference to `WSAStartup@8'
[Linker error] undefined reference to `socket@12'
[Linker error] undefined reference to `gethostbyname@4'
[Linker error] undefined reference to `htons@4'
[Linker error] undefined reference to `connect@12'
[Linker error] undefined reference to `recv@16'
[Linker error] undefined reference to `send@16'
[Linker error] undefined reference to `closesocket@4'
Помогите как правильно компилировать этот код в Dev C++
Приписывал #pragma comment(lib, "ws_32.lib") не компилирует
Сказать спасибо Ответить Цитировать

_ruzmaz_


Gold Member
# | Сообщение добавлено 05.07.2010 22:24:05
меню Project -> пункт Project Options -> вкладка Parameters -> кнопка Add Library or Object
и добавляешь libwsock32.a
чтобы использовать winsock 2 (libws2_32.a) лучше включать winsock2.h
pragma comment вряд ли будет работать, если конечно не используешь мелкомягкий компилер
Сказать спасибо Ответить Цитировать

azamprod




Gold Member
# | Сообщение добавлено 09.07.2010 15:13:23
Отредактировано 09.07.2010 15:19:28 by azamprod
Скомпилировалось, запустил,

но на ящик письмо не приходит.
В чем может быть проблема?
Сказать спасибо Ответить Цитировать

_ruzmaz_


Gold Member
# | Сообщение добавлено 10.07.2010 16:21:09
azamprod

Скомпилировалось
слинковалось)
 
Добавлено 10.07.2010 16:21:25 (через 16 секунд )
 
переделал немного
http://slil.ru/29450030
 
Добавлено 10.07.2010 16:25:05 (через 4 минуты 41 секунда )
 
В приведенном в первом посте коде:
- передача команд не соответствеут протоколу
http://www.codenet.ru/webmast/smtp.php
http://ru.wikipedia.org/wiki/SMTP
(после каждой строки идет \r\n, адреса заключаются в < >, перед текстом письма два \r\n)
- в конце полученных через recv данных нужен 0 (если результат != SOCKET_ERROR) для нормального вывода через printf
 
Добавлено 10.07.2010 16:26:54 (через 2 минуты 49 секунд )
 
- выполняется отправка письма на mail.ru, поэтому получатель думаю должен быть на mail.ru хотя бы, а не на mtu-net.ru
- smtp.mail.ru стоит заменить на mxs.mail.ru, так как прием почты на mail.ru вроде идет через него
http://www.sql.ru/forum/actualthread.aspx?tid=251663
 
Добавлено 10.07.2010 16:31:14 (через 4 минуты 20 секунд )
 
если использовать smtp.mail.ru, то у меня так

recv - 220 mail.ru ESMTP Sat, 10 Jul 2010 16:30:31 +0400
send - HELO smtp.mail.ru
recv - 250 mx74.mail.ru Hello smtp.mail.ru [194.186.188.38]
send - MAIL FROM:<xxx@rambler.ru>
recv - 250 OK
send - RCPT TO:<ruzmaz@mail.ru>
recv - 550 not local sender over smtp
send - DATA
recv - 503 valid RCPT command must precede DATA
send - from: <xxx@rambler.ru>
send - to: <ruzmaz@mail.ru>
send - subject: Test
send -
send - It is a message for you
send - .
recv - 500 unrecognized command
send - QUIT

Добавлено 10.07.2010 16:38:29 (через 7 минут 15 секунд )
 
а если через mxs.mail.ru, то выглядит более оптимистично имхо)

recv - 220 Mail.Ru ESMTP
send - HELO mxs.mail.ru
recv - 250 mx63.mail.ru ready to serve
send - MAIL FROM:<xxx@rambler.ru>
recv - 250 OK
send - RCPT TO:<ruzmaz@mail.ru>
recv - 550 Access from ip address 194.186.188.38 blocked. Visit http://win.mail.
ru/cgi-bin/support_bl?ip=194.186.188.38
send - DATA
recv - 421 Command out of sequence; try again later
send - from: <xxx@rambler.ru>
send - to: <ruzmaz@mail.ru>
send - subject: Test
send -
send - It is a message for you
send - .
recv - 500 Unknown command
send - QUIT
Сказать спасибо Ответить Цитировать

azamprod




Gold Member
# | Сообщение добавлено 10.07.2010 18:11:34
Был на mail.ru и The Bat,  пробовал  smtp.mail.ru заменять на mxs.mail.ru, письмо не приходит. Пока буду пробовать
Сказать спасибо Ответить Цитировать

_ruzmaz_


Gold Member
# | Сообщение добавлено 10.07.2010 19:36:32
azamprod

письмо не приходит
а что прога-то говорит?
Сказать спасибо Ответить Цитировать

azamprod




Gold Member
# | Сообщение добавлено 10.07.2010 20:01:59
_ruzmaz_

а что прога-то говорит?

 
Добавлено 07.11.2010 16:12:52 (через 120 дней 21 часов 11 минут 53 секунды )
 
Работает
C++

#include <windows.h>
#include <winsock2.h>
#include <stdio.h>
 
#define BUFLEN 0x1000
 
WSADATA ws;
SOCKET s;
struct sockaddr_in addr;
hostent *d_addr;
char text[BUFLEN];
 
int main()
{
  int n = 0;
  // инициализируем сокеты
  if(FAILED(WSAStartup(MAKEWORD(1, 1), &ws)))
  {
    printf("Error in WSAStartup(...)\n");
    return 1;
  }
 
  // создаем сокет
  s = socket(AF_INET, SOCK_STREAM, 0);
  if(s == INVALID_SOCKET)
  {
    printf("Error in socket(...)\n");
    return 1;
  }
 
  // получаем адрес сервера
  d_addr = gethostbyname("smtp.mail.ru");
  if(d_addr == NULL)
  {
    printf("Error in 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))))
  {
    printf("Error in connect(...)\n");
    return 1;
  }
 
  // ждем ответ от сервера
  n = recv(s, text, BUFLEN - 1, 0);
  text[n] = 0;
  printf("recv - %s", text);
 
  // приветствуем сервер
  strcpy(text, "HELO smtp.mail.ru\r\n");
  send(s, text, strlen(text), 0);
  printf("send - %s", text);
 
  // ждем подтверждение от сервера
  n = recv(s, text, BUFLEN - 1, 0);
  if(n != SOCKET_ERROR)
    text[n] = 0;
  printf("recv - %s", text);
 
  // начинаем отправлять конверт состоящий из полей
  // MAIL FROM: и RCPT TO: После каждого поля ждем
  // подтверждение
 
  // сообщаем отправителя
  strcpy(text, "MAIL FROM:<azamprod@mail.ru>\r\n");
  send(s, text, strlen(text), 0);
  printf("send - %s", text);
 
  // ждем подтверждение от сервера
  n = recv(s, text, BUFLEN - 1, 0);
  if(n != SOCKET_ERROR)
    text[n] = 0;
  printf("recv - %s", text);
 
  // сообщаем получателя
  strcpy(text, "RCPT TO:<azamprod@mail.ru>\r\n");
  send(s, text, strlen(text), 0);
  printf("send - %s", text);
 
  // ждем подтверждение от сервера
  n = recv(s, text, BUFLEN - 1, 0)
  if(n != SOCKET_ERROR)
    text[n] = 0;
  printf("recv - %s", text);
 
  // подаем команду, что готовы начать передачу письма
  strcpy(text, "DATA\r\n");
  send(s, text, strlen(text), 0);
  printf("send - %s", text);
 
  // ждем подтверждение от сервера
  n = recv(s, text, BUFLEN - 1, 0);
  if(n != SOCKET_ERROR)
    text[n] = 0
  printf("recv - %s", text);
 
  // передаем заголовок
 
  // от кого письмо
  strcpy(text, "from: <azamprod@mail.ru>\r\n");
  send(s, text, strlen(text), 0);
  printf("send - %s", text);
 
  // кому письмо
  strcpy(text,"to: <azamprod@mail.ru>\r\n");
  send(s, text, strlen(text), 0);
  printf("send - %s", text);
 
  // тема письма
  strcpy(text, "subject: Test\r\n");
  send(s, text, strlen(text), 0);
  printf("send - %s", text);
 
  strcpy(text, "\r\n");
  send(s, text, strlen(text), 0);
  printf("send - %s", text);
 
  // текст письма
  strcpy(text, "Это письмо  test test\r\n");
  send(s, text,strlen(text), 0);
  printf("send - %s", text);
 
  // говорим, что закончили
  strcpy(text, ".\r\n");
  send(s, text, strlen(text), 0);
  printf("send - %s", text);
 
  n = recv(s, text, BUFLEN - 1, 0);
  if(n != SOCKET_ERROR)
    text[n] = 0;
  printf("recv - %s", text);
 
  // прощаемся с сервером
  strcpy(text, "QUIT");
  send(s, text, strlen(text), 0);
  printf("send - %s", text);
 
  // закрываем сокет
  closesocket(s);
 
  getchar();
  return 0;
}
 
Сказать спасибо Ответить Цитировать

Izon


Novice
# | Сообщение добавлено 15.11.2014 14:25:53
Что делать если выводит эту ошибку ?
C:\wq123\Makefile.win [Build Error]  [Project1.exe] Error 1
Сказать спасибо Ответить Цитировать


Только зарегистрированные пользователи могут оставлять сообщения в форуме

Зарегистрироваться *** Авторизоваться

 Последние новости и статьи  Последние сообщения с форумов
  • WhatsApp уверяет пользователей, что Facebook не имеет доступа к и...
  • Однострочная команда в Windows 10 может повредить жесткий диск с ...
  • Кардерский форум Joker’s Stash объявил о закрытии
  • Релиз ядра Linux 5.9
  • Российские хакеры вооружились уязвимостью Zerologon
  • Тысячи приватных звонков американских заключенных оказались в отк...
  • Шифровальщик атаковал немецкую компанию Software AG
  • Злоумышленники используют службу Windows Error Reporting для бесф...
  • Microsoft предупредила о вымогателях, которые выдают себя за МВД ...
  • Инфостилер Valak ворует информацию из почтовых систем Microsoft E...

    Все новости... Все статьи... Прислать новость RSS
  • Взлом и безопасность / Новичкам » Услуги Хакера @ Заказать взлом @ Нужен хакер@Alex89618506139
  • Взлом и безопасность / ICQ,AIM,YAHOO,QIP » Услуги Хакера @ Заказать взлом @ Нужен хакер@Alex89618506139
  • Взлом и безопасность / Разное » Re: Помощь в скачивании платного файла
  • Взлом и безопасность / Разное » Помощь в скачивании платного файла
  • Разное / Куплю, приму в дар » куплю | ваш аккаунта | получение нового | описание внутри
  • Разное / Предложения работы » Специалиста
  • Downloads / Другое » Re: Нужна база емайл адресов юр. лиц
  • Downloads / Другое » Нужна база емайл адресов юр. лиц
  • Разное / Предложения работы » Нужен взлом mail и gmail почты
  • Взлом и безопасность / Разное » Re: Нужна помощь в скачивании файла

    Все форумы... RSS


  • Разместить рекламу
    © HackZone Ltd. 1996-2020. Все права зарегистрированы.
    Перепечатка материалов без согласования и указания источника будет преследоваться по Закону

    О проекте | История проекта | Размещение рекламы | Обратная связь | Правила поведения на портале
    contador de visitas счетчик посещений

    #{title}

    #{text}

    x

    #{title}

    #{text}