Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
ninja2
 Аватар для ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
27.11.2013, 08:32     Отправка письма на email #1
Здорова господа!!!

Пишу щас программку которая должна отсылать письма на 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()???
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11811 / 6790 / 767
Регистрация: 27.09.2012
Сообщений: 16,840
Записей в блоге: 2
Завершенные тесты: 1
27.11.2013, 08:33     Отправка письма на email #2
Цитата Сообщение от ninja2 Посмотреть сообщение
Не видит функцию socet()???
нет реализации сие функции.
ninja2
 Аватар для ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
27.11.2013, 08:40  [ТС]     Отправка письма на email #3
Цитата Сообщение от Croessmah Посмотреть сообщение
нет реализации сие функции.
Да я догадался, а что winsoc это ж вроде винапи и что по умолчанию dll в system32 нет? Мне что еще их с интернета скачивать?

Добавлено через 1 минуту
Где брать эту библиотеку?
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11811 / 6790 / 767
Регистрация: 27.09.2012
Сообщений: 16,840
Записей в блоге: 2
Завершенные тесты: 1
27.11.2013, 08:42     Отправка письма на email #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")
//...
ninja2
 Аватар для ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
27.11.2013, 08:44  [ТС]     Отправка письма на email #5
Цитата Сообщение от Croessmah Посмотреть сообщение
А в MSDN посмотреть лень?
НУ я новичок в виндовс, даже не знаю где искать.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11811 / 6790 / 767
Регистрация: 27.09.2012
Сообщений: 16,840
Записей в блоге: 2
Завершенные тесты: 1
27.11.2013, 08:47     Отправка письма на email #6
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от ninja2 Посмотреть сообщение
НУ я новичок в виндовс, даже не знаю где искать.
да походу еще как минимум в google первый раз
ninja2
 Аватар для ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
27.11.2013, 08:55  [ТС]     Отправка письма на email #7
А где эти либы находятся? Я глянул в папке lib компилятора VS2010 там вроде токо те либы которые я копировал?

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

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

Добавлено через 4 минуты
Ничо не нашол, где эти либы лежат????
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11811 / 6790 / 767
Регистрация: 27.09.2012
Сообщений: 16,840
Записей в блоге: 2
Завершенные тесты: 1
27.11.2013, 08:56     Отправка письма на email #8
есть в винде еще такая штука как поиск файлов
ninja2
 Аватар для ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
28.11.2013, 03:00  [ТС]     Отправка письма на email #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 много писем не отправишь?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.12.2013, 20:20     Отправка письма на email
Еще ссылки по теме:

Проверка email C++
C++ Отправка письма на e-mail
C++ Отправка письма на мыло

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

Или воспользуйтесь поиском по форуму:
ninja2
 Аватар для ninja2
230 / 186 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
02.12.2013, 20:20  [ТС]     Отправка письма на email #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??? хз. как? Короче никак нимогу разобрать!
Yandex
Объявления
02.12.2013, 20:20     Отправка письма на email
Ответ Создать тему
Опции темы

Текущее время: 06:58. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru