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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.70
teramik
0 / 0 / 0
Регистрация: 29.06.2013
Сообщений: 11
#1

dev с++ Отправка на мыло файла - C++

02.07.2013, 22:01. Просмотров 1355. Ответов 5
Метки нет (Все метки)

Помогите пожалуста нужно отправить письмо с приклепленым файлом на мыло, отправить письмо я могу но как прикрепить файл работаю в dev c++ вот мой код:
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
#include <windows.h>
#include <winsock.h>
#include <stdio.h>
WSADATA ws;
SOCKET s;
struct sockaddr_in addr;
hostent *d_addr;
char text[512];
int main()
{
(WSAStartup (MAKEWORD( 1,1 ), &ws));
s = socket (AF_INET, SOCK_STREAM, 0);
d_addr = gethostbyname ("smtp.mail.ru"); 
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");
system ("pause");
return 1; }
recv(s,text,sizeof(text),0);
strcpy(text,"EHLO smtp.mail.ru\r\n");
send(s,text,strlen(text),0);
recv(s,text,sizeof(text),0);
strcpy(text,"AUTH login\r\n");
send(s,text,strlen(text),0);
recv(s,text,sizeof(text),0);
strcpy(text,"cG9jaGthNzZAbWFpbC5ydQ==\r\n");
send(s,text,strlen(text),0);
recv(s,text,sizeof(text),0);
strcpy(text,"cXdlcnR5cXdlcnR5\r\n");
send(s,text,strlen(text),0);
recv(s,text,sizeof(text),0);
strcpy(text,"MAIL FROM: [email]pochka76@mail.ru[/email]\r\n");
send(s,text,strlen(text),0);
recv(s,text,sizeof(text),0);
strcpy(text,"RCPT TO: [email]pochka83@mail.ru[/email]\r\n");
send(s,text,strlen(text),0);
recv(s,text,sizeof(text),0);
strcpy(text,"DATA\r\n");
send(s,text,strlen(text),0);
recv(s,text,sizeof(text),0);
strcpy(text,"FROM: [email]pochka76@mail.ru[/email]\r\n");
send(s,text,strlen(text),0);
strcpy(text,"TO: [email]pochka83@mail.ru[/email]\r\n");
send(s,text,strlen(text),0);
strcpy(text,"SUBJECT: Âèéøëî\r\n");
send(s,text,strlen(text),0); 
strcpy(text,"fdsafrgfds\n");
send(s,text,strlen(text),0);
strcpy(text,"\r\n.\r\n");
send(s,text,strlen(text),0);
recv(s,text,sizeof(text),0);
strcpy(text,"QUIT");
send(s,text,strlen(text),0);
closesocket(s);
system ("pause");
return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.07.2013, 22:01     dev с++ Отправка на мыло файла
Посмотрите здесь:

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

Поиск файла Dev c++ - C++
Как найти нужный файл и скопировать по нужному пути?

A+B=C из файла с добавлением 0 dev c++ 4.9.9.2 - C++
Пропустил два дня практики из за проблем, теперь в сильном минусе) Помогите написать программку. Собственно а+б=с понятно дело. Загвоздка в...

Найти произведение компонентов файла (dev c++ 5.4.2) - C++
произведения компонентов файла

Dev C++ неправильно считает символы из файла - C++
Всем привет !! Сталкнулся с токой проблемой что Dev C++ не читает нормально из файла русские символы и выдает билеберду как быть ?

Определить, в какой строке текстового файла больше гласных букв (Dev-C++) - C++
Всем привет, у меня проблема. Нужно в C++ написать программу, которая открывает текстовый файл, с парой строчек текста, и определяет в...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
igorrr37
1644 / 1272 / 133
Регистрация: 21.12.2010
Сообщений: 1,932
Записей в блоге: 7
03.07.2013, 13:11     dev с++ Отправка на мыло файла #2
Как отправить E-mail Dev C++

Добавлено через 1 час 32 минуты
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
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
#include <iostream>
#include <winsock.h>
#include <cstring>
#include <conio.h>
#pragma pack(1)
#pragma comment(lib,"Ws2_32.lib")
using namespace std;
 
void Base64Encode(const char* pText, char* pResBuf, std::size_t bufLen)
{
    static union
    {
        char arr[3];
        struct
        {
            unsigned a1 : 6, a2 : 6, a3 : 6, a4 : 6;
        } s;
    };
    static char ini[] = {"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"};
    memset(pResBuf, '\0', bufLen);
    int size = std::strlen (pText);
    int i, j, k;
    for(i = 0, k = 0; i < size;)
    {
        arr[0] = arr[1] = arr[2] = '\0';
        for(j = 2; j >= 0 && i < size; --j, ++i)
        {
            arr[j] = pText[i];
        }
        pResBuf[k++] = ini[s.a4];
        pResBuf[k++] = ini[s.a3];
        pResBuf[k++] = (1 > j ? ini[s.a2] : '=');
        pResBuf[k++] = (0 > j ? ini[s.a1] : '=');
    }
    return;
}
 
int main ()
{
    setlocale(LC_ALL,"Russian");
    SOCKET nSMTPServerSocket;
    struct sockaddr_in smtp_address;
    int nConnect, iMsg = 0, iEnd = 0, rc;
    char sBuf[4096] = {'\0'}, buffer2[512] = {'\0'};
    char* hostname = "smtp.mail.ru"; // почтовый сервер ящика отправителя
    hostent *h = 0;
    char login[] = "pochka76@mail.ru", password[] = "qwertyqwerty"; // имя и пароль ящика отправителя
    char fileContent[] = "Это содержимое файла."; // содержимое файла
    char seventhString[1024] =
        "from:<pochka76@mail.ru>\r\n" // ящик отправителя
        "to:<pochka83@mail.ru>\r\n"  // ящик получателя
        "subject: Это тема письма (должна быть в utf-8)\r\n"
        "Mime-Version: 1.0\r\n"
        "Content-Type: multipart/mixed; boundary=bound\r\n"
        "\r\n--bound\r\n"
        "Content-type: text/plain; charset=windows-1251\r\n"
        "Content-Transfer-Encoding: quoted-printable\r\n\r\n"
        "Это текст письма\r\n" //текст письма
        "\r\n--bound\r\n"
        "Content-Type: text/plain; name=file.txt\r\n" // имя файла
        "Content-Transfer-Encoding: base64\r\n"
        "Content-Disposition: attachment\r\n\r\n";
    char seventhStringMiddle[512];
    char seventhStringEnd[] = "\r\n--bound--\r\n.\r\n";
 
    char MailMessage[][1024] =
    {
        "EHLO mail.ru\r\n",
        "AUTH LOGIN\r\n",
        "",
        "",
        "mail from:<pochka76@mail.ru>\r\n", // ящик отправителя
        "rcpt to:<pochka83@mail.ru>\r\n", // ящик получателя
        "data\r\n",
        "",
        "quit\r\n"
    };
 
    Base64Encode(login, buffer2, sizeof(buffer2));
    strcpy(MailMessage[2], strcat(buffer2,"\r\n"));
 
    Base64Encode(password, buffer2, sizeof(buffer2));
    strcpy(MailMessage[3], strcat(buffer2,"\r\n"));
 
    Base64Encode(fileContent, seventhStringMiddle, sizeof(seventhStringMiddle));
    strcat(seventhString, strcat(strcat(seventhStringMiddle,"\r\n"), seventhStringEnd));
    strcpy(MailMessage[7], seventhString);
 
    WSADATA WSAData;
    if(rc = WSAStartup(MAKEWORD(1, 1), &WSAData))
        return __LINE__;
    nSMTPServerSocket = socket(PF_INET, SOCK_STREAM, 0);
    if(nSMTPServerSocket != INVALID_SOCKET)
    {
        smtp_address.sin_family = AF_INET;
        if ((h = gethostbyname(hostname)) == 0)
        {
            printf("gethostbyname failed\n");
            getchar();
            return __LINE__;
        }
        smtp_address.sin_addr.s_addr = inet_addr(inet_ntoa(*(reinterpret_cast<in_addr*>(h->h_addr))));
        smtp_address.sin_port = htons(25);
        nConnect = connect(nSMTPServerSocket, (PSOCKADDR)&smtp_address,
                                                            sizeof(smtp_address));
        if(!nConnect)
        {
            iMsg = iEnd = 0;
            do
            {
                iEnd = recv(nSMTPServerSocket, sBuf, sizeof(sBuf), 0);
                sBuf[iEnd] = '\0';
                printf("Answer: %s", sBuf);
                printf("Request: %s\n", MailMessage[iMsg]);
                send(nSMTPServerSocket, MailMessage[iMsg], strlen(MailMessage[iMsg]), 0);
                iMsg++;
            } while(iMsg < int(sizeof(MailMessage) / sizeof(*MailMessage)));
            iEnd = recv(nSMTPServerSocket, sBuf, sizeof(sBuf), 0);
            sBuf[iEnd] = '\0';
            printf(sBuf);
        }
        closesocket(nSMTPServerSocket);
    }
    getchar();
    return 0;
}
teramik
0 / 0 / 0
Регистрация: 29.06.2013
Сообщений: 11
17.07.2013, 13:55  [ТС]     dev с++ Отправка на мыло файла #3
нужно отправить файл большего размера например file.exe 150 kb
igorrr37
1644 / 1272 / 133
Регистрация: 21.12.2010
Сообщений: 1,932
Записей в блоге: 7
18.07.2013, 08:00     dev с++ Отправка на мыло файла #4
пробуй так
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
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
#include <iostream>
#include <fstream>
#include <winsock.h>
#include <cstring>
#include <cstdlib>
#pragma pack(1)
#pragma comment(lib,"Ws2_32.lib")
using namespace std;
 
void Base64Encode(const char* pText, size_t textLen, char* pResBuf, size_t bufLen)
{
    static union
    {
        char arr[3];
        struct
        {
            unsigned a1 : 6, a2 : 6, a3 : 6, a4 : 6;
        } s;
    };
    static char* ini = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
    memset(pResBuf, '\0', bufLen);
    int i = 0, j = 0, k = 0;
    for(i = 0, k = 0; i < (int)textLen;)
    {
        arr[0] = arr[1] = arr[2] = '\0';
        for(j = 2; j >= 0 && i < (int)textLen; --j, ++i)
        {
            arr[j] = pText[i];
        }
        pResBuf[k++] = ini[s.a4];
        pResBuf[k++] = ini[s.a3];
        pResBuf[k++] = (1 > j ? ini[s.a2] : '=');
        pResBuf[k++] = (0 > j ? ini[s.a1] : '=');
    }
}
 
int main ()
{
    char* pfilename = "rsu646.pdf";          // имя файла
    std::ifstream ifs(pfilename, std::ios::binary);
    if(ifs.is_open())
    {
        setlocale(LC_ALL,"Russian");
        struct sockaddr_in smtp_address;
        int nConnect, iMsg = 0, iEnd = 0, rc;
        ifs.seekg(0, std::ios::end);
        size_t fsize = size_t(ifs.tellg());
        std::cout << "fsize (ifs.tellg()): " << fsize << "\n\n";
        ifs.seekg(0, std::ios::beg);
        char* pFileContent = new char[fsize]; // содержимое файла
        char* pBuf = new char[1024];
        char* hostname = "smtp.mail.ru";      // почтовый сервер ящика отправителя
        hostent *h = 0;
        char login[] = "pochka76@mail.ru", password[] = "qwertyqwerty"; // имя и пароль ящика отправителя
        size_t index = 0;
        for(index = 0; ifs.get(pFileContent[index]); ++index)
        ;
        std::cout << "index (считано с файла): " << index << "\n\n";
 
        char* pSeventhString = new char[size_t(index * 2) + 1024];
        strcpy(pSeventhString,
            "from:<pochka76@mail.ru>\r\n"                // ящик отправителя
            "to:<pochka83@mail.ru>\r\n"                  // ящик получателя
            "subject: Eto tema pis'ma\r\n"               // Тема письма (должна быть в utf-8)
            "Mime-Version: 1.0\r\n"
            "Content-Type: multipart/mixed; boundary=bound\r\n"
            "\r\n--bound\r\n"
            "Content-type: text/plain; charset=windows-1251\r\n"
            "Content-Transfer-Encoding: quoted-printable\r\n\r\n"
            "Это текст письма\r\n"                        //текст письма
            "\r\n--bound\r\n"
            "Content-Type: text/plain; name=");
            strcat(pSeventhString, pfilename);
            strcat(pSeventhString, "\r\n"
            "Content-Transfer-Encoding: base64\r\n"
            "Content-Disposition: attachment\r\n\r\n");
        char* pSeventhStringMiddle = new char[size_t(index * 2) + 1024];
        char seventhStringEnd[] = "\r\n--bound--\r\n.\r\n";
 
        char** pMailMessage = new char*[9];
        for(size_t i = 0; i < 9; ++i)
            if(i != 7)
                pMailMessage[i] = new char [1024];
            else
                pMailMessage[i] = new char [size_t(index * 2) + 1024];
 
        strcpy(pMailMessage[0], "EHLO mail.ru\r\n");
        strcpy(pMailMessage[1], "AUTH LOGIN\r\n");
        strcpy(pMailMessage[2], "");
        strcpy(pMailMessage[3], "");
        strcpy(pMailMessage[4], "mail from:<pochka76@mail.ru>\r\n");// ящик отправителя
        strcpy(pMailMessage[5], "rcpt to:<pochka83@mail.ru>\r\n");  // ящик получателя
        strcpy(pMailMessage[6], "data\r\n");
        strcpy(pMailMessage[7], "");
        strcpy(pMailMessage[8], "quit\r\n");
 
        Base64Encode(login, strlen(login), pBuf, 1024);
        strcpy(pMailMessage[2], strcat(pBuf,"\r\n"));
 
        Base64Encode(password, strlen(password), pBuf, 1024);
        strcpy(pMailMessage[3], strcat(pBuf,"\r\n"));
 
        Base64Encode(pFileContent, index, pSeventhStringMiddle, size_t(index * 2) + 1024);
        strcat(pSeventhString, strcat(strcat(pSeventhStringMiddle,"\r\n"), seventhStringEnd));
        strcpy(pMailMessage[7], pSeventhString);
 
        WSADATA WSAData;
        if(rc = WSAStartup(MAKEWORD(1, 1), &WSAData))
            return __LINE__;
        SOCKET nSMTPServerSocket = socket(PF_INET, SOCK_STREAM, 0);
        if(nSMTPServerSocket != INVALID_SOCKET)
        {
            smtp_address.sin_family = AF_INET;
            if ((h = gethostbyname(hostname)) == 0)
            {
                std::cerr << "gethostbyname failed\n";
                system("pause");
                return __LINE__;
            }
            smtp_address.sin_addr.s_addr = inet_addr(inet_ntoa(*(reinterpret_cast<in_addr*>(h->h_addr))));
            smtp_address.sin_port = htons(25);
            nConnect = connect(nSMTPServerSocket, (PSOCKADDR)&smtp_address,
                                                                sizeof(smtp_address));
            if(!nConnect)
            {
                iMsg = iEnd = 0;
                do
                {
                    iEnd = recv(nSMTPServerSocket, pBuf, 1024, 0);
                    pBuf[iEnd] = '\0';
                    printf("\nAnswer: %s", pBuf);
                    if(iMsg != 7)
                        printf("Request: %s", pMailMessage[iMsg]);
                    send(nSMTPServerSocket, pMailMessage[iMsg], strlen(pMailMessage[iMsg]), 0);
                    iMsg++;
                }
                while(iMsg < 9);
                iEnd = recv(nSMTPServerSocket, pBuf, 1024, 0);
                pBuf[iEnd] = '\0';
                printf(pBuf);
            }
            closesocket(nSMTPServerSocket);
        }
        ifs.close();
    }
    else
        std::cerr << "Unable to open input file" << std::endl;
    system("pause");
    return 0;
}
teramik
0 / 0 / 0
Регистрация: 29.06.2013
Сообщений: 11
19.07.2013, 10:07  [ТС]     dev с++ Отправка на мыло файла #5
Цитата Сообщение от igorrr37 Посмотреть сообщение
пробуй так
дааааа Спасибо все работает
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.08.2013, 11:18     dev с++ Отправка на мыло файла
Еще ссылки по теме:

Отправка файла - C++
Как отправить файл по email используя WinAPI или Qt.

Отправка файла по почте - C++
Ребят, помогите кто может. Нужно отправить текстовый файл на почту. Так как я начинающий хотелось бы подробного ответа с примером, зарание...

SMTP Отправка файла на почту - C++
Здравствуйте! Вот пытаюсь дописать код для отправки файлов на почту, код взял здесь на форуме. Всё дело в том что не отправляет файлы...

Отправка содержимого текстового файла на почту - C++
Добрый вечер. Есть код сендера: IdSMTP1-&gt;AuthenticationType=atLogin; IdSMTP1-&gt;UserId = &quot;qwerty@yandex.ru&quot;; ...

Dev-c++ - C++
Так получилось, что должен некоторое время поработать в этом известном бесплатном компиляторе. В отличие от builder'а, где AnsiString...


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

Или воспользуйтесь поиском по форуму:
teramik
0 / 0 / 0
Регистрация: 29.06.2013
Сообщений: 11
17.08.2013, 11:18  [ТС]     dev с++ Отправка на мыло файла #6
Цитата Сообщение от igorrr37 Посмотреть сообщение
пробуй так
А можно сделать чтоб это все не отображалось в консольном окне
Yandex
Объявления
17.08.2013, 11:18     dev с++ Отправка на мыло файла
Ответ Создать тему
Опции темы

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