Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
BuJIJI
0 / 0 / 0
Регистрация: 19.11.2012
Сообщений: 60
#1

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

20.11.2012, 15:17. Просмотров 650. Ответов 7
Метки нет (Все метки)

Не понимаю как мне прикрепить файл который создаётся в программе.
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 минут
Мда...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.11.2012, 15:17
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Нужно отправить данные письмом (C++):

Подключить устройство через COM-порт и отправить на него данные - C++
Всем доброго времени суток. Потребовалось подключить устройство через COM-порт, и чтобы программа считывала и отправляла не него данные. ...

Нужно переделать статические данные в динамические - C++
как сделать tum динамическим чтобы при замене текста в text программа работала правильно. Задача программы удалят слово const #include...

Нужно вывести данные в таблицу из xml файла - C++
Есть такой файлик с расширением .xml (из программы spy_orb) в нем много строк, но нам нужно вытащить только суммы и запихнуть в таблицу,...

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

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

Нужно считать данные из файла и заменить определенный текст на заданный - C++
Есть файл с таким содержимым: (в нем записаны вещ. числа) Пример: 1.000 1.111 2.222 3.333 4.444 5.555 6.555 4.333 3.333 4.444 6.666...

7
igorrr37
1718 / 1346 / 167
Регистрация: 21.12.2010
Сообщений: 2,069
Записей в блоге: 10
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;
}
0
BuJIJI
0 / 0 / 0
Регистрация: 19.11.2012
Сообщений: 60
20.11.2012, 23:26  [ТС] #3
Если работает я в шоке!А ты получишь +1...Позже проверю...

Добавлено через 1 час 22 минуты
Практически....Файл присылается,только с содержаением вот не получается,как мне содержание моего файла в этот массив занести?
0
igorrr37
1718 / 1346 / 167
Регистрация: 21.12.2010
Сообщений: 2,069
Записей в блоге: 10
21.11.2012, 00:01 #4
прочитай в цикле по одному символу ф-цией get(), и нуль-терминатор не забудь
0
BuJIJI
0 / 0 / 0
Регистрация: 19.11.2012
Сообщений: 60
21.11.2012, 09:34  [ТС] #5
Цитата Сообщение от igorrr37 Посмотреть сообщение
прочитай в цикле по одному символу ф-цией get(), и нуль-терминатор не забудь
Охринеть!Судя по тому, что я ничего не понял...Я днище полнейшие . Напиши плиз конкретно кодом если не трудно.Я полный нуб...
0
igorrr37
1718 / 1346 / 167
Регистрация: 21.12.2010
Сообщений: 2,069
Записей в блоге: 10
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;
}
1
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 кб
0
igorrr37
1718 / 1346 / 167
Регистрация: 21.12.2010
Сообщений: 2,069
Записей в блоге: 10
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;
}
0
04.07.2013, 06:26
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.07.2013, 06:26
Привет! Вот еще темы с ответами:

нужно чтоб нашлась страна и все данные об этой стране вывелись в таблицу... - C++
Помогите с поиском по файлу ну не как не получается его сделать.... В файле записано: Страна Столица Валюта ну вот так ......

нужно написать функцию, которая будет считать квадратное уравнение, данные с клавиатуры ввожу - C++
#include &lt;conio.h&gt; #include &lt;iostream&gt; #include &lt;math.h&gt; using std::cout; using std::endl; using std::cin; int a, b, c,...

Мне нужно ввести в программу данные с помощью ifstream и добавить их всех в вектор чтобы был список. - C++
Доброго времени суток. У меня есть класс Студенты. Мне нужно ввести в программу данные о них(ID, имя, фамилия, возраст) с помощью ifstream...

Const в параметрах. Перед чем нужно употребить const дабы обезопасить данные от изменения - C++
const int Counter(const TSNum *Start) { int c=0; while(Start!=NULL){Start=Start-&gt;next;} return c; } Функция...


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

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

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