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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 21, средняя оценка - 5.00
dr.curse
389 / 345 / 16
Регистрация: 11.10.2010
Сообщений: 1,907
#1

Отправка файла - C++

23.06.2011, 18:24. Просмотров 3058. Ответов 8
Метки нет (Все метки)

Как отправить файл по email используя WinAPI или Qt.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.06.2011, 18:24
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Отправка файла (C++):

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

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

dev с++ Отправка на мыло файла - C++
Помогите пожалуста нужно отправить письмо с приклепленым файлом на мыло, отправить письмо я могу но как прикрепить файл работаю в dev c++...

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

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

Сформировать два текстовых файла из целых чисел. Записать в третий файл минимальный элемент первого файла и максимальный элемент второго файла - C++
Тема: работа с текстовыми файлами с использованием стандартных функций библиотеки stdio.h Нужно составить программу: Сформировать два...

8
jonson
234 / 207 / 61
Регистрация: 18.03.2010
Сообщений: 750
24.06.2011, 02:45 #2
протокол SMTP и сокеты юзать надо. Погугли, должна быть масса примеров
0
alex_x_x
бжни
2450 / 1655 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
24.06.2011, 02:55 #3
да, мануал говорит
Класс QTcpSocket предоставляет интерфейс для TCP. Вы можете использовать QTcpSocket для создания стандартных сетевых протоколов таких как POP3, SMTP и NNTP, и для других.
Добавлено через 37 секунд
дальше какието готовые решения искать
0
xAtom
915 / 740 / 60
Регистрация: 09.12.2010
Сообщений: 1,346
Записей в блоге: 1
24.06.2011, 07:35 #4
В WinAPI это сокеты, в Borland C++ Builder есть всё для отрпавки по SMTP протоколу по MAPI.

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
        TMapiMessage MapiMessage;
        TMapiRecipDesc SenderDesc;
        TMapiRecipDesc RecipDesc;
        TMapiFileDesc  Files;
 
        memset((void*)&SenderDesc,'\0',sizeof(SenderDesc));
 
        SenderDesc.ulRecipClass = MAPI_ORIG;
        RecipDesc.ulReserved = 0;
        RecipDesc.ulRecipClass = MAPI_TO;
        RecipDesc.lpszName = "Алексею";
        RecipDesc.lpszAddress ="SMTP:pupkin@example.com";  // адрес получателя
        RecipDesc.ulEIDSize = 0;
        RecipDesc.lpEntryID = NULL;
 
        Files.ulReserved = 0;
        Files.flFlags = 0;
        Files.nPosition = -1;
        Files.lpszPathName = "X:\\lesson.doc";    // путь к файлу для отрпавки
        Files.lpszFileName = "lesson.doc";  // тут имя файла без пути
        Files.lpFileType = NULL;
 
        MapiMessage.ulReserved = 0;
        MapiMessage.lpszSubject = "Название тема сообщения";
        MapiMessage.lpszNoteText = "Текст соощения";
        MapiMessage.lpszMessageType = NULL;
        MapiMessage.lpszDateReceived = NULL;
        MapiMessage.lpszConversationID = NULL;
        MapiMessage.flFlags = 0;
        MapiMessage.lpOriginator = &SenderDesc;
        MapiMessage.nRecipCount = 1;
        MapiMessage.lpRecips = &RecipDesc;
        MapiMessage.nFileCount = 1;
        MapiMessage.lpFiles = &Files;
 
        MapiSendMail(0, (ULONG)Application->Handle, MapiMessage, MAPI_DIALOG | MAPI_LOGON_UI |  MAPI_NEW_SESSION, 0);
0
dr.curse
389 / 345 / 16
Регистрация: 11.10.2010
Сообщений: 1,907
24.06.2011, 11:09  [ТС] #5
xAtom, а как сделать при помощи сокетов?
0
igorrr37
1648 / 1276 / 133
Регистрация: 21.12.2010
Сообщений: 1,932
Записей в блоге: 7
24.06.2011, 19:24 #6
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Юзайте лучше boost. Вот отправка с прикреплённым файлом.
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
#include <iostream>
#include <ostream>
#include <string>
#include <fstream>
#include <iterator>
#include <windows.h> // CharToOem
#include <boost/asio.hpp>
#include <boost/archive/iterators/base64_from_binary.hpp>
#include <boost/archive/iterators/transform_width.hpp>
namespace iters=boost::archive::iterators;
typedef boost::asio::ip::tcp tcp;
typedef iters::base64_from_binary<iters::transform_width<std::string::const_iterator, 6, 8>>
    base64_t;
 
boost::asio::streambuf reqBuf, respBuf;
std::ostream reqStream(&reqBuf);
tcp::socket* psock;
 
void SendRequest(std::string s){
    reqStream<<s<<"\r\n";
    boost::asio::write(*psock, reqBuf);
}
 
std::size_t PrintResponse(){
    std::size_t len=boost::asio::read_until(*psock, respBuf, "\r\n");
    std::cout<<&respBuf;
    return len;
}
 
std::string Encode(const std::string& s){
    return std::string(base64_t(s.begin()), base64_t(s.end()));
}
 
int main(){
    try{
        std::ifstream ifs("1.txt"); // прикреплённый файл
        if(!ifs){std::cerr<<"File not found\n"; return 1;}
        std::string str((std::istreambuf_iterator<char>(ifs)), std::istreambuf_iterator<char>()), encStr(Encode(str));
        ifs.close();
        // авторизация на ящик отправителя
        std::string login="name1", encLogin(Encode((login))); //имя
        std::string passw="passw1", encPassw(Encode(passw));  //пароль
        std::string host="smtp.mail.ru"; // почтовый сервер
        boost::asio::io_service io;
        tcp::resolver resolver(io);
        tcp::resolver::query query(host, "25"); //default smtp port
        tcp::resolver::iterator endpoint_iterator = resolver.resolve(query);
        tcp::resolver::iterator end;
        tcp::socket sock(io);
        psock=&sock;
        boost::system::error_code error = boost::asio::error::host_not_found;
        while (error && endpoint_iterator != end){
            sock.close();
            sock.connect(*endpoint_iterator++, error);
        }
        if (error) throw boost::system::system_error(error);
        PrintResponse();
        SendRequest("ehlo myhost");
        PrintResponse();
        SendRequest("auth login");//выбираем авторизацию по login
        PrintResponse();
        SendRequest(encLogin);
        PrintResponse();
        SendRequest(encPassw);
        PrintResponse();
        SendRequest("mail from:<name1@mail.ru>");//ящик отправителя
        PrintResponse();
        SendRequest("rcpt to:<name2@yandex.ru>");// ящик получателя
        PrintResponse();
        SendRequest("data");
        PrintResponse();
        SendRequest("from:<name1@mail.ru>");  //это
        SendRequest("to:<name2@yandex.ru>"); //не
        SendRequest("subject: Some subject"); //спам
        SendRequest("Mime-Version: 1.0");
        SendRequest("Content-Type: multipart/mixed; boundary=bound");
        SendRequest("\r\n--bound");
        SendRequest("Content-type: text/plain; charset=windows-1251");
        SendRequest("Content-Transfer-Encoding: quoted-printable\r\n");
        SendRequest("It's letter's text\r\nThis letter has attaching file.");//текст письма
        SendRequest("\r\n--bound");
        SendRequest("Content-Type: text/plain; name=file.txt");
        SendRequest("Content-Transfer-Encoding: base64");
        SendRequest("Content-Disposition: attachment\r\n");
        SendRequest(encStr);
        SendRequest("\r\n--bound--\r\n.");
        PrintResponse();
        SendRequest("quit");
        PrintResponse();
        sock.close();
    }
    catch (std::exception& e){
        char buf[512];
        CharToOem(e.what(), buf);
        std::cout << "Exception: " << buf << "\n";
    }
    return 0;
}
5
zelim
77 / 77 / 4
Регистрация: 26.12.2011
Сообщений: 217
25.02.2012, 18:42 #7
Цитата Сообщение от igorrr37 Посмотреть сообщение
Юзайте лучше boost. Вот отправка с прикреплённым файлом.
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
#include <iostream>
#include <ostream>
#include <string>
#include <fstream>
#include <iterator>
#include <windows.h> // CharToOem
#include <boost/asio.hpp>
#include <boost/archive/iterators/base64_from_binary.hpp>
#include <boost/archive/iterators/transform_width.hpp>
namespace iters=boost::archive::iterators;
typedef boost::asio::ip::tcp tcp;
typedef iters::base64_from_binary<iters::transform_width<std::string::const_iterator, 6, 8>>
    base64_t;
 
boost::asio::streambuf reqBuf, respBuf;
std::ostream reqStream(&reqBuf);
tcp::socket* psock;
 
void SendRequest(std::string s){
    reqStream<<s<<"\r\n";
    boost::asio::write(*psock, reqBuf);
}
 
std::size_t PrintResponse(){
    std::size_t len=boost::asio::read_until(*psock, respBuf, "\r\n");
    std::cout<<&respBuf;
    return len;
}
 
std::string Encode(const std::string& s){
    return std::string(base64_t(s.begin()), base64_t(s.end()));
}
 
int main(){
    try{
        std::ifstream ifs("1.txt"); // прикреплённый файл
        if(!ifs){std::cerr<<"File not found\n"; return 1;}
        std::string str((std::istreambuf_iterator<char>(ifs)), std::istreambuf_iterator<char>()), encStr(Encode(str));
        ifs.close();
        // авторизация на ящик отправителя
        std::string login="name1", encLogin(Encode((login))); //имя
        std::string passw="passw1", encPassw(Encode(passw));  //пароль
        std::string host="smtp.mail.ru"; // почтовый сервер
        boost::asio::io_service io;
        tcp::resolver resolver(io);
        tcp::resolver::query query(host, "25"); //default smtp port
        tcp::resolver::iterator endpoint_iterator = resolver.resolve(query);
        tcp::resolver::iterator end;
        tcp::socket sock(io);
        psock=&sock;
        boost::system::error_code error = boost::asio::error::host_not_found;
        while (error && endpoint_iterator != end){
            sock.close();
            sock.connect(*endpoint_iterator++, error);
        }
        if (error) throw boost::system::system_error(error);
        PrintResponse();
        SendRequest("ehlo myhost");
        PrintResponse();
        SendRequest("auth login");//выбираем авторизацию по login
        PrintResponse();
        SendRequest(encLogin);
        PrintResponse();
        SendRequest(encPassw);
        PrintResponse();
        SendRequest("mail from:<name1@mail.ru>");//ящик отправителя
        PrintResponse();
        SendRequest("rcpt to:<name2@yandex.ru>");// ящик получателя
        PrintResponse();
        SendRequest("data");
        PrintResponse();
        SendRequest("from:<name1@mail.ru>");  //это
        SendRequest("to:<name2@yandex.ru>"); //не
        SendRequest("subject: Some subject"); //спам
        SendRequest("Mime-Version: 1.0");
        SendRequest("Content-Type: multipart/mixed; boundary=bound");
        SendRequest("\r\n--bound");
        SendRequest("Content-type: text/plain; charset=windows-1251");
        SendRequest("Content-Transfer-Encoding: quoted-printable\r\n");
        SendRequest("It's letter's text\r\nThis letter has attaching file.");//текст письма
        SendRequest("\r\n--bound");
        SendRequest("Content-Type: text/plain; name=file.txt");
        SendRequest("Content-Transfer-Encoding: base64");
        SendRequest("Content-Disposition: attachment\r\n");
        SendRequest(encStr);
        SendRequest("\r\n--bound--\r\n.");
        PrintResponse();
        SendRequest("quit");
        PrintResponse();
        sock.close();
    }
    catch (std::exception& e){
        char buf[512];
        CharToOem(e.what(), buf);
        std::cout << "Exception: " << buf << "\n";
    }
    return 0;
}
У меня данный пример вылетает с ошибкой string iterator not dereferencable.
Как я понимаю, не может разыменовать. Это только у меня так или как? ))
0
igorrr37
1648 / 1276 / 133
Регистрация: 21.12.2010
Сообщений: 1,932
Записей в блоге: 7
25.02.2012, 19:09 #8
работает
0
Миниатюры
Отправка файла  
igorrr37
1648 / 1276 / 133
Регистрация: 21.12.2010
Сообщений: 1,932
Записей в блоге: 7
25.02.2012, 22:04 #9
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
для VS
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
#include <stdafx.h>
#include <iostream>
#include <ostream>
#include <string>
#include <fstream>
#include <bitset>
#include <iterator>
#include <boost/asio.hpp>
#include <windows.h> // CharToOem
typedef boost::asio::ip::tcp tcp;
 
boost::asio::streambuf reqBuf, respBuf;
std::ostream reqStream(&reqBuf);
tcp::socket* psock;
 
void SendRequest(std::string s){
    reqStream<<s<<"\r\n";
    boost::asio::write(*psock, reqBuf);
}
 
std::size_t PrintResponse(){
    std::size_t len=boost::asio::read_until(*psock, respBuf, "\r\n");
    std::cout<<&respBuf;
    return len;
}
 
std::string Encode(const std::string& s)
{
    std::size_t size = s.size();
    std::string ini("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"), out, bits;
    char buf[3];
    int la = 0, lb = 0;
    for(int j = 0; j < size; j += 3)
    {
        bits.clear();
        for(int i = 0; i < 3; ++i) buf[i] = '\0';
        buf[0] = s[j];
        if(j + 1 < size) buf[1] = s[j + 1];
        else la = 1;
        if(j + 2 < size) buf[2] = s[j + 2];
        else lb = 1;
        for(int k = 0; k < 3; ++k)
        {
            for(int l = 7; l >= 0; --l)
            {
                bits.push_back((buf[k] >> l) & 1 ? '1' : '0');
            }
        }
        //std::cout << bits << std::endl;
        for(int l = 0; l < 4; ++l)
        {
            int m = (l + 1) * 6 - 1, n = l * 6;
            std::bitset<6> b(std::string(&bits[n], &bits[m + 1]));
            //std::cout << b.to_ulong() << std::endl;
            if((l == 2 && la) || (l == 3 && lb))
            {
                out.push_back('=');
            }
            else out.push_back(ini[b.to_ulong()]);
        }
    }
    //std::cout << "out : " << out << std::endl;
    return out;
}
 
int main(){
    try{
        std::ifstream ifs("1.txt"); // прикреплённый файл
        if(!ifs){std::cerr<<"File not found\n"; return 1;}
        std::string str((std::istreambuf_iterator<char>(ifs)), std::istreambuf_iterator<char>()), encStr(Encode(str));
        ifs.close();
        // авторизация на ящик отправителя
        std::string login="name1", encLogin(Encode((login))); //имя
        std::string passw="passw1", encPassw(Encode(passw));  //пароль
        std::string host="smtp.mail.ru"; // почтовый сервер
        boost::asio::io_service io;
        tcp::resolver resolver(io);
        tcp::resolver::query query(host, "25"); //default smtp port
        tcp::resolver::iterator endpoint_iterator = resolver.resolve(query);
        tcp::resolver::iterator end;
        tcp::socket sock(io);
        psock=&sock;
        boost::system::error_code error = boost::asio::error::host_not_found;
        while (error && endpoint_iterator != end){
            sock.close();
            sock.connect(*endpoint_iterator++, error);
        }
        if (error) throw boost::system::system_error(error);
        PrintResponse();
        SendRequest("ehlo myhost");
        PrintResponse();
        SendRequest("auth login");//выбираем авторизацию по login
        PrintResponse();
        SendRequest(encLogin);
        PrintResponse();
        SendRequest(encPassw);
        PrintResponse();
        SendRequest("mail from:<name1@mail.ru>");//ящик отправителя
        PrintResponse();
        SendRequest("rcpt to:<name2@yandex.ru>");// ящик получателя
        PrintResponse();
        SendRequest("data");
        PrintResponse();
        SendRequest("from:<name1@mail.ru>");  //это
        SendRequest("to:<name2@yandex.ru>"); //не
        SendRequest("subject: Some subject"); //спам
        SendRequest("Mime-Version: 1.0");
        SendRequest("Content-Type: multipart/mixed; boundary=bound");
        SendRequest("\r\n--bound");
        SendRequest("Content-type: text/plain; charset=windows-1251");
        SendRequest("Content-Transfer-Encoding: quoted-printable\r\n");
        SendRequest("It's letter's text\r\nThis letter has attaching file.");//текст письма
        SendRequest("\r\n--bound");
        SendRequest("Content-Type: text/plain; name=file.txt");
        SendRequest("Content-Transfer-Encoding: base64");
        SendRequest("Content-Disposition: attachment\r\n");
        SendRequest(encStr);
        SendRequest("\r\n--bound--\r\n.");
        PrintResponse();
        SendRequest("quit");
        PrintResponse();
        sock.close();
        std::cin.sync();
        std::cin.get();
    }
    catch (std::exception& e){
        char buf[512];
        CharToOemA(e.what(), buf);
        std::cout << "Exception: " << buf << "\n";
    }
    return 0;
}
4
25.02.2012, 22:04
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.02.2012, 22:04
Привет! Вот еще темы с ответами:

Отправка е-мейла - C++
Хочу написать программу которая отправляет е-мейл(ввод е-мейла отправителя и ввод е-мейла получателя вводится в коде программы), прикрепив...

Отправка данных по IP - C++
Есть компьютер с белым айпи (внешним) Мне надо отправить на него сообщение (любые данные) Пользоваться можно консолью и стандартными...

Отправка На Почту - C++
Как отправить otpravka.txt файл на почту? Если можно пожалуйста с подробным описанием, я не знаю C++, знаю только VB.Net и Pascal, но...

Отправка GET и POST запросов - C++
Привет всем. Вот такой вопрос у меня: как на с++ 6 реализовать отправку GET, POST запросов. Хотелось бы увидеть пример самого простого...


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

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

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