Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/10: Рейтинг темы: голосов - 10, средняя оценка - 4.50
ninja2
969 / 188 / 32
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
#1

Отправка письма на email

27.11.2013, 08:32. Просмотров 1841. Ответов 9
Метки нет (Все метки)

Здорова господа!!!

Пишу щас программку которая должна отсылать письма на email, но ничего не получается.
От что набрасал:
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <winsock.h>
 
int main()
{
    cout <<"Rabota c SOCETAMI"<<endl;
    //PF_INET-протокол семейства интернет
    //SOCK_STREAM-надежный потоковый сокет
    //IPPROTO_TCP-тсp протокол
    SOCKET sock=socket(PF_INET,SOCK_STREAM,IPPROTO_TCP);//создаем дескриптор сокета
 
    return 0;
}
И уже сразу ошибка: 1>------ Построение начато: проект: test, Конфигурация: Debug Win32 ------
1> main.cpp
1>main.obj : error LNK2001: неразрешенный внешний символ "_socket@12"
1>D:\VS_progect\test\Debug\test.exe : fatal error LNK1120: 1 неразрешенных внешних элементов


Не видит функцию socet()???
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.11.2013, 08:32
Ответы с готовыми решениями:

Отлов нажатий клавиш в системе и отправка на email
Всем доброе время суток. Ребята нужна помощь... нада зделать клавиатурный...

Отправка письма на e-mail
Нужна функция отправки письма на e-mail....Вообще не представляю как это...

Отправка письма на почту
Здравствуйте. Пожалуйста подскажите рабочий код для отправки письма на...

Не работает отправка письма
Добрый вечер. Помогите советом. Код: IdSMTP1-&gt;UserId =...

Отправка письма на мыло
С помощью какого кода можно отправить письмо на мыло (C++ конечно)?? Я просто...

9
Croessmah
++Ͻ
14506 / 8289 / 1556
Регистрация: 27.09.2012
Сообщений: 20,342
Записей в блоге: 3
Завершенные тесты: 1
27.11.2013, 08:33 #2
Цитата Сообщение от ninja2 Посмотреть сообщение
Не видит функцию socet()???
нет реализации сие функции.
1
ninja2
969 / 188 / 32
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
27.11.2013, 08:40  [ТС] #3
Цитата Сообщение от Croessmah Посмотреть сообщение
нет реализации сие функции.
Да я догадался, а что winsoc это ж вроде винапи и что по умолчанию dll в system32 нет? Мне что еще их с интернета скачивать?

Добавлено через 1 минуту
Где брать эту библиотеку?
0
Croessmah
++Ͻ
14506 / 8289 / 1556
Регистрация: 27.09.2012
Сообщений: 20,342
Записей в блоге: 3
Завершенные тесты: 1
27.11.2013, 08:42 #4
А в MSDN посмотреть лень?
http://msdn.microsoft.com/en-us/libr...=vs.85%29.aspx
Requirements
Minimum supported clientWindows 2000 Professional [desktop apps only]
Minimum supported serverWindows 2000 Server [desktop apps only]
HeaderWinsock2.h
LibraryWs2_32.lib
DLLWs2_32.dll

и пример есть:
C++
1
2
3
4
//...
// link with Ws2_32.lib
#pragma comment(lib,"Ws2_32.lib")
//...
1
ninja2
969 / 188 / 32
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
27.11.2013, 08:44  [ТС] #5
Цитата Сообщение от Croessmah Посмотреть сообщение
А в MSDN посмотреть лень?
НУ я новичок в виндовс, даже не знаю где искать.
0
Croessmah
++Ͻ
14506 / 8289 / 1556
Регистрация: 27.09.2012
Сообщений: 20,342
Записей в блоге: 3
Завершенные тесты: 1
27.11.2013, 08:47 #6
Лучший ответ Сообщение было отмечено как решение

Решение

Цитата Сообщение от ninja2 Посмотреть сообщение
НУ я новичок в виндовс, даже не знаю где искать.
да походу еще как минимум в google первый раз
5
ninja2
969 / 188 / 32
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
27.11.2013, 08:55  [ТС] #7
А где эти либы находятся? Я глянул в папке lib компилятора VS2010 там вроде токо те либы которые я копировал?

Добавлено через 55 секунд
Цитата Сообщение от Croessmah Посмотреть сообщение
да походу еще как минимум в google первый раз
Не гуглил нашол там кое что, там маны хорошие как работать, а от как подключить нету ничего.

Добавлено через 2 минуты
Охота посмотреть где либы находятся я их не скачивал и вроде работает, значит где то на диске есть, наверно в system32 раз в vs нету щас гляну.

Добавлено через 4 минуты
Ничо не нашол, где эти либы лежат????
0
Croessmah
++Ͻ
14506 / 8289 / 1556
Регистрация: 27.09.2012
Сообщений: 20,342
Записей в блоге: 3
Завершенные тесты: 1
27.11.2013, 08:56 #8
есть в винде еще такая штука как поиск файлов
1
ninja2
969 / 188 / 32
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
28.11.2013, 03:00  [ТС] #9
Цитата Сообщение от Croessmah Посмотреть сообщение
есть в винде еще такая штука как поиск файлов
НУ да запустил, ну пока что ищет. Я думал мб так кто знает где они находятся?!

Добавлено через 3 минуты
Нашол в sdk находится, там целая куча либ.

Добавлено через 2 часа 25 минут
От написал код, но мне на мейл чо то ничего не приходит ????
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
int main()
{
    
    cout <<"Rabota c SOCETAMI"<<endl;
    int error(0);
 
    //1.Инициализация Winsock
    WSADATA ws;//содержит информацию о проинициализированной версии WinsocAPI
    //MAKEWORD( 1, 1 ) - связывает версию версия 1.1
    //WSAStartup() функция которая инициализирует Winsock
    if (FAILED (WSAStartup (MAKEWORD( 1, 1 ), &ws) ) ) 
    {
        // Error...
        error = WSAGetLastError();
        cout <<"error1= "<<error<<endl;
        //...
    }
 
    //2.Создание сокета
    //PF_INET-протокол семейства интернет
    //SOCK_STREAM-надежный потоковый сокет
    //IPPROTO_TCP-тсp протокол
    SOCKET sock;
    if(INVALID_SOCKET==(sock=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP)))//создаем дескриптор сокета
    {
        error=WSAGetLastError();
        cout <<"error2= "<<error<<endl;
    }
 
    //3.Установка соединения
    struct sockaddr_in smtp_addr; //структура адресс
    memset( &smtp_addr, 0, sizeof( struct sockaddr_in ) );//устанавливает в 0 все байты структуры
    smtp_addr.sin_family = AF_INET;//хз. протокол какой то или ТСП или ЮДП у нас ТСП
    smtp_addr.sin_addr.s_addr = inet_addr("smtp.mail.ru");//Устанавливаем адрес сервера
    smtp_addr.sin_port = htons(25);//smtp порт для сервера обязательно 25 (80-http,23-fttp и т.д. мы должны знать на какой порт передавать данные иначе не будет соединения)
    if(SOCKET_ERROR==connect( sock, ( struct sockaddr* )&smtp_addr, sizeof(smtp_addr)))
    {
        error=WSAGetLastError();
        cout <<"error3= "<<error<<endl;
    }
 
    //4.Посылаем данные
     char   *msg[] =
                        {
                        "HELO smtp.mail.ru\r\n",
                        "MAIL FROM:<dsfsafas@google.ru>\r\n",
                        "RCPT TO:<neovich@mail.ua>\r\n",
                        "DATA\r\n",
                        "Subject:hello\r\n",
                        "",
                        "CRLF.CRLF\r\n",
                        "QUIT\r\nHellow world gacpada \r\n\n.\r\n"//тукст самого сообщения
                        };
/*  if (SOCKET_ERROR == ( send(sock, (char* ) & buff), 512, 0 ) ) 
    {
        // Error...
        error = WSAGetLastError();
        // ... 
    }*/
    int snum=(0);
    while( snum < 8 )
    {
        if( SOCKET_ERROR == send( sock, msg[snum], lstrlen(msg[snum]), 0 ) )
        {
           
            error=WSAGetLastError();
            cout <<"error2= "<<error<<endl;
            closesocket( sock );
            WSACleanup();
            exit(1);
        }
        snum++;
    }
    closesocket( sock );
    cout <<"done"<<endl;
 
    return 0;
}
Добавлено через 2 часа 21 минуту
Нашол где вроде ошибка вот новый код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
#pragma comment (lib,"Ws2_32.lib")
#include <winsock.h>
#include <string>
using std::wstring;
using std::string;
#include <fstream>
using std::wifstream;
using std::ofstream;
#include <iostream>
using std::cout;
using std::endl;
using std::cerr;
 
int main()
{
    int error(0);
    //1.Инициализация Winsock
    WSADATA ws;//содержит информацию о проинициализированной версии WinsocAPI
    //MAKEWORD( 1, 1 ) - связывает версию версия 1.1
    //WSAStartup() функция которая инициализирует Winsock
    if (FAILED (WSAStartup (MAKEWORD( 1, 1 ), &ws) ) ) 
    {
        // Error...
        error = WSAGetLastError();
        cout <<"error1= "<<error<<endl;
        exit(1);
    }
 
    //2.Создание сокета
    //PF_INET-протокол семейства интернет
    //SOCK_STREAM-надежный потоковый сокет
    //IPPROTO_TCP-тсp протокол
    SOCKET sock;
    if(INVALID_SOCKET==(sock=socket(PF_INET,SOCK_STREAM,IPPROTO_TCP)))//создаем дескриптор сокета
    {
        error=WSAGetLastError();
        cout <<"error2= "<<error<<endl;
        exit(1);
    }
 
    //3.Установка соединения
    struct sockaddr_in smtp_addr; //структура адресс
    memset( &smtp_addr, 0, sizeof( struct sockaddr_in ) );//устанавливает в 0 все байты структуры
    smtp_addr.sin_family = AF_INET;//хз. протокол какой то или ТСП или ЮДП у нас ТСП
    smtp_addr.sin_addr.s_addr = inet_addr("94.100.177.1");//Устанавливаем адрес сервера
    smtp_addr.sin_port = htons(25);//smtp порт для сервера обязательно 25 (80-http,23-fttp и т.д. мы должны знать на какой порт передавать данные иначе не будет соединения)
    if(SOCKET_ERROR==connect( sock, ( struct sockaddr* )&smtp_addr, sizeof(smtp_addr)))
    {
        error=WSAGetLastError();
        cout <<"error3= "<<error<<endl;
        exit(1);
    }
    //exit(1);
//  4.Посылаем данные
     char   *msg[] =
                        {
                        "HELO smtp.mail.ru\r\n",
                        "MAIL FROM:<ppp@mail.ru>\r\n",
                        "RCPT TO:<neovich@mail.ua>\r\n",
                        "DATA\r\n",
                        "Subject:hello\r\n",
                        "Hellow world gacpada \r\n\n.\r\n",
                        "CRLF.CRLF\r\n",
                        "QUIT\r\n"
                        //тукст самого сообщения
                        };
/*  if (SOCKET_ERROR == ( send(sock, (char* ) & buff), 512, 0 ) ) 
    {
         Error...
        error = WSAGetLastError();
         ... 
    }*/
    int snum=(0);
    while( snum < 8 )
    {
        cout <<msg[snum]<<endl;
        if( send( sock, msg[snum], sizeof(msg[snum]), 0 )<0 )
        {
           
            error=WSAGetLastError();
            cout <<"error4= "<<error<<endl;
            closesocket( sock );
            WSACleanup();
            exit(1);
        }
        int actual_len = 0;
        char buff[300000];
        if (SOCKET_ERROR == (actual_len = recv (sock, (char* ) & buff, 300000, 0 ) ) )
        {
            // Error...
            error = WSAGetLastError();
            cout <<"error5= "<<error<<endl;
            // ... 
        }
        snum++;
    }
    closesocket( sock );
    cout <<"done"<<endl;
 
    return 0;
}
от здесь:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
int snum=(0);
    while( snum < 8 )
    {
        cout <<msg[snum]<<endl;
        if( send( sock, msg[snum], sizeof(msg[snum]), 0 )<0 )
        {
           
            error=WSAGetLastError();
            cout <<"error4= "<<error<<endl;
            closesocket( sock );
            WSACleanup();
            exit(1);
        }
        int actual_len = 0;
        char buff[300000];
        if (SOCKET_ERROR == (actual_len = recv (sock, (char* ) & buff, 300000, 0 ) ) )
        {
            // Error...
            error = WSAGetLastError();
            cout <<"error5= "<<error<<endl;
            // ... 
        }
        snum++;
    }
При получении ответа от сервера возвращается код 10054 - это означает что сервер принудительно закрыл соединение. Почему такое происходит???

Добавлено через 2 часа 1 минуту
В общем сервер не что но не хочет отвечать, сделал на порт 587 заработало, началось соединение, но не получается полностью весь запрос отправить. От что получается
Клиент: HELO smtp.mail.ru
Сервер: 220 smtp32.i.mail.ru ESMTP ready
Клиент: AUTH LOGIN

И сервер приходится долго ждать пока время ожидания истекает, короче сервер не дает ответа на авторизацию.

Делаю без авторизации тоже самое, ждет минут 10 и пропадает соединение с моей стороны, 10053 ошибка.

Как изменить время ожидания и в чом проблема???

Добавлено через 11 часов 1 минуту
Кое как доделал прогу, ну от она отправляет сообщения только через мой мэйл. Мне нужно обязательно авторизоваться: указать логи пароль, а можно как то без авторизации письма отсылать и что будет если я отошлю допустим 1000 000 сообщений????

Добавлено через 1 минуту
Мне нужно сделать такую прогу что б она хорошо отсылала письма массово и что б они в папку входящие попадали, а не в спам!!!

Добавлено через 3 минуты
Как вообще сделать рассылку без аутентификации? Это что мне нужно свой SMPT сервер создавать или искать сервер который не будет требовать аутентификации??? Просветите новичка!!!

Добавлено через 3 минуты
Как вообще правильно делать рассылки? Это что нужно где то базу SMPT серверов найти без аутентификации? Я так думаю походу на сервере с аутентификацией например на smpt.mail.ru много писем не отправишь?
0
ninja2
969 / 188 / 32
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
02.12.2013, 20:20  [ТС] #10
Здорова господа!!!

Мб кто знает как можно в письме ссылку отослать? Ничего не получается, от запрос который я отсылаю:
C++
1
2
3
4
5
6
7
8
9
10
11
        v.push_back("HELO vac9\r\n");
        v.push_back("AUTH LOGIN\r\n");
        v.push_back(string(user64)+"\r\n");
        v.push_back(string(pass64)+"\r\n");
        v.push_back("MAIL FROM:<"+smpt_login+">\r\n");
        v.push_back("RCPT TO:<"+mail[i]+">\r\n"):
        v.push_back("DATA\r\n");
        v.push_back("Subject:"+theme+"\r\n");
        v.push_back(massage[rand()%massage.size()]+"\r\n\n.\r\n");
    //  v.push_back("CRLF.CRLF\r\n");
        v.push_back("QUIT\r\n");
Все доходит в виде текста нормально, но ссылки не становятся ссылками, а просто символы заменяются на html-сущьности.

Пытался добавить строку в запрос:
C++
1
v.push_back("Content-Type: text/html; charset=windows-1251\r\n");
Ничего не получается после нее сервер возвращает ответ 250 accepted, но сдедующую строку я передаю "DATA\r\n" и после нее возвращается ошибка 500 unrecognized command (непризнанная команда). Не получается правильно свормировать запрос, использую для передачи сокеты, мб кто знает как передать??? Мне ссылки нужно передавать!?

Добавлено через 43 минуты
А ладно получилось все, нужно в сообщения встраивать тип передаваемых данных, короче внимательнее читать спецификацию SMTP протокола!!!

Добавлено через 3 часа 55 минут
В общем пытался токо с помощью программки отослать сообщения людям на мэйлы, так меня сразу забанили использовал smtp.mail.ru с авторизацией. Где можно найти бесплатный SMTP сервер для рассылки сообщений? Мне нужно отправлять примерно на 1 000 000 email сообщения примерно день через день????

Добавлено через 5 минут
Сервер возвращает "550 spam message rejected" и разрывает соединение.
Что это значит и как с этим бороться???

Добавлено через 18 минут
Написал в службу поддержки что б разблокировали, там ссылка была по которой можно востановить ак, ну походу нужно видимо делать задержу в несколько минут ну например сообщение одно отправлять в промежутке от 2 до 5 минут, как бы имитируя пользователя, попробую как разбанят с задержкой сделать, конечно лучше какой нить нормальный smtp сервер найти или несколько серверов, один забанил отправляешь через другой, нужен список база этих серверов?!

Добавлено через 1 минуту
У меня тут идея закралась, а что если попытаться свой сервер поставить, настроить и рассылать через свой?

Добавлено через 16 часов 7 минут
Давайте рассмотрим схему как письма отправляются и доходят до пользователя, от есть у нас smtp.mail.ru мы на него отправляем сообщение допустим адреса sdfs@mail.ru этот smtp.mail.ru сервер отправляет на pop.mail.ru откуда уже пользователь считывает письмо к себе в клиент ну тут как бы все ясно, smtp.mail.ru знает pop.mail.ru и ему базу так бы сказать отдает, а если мы будем пересылать письмо адреса dsf@gmail.ru у которого будет pop.gmail.ru сервер исходящей почты и мы отправляем мэйл чере smtp.mail.ru мэйл который gmail, вопрос как smtp.mail.ru сможет переслать письмо на адресс dsf@gmail.ru, как это все происходит? С каким сервером будет авторизоваться smtp.mail.ru c smtp.gmail.ru или как он с ним произведет авторизацию.

Мне если честно не понятно как происходит отправка и доставка сообщения на aa@gmail.ru допустим через smtp.mail.ru, оно же ведь как то должно попасть на сервер исходящей почты pop.gmail.ru , как оно туда попадет, тут просто пробелы, в инете я смотрю там есть разные схемы, но ни одна не описывает как они попадают, да было описание так же само производят авторизацию, но как сервер smtp.mail.ru произведет авторизацию с smpt.gmail.ru??? хз. как? Короче никак нимогу разобрать!
0
02.12.2013, 20:20
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.12.2013, 20:20

Подскажите литературу: как реализуется отправка email и sms?
Здравствуйте, хочу разобраться как реализуется отправка email и sms, есть...

Отправка email-сообщения на smtp сервер с ssl
Помогите написать программу на c++, отправляющую email сообщение на smtp сервер...

Отправка письма на email
как отправить почту? Пример из &quot;готовые решения, полезные коды не работает&quot;


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru