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

Нужно отправить данные письмом - C++

Восстановить пароль Регистрация
 
BuJIJI
0 / 0 / 0
Регистрация: 19.11.2012
Сообщений: 42
20.11.2012, 15:17     Нужно отправить данные письмом #1
Не понимаю как мне прикрепить файл который создаётся в программе.
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
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
#include <iostream>
#include <fstream>
#include <time.h>
#include <stdio.h>
 #include <windows.h>
#include <winsock.h>
#include <cstring>
#include <cstdio>
#include <conio.h>
#pragma pack(1)
#pragma 
#pragma comment(lib,"Ws2_32.lib")
 
using namespace std;
const int MAX_ANSWERS = 20;
double answ[MAX_ANSWERS+1] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20};
int an=0;
int neg;
int a;
float ans[MAX_ANSWERS];
int g;
char Itog[];
float proc;
double Persent(double a, double b)
 
{
return a/b*100;
}
 
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 ()
{
    system("start Test4.doc");
 
    time_t rawtime;
 struct tm * timeinfo;
  time ( &rawtime );
 timeinfo = localtime ( &rawtime );
 
    // Подключение внешних файлов
    ifstream fin("LogOcenok.txt");
    ofstream fout("LogOcenok.txt");
 
    setlocale(LC_ALL,"Russian");
g:
    an++;
    cout << "Введите ответ на "<<an<<" вопрос"<<endl;
    cin >> ans[an];
    fin >> ans[an];
    if(ans[an] != answ[an])
    {
        neg++;
    }
        if(an != MAX_ANSWERS)
    {
        goto g;
        }
        cout << "[" << asctime (timeinfo) << "]" << endl;
        fout << "[" << asctime (timeinfo) << "]" << endl;
 
        if(an == MAX_ANSWERS)
    {
        for(int i=1;i<MAX_ANSWERS+1;i++)
        {
            cout << "Правильный ответ на вопрос "<<i<<"         "<< answ[i]<<endl;
            fout << "Правильный ответ на вопрос "<<i<<"         "<< answ[i]<<endl;   
        }
        for(int i=1;i<MAX_ANSWERS+1;i++)
        {
            cout << "Ваш ответ на вопрос "<< i<<"         "<<ans[i]<<endl;
            fout << "Ваш ответ на вопрос "<< i<<"         "<<ans[i]<<endl;
 
        }
        if(neg == 0){proc = 100;}
        else
        {
            proc = Persent(neg,MAX_ANSWERS);
        cout<<"Итого :"<<endl;
        cout <<"Всего вопросов: "<<MAX_ANSWERS<<endl;
        cout<< "Неправильно : "<<neg<<endl;
        cout <<"Процент :"<<proc<<endl;
        fout<<"Итого :"<<endl;
        fout <<"Всего вопросов: "<<MAX_ANSWERS<<endl;
        fout<< "Неправильно : "<<neg<<endl;
        fout <<"Процент :"<<proc<<endl;
        if(proc <= 10)
        {
            cout << "Оценка 5"<<endl;
            _getch();
            fout << "Оценка 5"<<endl;
            goto a;
        }
            if(proc <= 30)
        {
            cout << "Оценка 4"<<endl;
            fout << "Оценка 4"<<endl;
            _getch();
            goto a;
        }
                if(proc <= 50)
        {
            cout << "Оценка 3"<<endl;
            fout << "Оценка 3"<<endl;
            _getch();
            goto a;
        }
                    if(proc <= 100)
        {
            cout << "Оценка 2"<<endl;
            
            fout << "Оценка 2"<<endl;
            _getch();
            goto a;
        }
    }
a:
            SOCKET nSMTPServerSocket;
    struct sockaddr_in smtp_address;
    int nConnect, iMsg = 0, iEnd = 0, rc;
    char sBuf[4096] = {'\0'}, buffer2[240] = {'\0'};
    char hostname[80] = "smtp.yandex.ru"; // почтовый сервер ящика отправителя
    hostent *h = NULL;
    char login[] = "Pomakaron@yandex.ru", password[] = "9814fghtkm"; // имя и пароль ящика отправителя
    char MailMessage[][128] =
    {
        "EHLO mail.ru\r\n",
        "AUTH LOGIN\r\n",
        "",
        "",
        "mail from:<Pomakaron@yandex.ru>\r\n", // ящик отправителя
        "rcpt to:<molekula602@mail.ru>\r\n", // ящик получателя
        "data\r\n",
        "from:<Pomakaron@yandex.ru>\r\n", // ящик отправителя
        "to:<molekula602@mail.ru>\r\n" ,// ящик получателя
        "subject: Оценки",
        "Привет Макар!\r\n.\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"));
 
    WSADATA WSAData;
    rc = WSAStartup(MAKEWORD(1, 1), &WSAData);
    if(rc) return __LINE__;
    nSMTPServerSocket = socket(PF_INET, SOCK_STREAM, 0);
    if(nSMTPServerSocket != INVALID_SOCKET)
    {
        smtp_address.sin_family = AF_INET;
        h = gethostbyname(hostname);
        if (h == NULL)
        {
            printf("error: Could not resolve ");
            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", 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);
    }
        _getch();
 
}
// Закрытие файлов
 fin.close();
 fout.close();
}
Просто письмо спокойно передаётся. Вообще цель передать данные об оценках,так как через strcat в текст письма у меня не получилось прилепить данные об оценках.То я решил делать прикрепление.Хотя сам не знаю как.

Добавлено через 4 часа 0 минут
Мда...
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.11.2012, 15:17     Нужно отправить данные письмом
Посмотрите здесь:

подскажите литературу где встречаются данные темы.нужно к экзамену! C++
C++ Нужно написать программу преобразующую данные в машинный вид
C++ нужно чтоб нашлась страна и все данные об этой стране вывелись в таблицу...
Нужно написать программу которая считывает данные из текстового файла C++
C++ Мне нужно ввести в программу данные с помощью ifstream и добавить их всех в вектор чтобы был список.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
igorrr37
 Аватар для igorrr37
1593 / 1221 / 118
Регистрация: 21.12.2010
Сообщений: 1,868
Записей в блоге: 7
20.11.2012, 16:51     Нужно отправить данные письмом #2
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
#include <iostream>
#include <fstream>
#include <time.h>
#include <stdio.h>
 #include <windows.h>
#include <winsock.h>
#include <cstring>
#include <cstdio>
#include <conio.h>
#pragma pack(1)
#pragma
#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[80] = "smtp.yandex.ru"; // почтовый сервер ящика отправителя
    hostent *h = NULL;
    char login[] = "Pomakaron@yandex.ru", password[] = "9814fghtkm"; // имя и пароль ящика отправителя
    char fileContent[] = "Это содержимое файла."; // содержимое файла
    char seventhString[1024] =
        "from:<Pomakaron@yandex.ru>\r\n" // ящик отправителя
        "to:<molekula602@mail.ru>\r\n"  // ящик получателя
        "subject: Оценки\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:<Pomakaron@yandex.ru>\r\n", // ящик отправителя
        "rcpt to:<molekula602@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;
    rc = WSAStartup(MAKEWORD(1, 1), &WSAData);
    if(rc) return __LINE__;
    nSMTPServerSocket = socket(PF_INET, SOCK_STREAM, 0);
    if(nSMTPServerSocket != INVALID_SOCKET)
    {
        smtp_address.sin_family = AF_INET;
        h = gethostbyname(hostname);
        if (h == NULL)
        {
            printf("error: Could not resolve ");
            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", 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;
}
BuJIJI
0 / 0 / 0
Регистрация: 19.11.2012
Сообщений: 42
20.11.2012, 23:26  [ТС]     Нужно отправить данные письмом #3
Если работает я в шоке!А ты получишь +1...Позже проверю...

Добавлено через 1 час 22 минуты
Практически....Файл присылается,только с содержаением вот не получается,как мне содержание моего файла в этот массив занести?
igorrr37
 Аватар для igorrr37
1593 / 1221 / 118
Регистрация: 21.12.2010
Сообщений: 1,868
Записей в блоге: 7
21.11.2012, 00:01     Нужно отправить данные письмом #4
прочитай в цикле по одному символу ф-цией get(), и нуль-терминатор не забудь
BuJIJI
0 / 0 / 0
Регистрация: 19.11.2012
Сообщений: 42
21.11.2012, 09:34  [ТС]     Нужно отправить данные письмом #5
Цитата Сообщение от igorrr37 Посмотреть сообщение
прочитай в цикле по одному символу ф-цией get(), и нуль-терминатор не забудь
Охринеть!Судя по тому, что я ничего не понял...Я днище полнейшие . Напиши плиз конкретно кодом если не трудно.Я полный нуб...
igorrr37
 Аватар для igorrr37
1593 / 1221 / 118
Регистрация: 21.12.2010
Сообщений: 1,868
Записей в блоге: 7
21.11.2012, 12:59     Нужно отправить данные письмом #6
вот вместе с чтением
Кликните здесь для просмотра всего текста
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
#include <iostream>
#include <fstream>
#include <time.h>
#include <stdio.h>
#include <windows.h>
#include <winsock.h>
#include <cstring>
#include <cstdio>
#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 ()
{
    std::ifstream ifs("in.txt", std::ios::binary);
    if(ifs.is_open())
    {
        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[80] = "smtp.yandex.ru"; // почтовый сервер ящика отправителя
        hostent *h = NULL;
        char login[] = "Pomakaron@yandex.ru", password[] = "9814fghtkm"; // имя и пароль ящика отправителя
        char fileContent[512]; // содержимое файла
        size_t index;
        for(index = 0; ifs.get(fileContent[index]); ++index)
        ;
        fileContent[index] = 0;
        std::cout << "file content is:\n" << fileContent << "\n\n";
        char seventhString[1024] =
            "from:<Pomakaron@yandex.ru>\r\n" // ящик отправителя
            "to:<molekula602@mail.ru>\r\n"  // ящик получателя
            "subject: Оценки\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:<Pomakaron@yandex.ru>\r\n", // ящик отправителя
            "rcpt to:<molekula602@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;
        rc = WSAStartup(MAKEWORD(1, 1), &WSAData);
        if(rc) return __LINE__;
        nSMTPServerSocket = socket(PF_INET, SOCK_STREAM, 0);
        if(nSMTPServerSocket != INVALID_SOCKET)
        {
            smtp_address.sin_family = AF_INET;
            h = gethostbyname(hostname);
            if (h == NULL)
            {
                printf("error: Could not resolve ");
                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", 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);
        }
        ifs.close();
    }
    else
        std::cerr << "Unable to open input file" << std::endl;
    getchar();
    return 0;
}
teramik
0 / 0 / 0
Регистрация: 29.06.2013
Сообщений: 11
03.07.2013, 15:46     Нужно отправить данные письмом #7
Цитата Сообщение от igorrr37 Посмотреть сообщение
вот вместе с чтением
Кликните здесь для просмотра всего текста
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
#include <iostream>
#include <fstream>
#include <time.h>
#include <stdio.h>
#include <windows.h>
#include <winsock.h>
#include <cstring>
#include <cstdio>
#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 ()
{
    std::ifstream ifs("in.txt", std::ios::binary);
    if(ifs.is_open())
    {
        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[80] = "smtp.yandex.ru"; // почтовый сервер ящика отправителя
        hostent *h = NULL;
        char login[] = "Pomakaron@yandex.ru", password[] = "9814fghtkm"; // имя и пароль ящика отправителя
        char fileContent[512]; // содержимое файла
        size_t index;
        for(index = 0; ifs.get(fileContent[index]); ++index)
        ;
        fileContent[index] = 0;
        std::cout << "file content is:\n" << fileContent << "\n\n";
        char seventhString[1024] =
            "from:<Pomakaron@yandex.ru>\r\n" // ящик отправителя
            "to:<molekula602@mail.ru>\r\n"  // ящик получателя
            "subject: Оценки\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:<Pomakaron@yandex.ru>\r\n", // ящик отправителя
            "rcpt to:<molekula602@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;
        rc = WSAStartup(MAKEWORD(1, 1), &WSAData);
        if(rc) return __LINE__;
        nSMTPServerSocket = socket(PF_INET, SOCK_STREAM, 0);
        if(nSMTPServerSocket != INVALID_SOCKET)
        {
            smtp_address.sin_family = AF_INET;
            h = gethostbyname(hostname);
            if (h == NULL)
            {
                printf("error: Could not resolve ");
                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", 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);
        }
        ifs.close();
    }
    else
        std::cerr << "Unable to open input file" << std::endl;
    getchar();
    return 0;
}
А как зделать чтобы оно загружало файл размером более 100 кб
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.07.2013, 06:26     Нужно отправить данные письмом
Еще ссылки по теме:

C++ Const в параметрах. Перед чем нужно употребить const дабы обезопасить данные от изменения
C++ Нужно считать данные из файла и заменить определенный текст на заданный
Нужно переделать статические данные в динамические C++

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

Или воспользуйтесь поиском по форуму:
igorrr37
 Аватар для igorrr37
1593 / 1221 / 118
Регистрация: 21.12.2010
Сообщений: 1,868
Записей в блоге: 7
04.07.2013, 06:26     Нужно отправить данные письмом #8
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;
}
Yandex
Объявления
04.07.2013, 06:26     Нужно отправить данные письмом
Ответ Создать тему
Опции темы

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