
8 семестр / Готовая курсовая работа / ММиВА. Курсовая работа
.pdf
Имеется поддержка русскоязычных папок (рис. 5.17).
Рисунок 5.17. Поддерживаются русскоязычные папки Процесс удаления папки представлен на рис. 5.18-5.19.
Рисунок 5.18. Запрос на подтверждение удаления русскоязычной папки
31

Рисунок 5.19. Русскоязычная папка удалена
5.5. Работа с сообщениями
Процесс копирования сообщений представлен на рис. 5.20-5.21.
Рисунок 5.20. Выбор папки для копирования в нее выбранных двух сообщений
32

Рисунок 5.21. Сообщения скопированы
«[undefined]» означает дату скопированного сообщения. В случае оповещений безопасности дата на отправляется почтовым сервером.
Процесс удаления сообщений представлен на рис. 5.22-5.23.
Рисунок 5.22. Запрос на подтверждение удаления выбранных сообщений
33

Рисунок 5.23. Выбранные ранее сообщения удалены Процесс загрузки вложений представлен на рис. 5.24-5.26.
Рисунок 5.24. Выбор вложения для загрузки
34

Рисунок 5.25. Ввод имени файла для записи
Рисунок 5.26. Файл записан Статистика отображает размер всех сообщений с учетом вложений (рис.
5.27).
Рисунок 5.27. Отображение статистики в программе
35
ЗАКЛЮЧЕНИЕ
Программа выполняет все поставленные задачи: пользовательская настройка параметров для авторизации (IMAP и SMTP), отображение электронных сообщений (IMAP), загрузка и сохранение вложений на диск,
отправка сообщений с вложенными файлами (SMTP), добавление,
переименование/перемещение и удаление папок электронной почты (IMAP),
копирование и удаление сообщений (IMAP).
В ходе выполнения курсовой работы была освоена работа с основными средствами языка C++, библиотек Qt и Mailio, редактором Qt Creator.
СПИСОК ЛИТЕРАТУРЫ
[1]С. А. Коробов. Лекции по дисциплине «Математические методы и вычислительные алгоритмы современных систем связи».
[2]The Qt Company. Документация Qt 6 [Электронный ресурс] URL: https://doc.qt.io/qt-6/ (дата обращения: 04.03.2022)
[3]Страуструп, Бьярне. Программирование: принципы и практика использования C++, испр. изд. : Пер. с англ. — М. : ООО "И.Д. Вильямс",
2011. — 1248 с. : ил. — Парал. тит. англ. ISBN 978-5-8459-1705-8 (рус.).
36
ПРИЛОЖЕНИЕ
Сборочный файл «CMakeLists.txt»
1 cmake_minimum_required(VERSION 3.5)
2
3 project(MailClient VERSION 1.0 LANGUAGES CXX)
4
5 set(CMAKE_INCLUDE_CURRENT_DIR ON) 6
7set(CMAKE_AUTOUIC ON)
8set(CMAKE_AUTOMOC ON)
9set(CMAKE_AUTORCC ON)
11set(CMAKE_CXX_STANDARD 11)
12set(CMAKE_CXX_STANDARD_REQUIRED ON)
14find_package(QT NAMES Qt6 Qt5 COMPONENTS Widgets REQUIRED)
15find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Widgets REQUIRED)
17set(Boost_USE_MULTITHREADED ON)
18set(Boost_USE_STATIC_LIBS ON)
19find_package(Boost REQUIRED COMPONENTS regex date_time system)
21cmake_policy(SET CMP0074 NEW)
22find_package(Mailio REQUIRED)
24set(PROJECT_SOURCES
25tools.h
26imap_settings.cpp
27imap_settings.h
28smtp_settings.cpp
29smtp_settings.h
30main.cpp
31mainwindow.cpp
32mainwindow.h
33mainwindow.ui
34settings_dialog.cpp
35settings_dialog.h
36settings_dialog.ui
37send_message_dialog.cpp
38send_message_dialog.h
39send_message_dialog.ui
40resources.qrc
41)
42
43if(${QT_VERSION_MAJOR} GREATER_EQUAL 6)
44qt_add_executable(MailClient
45MANUAL_FINALIZATION
46${PROJECT_SOURCES}
47)
48# Define target properties for Android with Qt 6 as:
49# set_property(TARGET MailClient APPEND PROPERTY QT_ANDROID_PACKAGE_SOURCE_DIR
50 |
# |
${CMAKE_CURRENT_SOURCE_DIR}/android) |
51# For more information, see https://doc.qt.io/qt-6/qt-add-executable.html#target- creation
52else()
53if(ANDROID)
54add_library(MailClient SHARED
55 |
${PROJECT_SOURCES} |
56)
57# Define properties for Android with Qt 5 after find_package() calls as:
58# set(ANDROID_PACKAGE_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/android")
59else()
60add_executable(MailClient
61 |
${PROJECT_SOURCES} |
62)
63endif()
37
64 |
endif() |
65 |
|
66 |
target_link_libraries(MailClient PRIVATE Qt${QT_VERSION_MAJOR}::Widgets) |
67 |
|
68if(Boost_FOUND)
69target_include_directories(MailClient PUBLIC ${Boost_INCLUDE_DIRS})
70target_link_libraries(MailClient PUBLIC ${Boost_LIBRARIES})
71if(Mailio_FOUND)
72target_link_libraries(MailClient PUBLIC mailio ${CMAKE_THREAD_LIBS_INIT})
73endif()
74endif()
75
76find_package(OpenSSL REQUIRED)
77target_link_libraries(MailClient PRIVATE OpenSSL::SSL)
79set_target_properties(MailClient PROPERTIES
80MACOSX_BUNDLE_GUI_IDENTIFIER my.example.com
81MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION}
82MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
83MACOSX_BUNDLE TRUE
84WIN32_EXECUTABLE TRUE
85 |
) |
86 |
|
87if(QT_VERSION_MAJOR EQUAL 6)
88qt_finalize_executable(MailClient)
89endif()
38
Исходный код основных модулей
В сумме 2136 непустых строк кода.
Модуль «imap_settings.h»
1#ifndef IMAPSETTINGS_H
2#define IMAPSETTINGS_H
4#include <mailio/imap.hpp>
6class ImapSettings
7{
8public:
9ImapSettings();
10// setters
11void set_server_address(const std::string &server_address);
12void set_server_port(int server_port);
13void set_login(const std::string &login);
14void set_password(std::string password);
15void set_auth_method(const mailio::imaps::auth_method_t &auth_method);
16void set_autoupdate(bool autoupdate);
17void set_autoupdate_interval(int interval);
18// getters
19std::string get_server_address() const;
20int get_server_port() const;
21std::string get_login() const;
22std::string get_password() const;
23mailio::imaps::auth_method_t get_auth_method() const;
24bool get_autoupdate() const;
25int get_autoupdate_interval() const;
26
27private:
28std::string server_address, login, password;
29mailio::imaps::auth_method_t auth_method;
30int server_port, autoupdate_interval;
31bool autoupdate_enable;
32};
33
34 #endif // IMAPSETTINGS_H
Модуль «imap_settings.cpp»
1 #include "imap_settings.h"
2
3 ImapSettings::ImapSettings()
4{
5}
7// setters
8void ImapSettings::set_server_address(const std::string &server_address)
9{
10this->server_address = server_address;
11}
12void ImapSettings::set_server_port(int server_port)
13{
14this->server_port = server_port;
15}
16void ImapSettings::set_login(const std::string &login)
17{
18this->login = login;
19}
20void ImapSettings::set_password(std::string password)
21{
22for (size_t i = 0, n = password.length(); i < n; ++i)
23{
24password[i] ^= 0x01011001 ^ i;
39
25}
26this->password = password;
27}
28void ImapSettings::set_auth_method(const mailio::imaps::auth_method_t &auth_method)
29{
30this->auth_method = auth_method;
31}
32void ImapSettings::set_autoupdate(bool autoupdate)
33{
34this->autoupdate_enable = autoupdate;
35}
36void ImapSettings::set_autoupdate_interval(int interval)
37{
38this->autoupdate_interval = interval;
39}
40
41// getters
42std::string ImapSettings::get_server_address() const
43{
44return this->server_address;
45}
46int ImapSettings::get_server_port() const
47{
48return this->server_port;
49}
50std::string ImapSettings::get_login() const
51{
52return this->login;
53}
54std::string ImapSettings::get_password() const
55{
56std::string decoded_password(password);
57for (size_t i = 0, n = decoded_password.length(); i < n; ++i)
58{
59decoded_password[i] ^= 0x01011001 ^ i;
60}
61return decoded_password;
62}
63mailio::imaps::auth_method_t ImapSettings::get_auth_method() const
64{
65return this->auth_method;
66}
67bool ImapSettings::get_autoupdate() const
68{
69return this->autoupdate_enable;
70}
71int ImapSettings::get_autoupdate_interval() const
72{
73return this->autoupdate_interval;
74}
Модуль «smtp_settings.h»
1#ifndef SMTPSETTINGS_H
2#define SMTPSETTINGS_H
4#include <mailio/smtp.hpp>
6class SmtpSettings
7{
8public:
9SmtpSettings();
10// setters
11void set_server_address(const std::string &server_address);
12void set_server_port(int server_port);
13void set_login(const std::string &login);
14void set_password(std::string password);
15void set_name(const std::string &name);
16void set_auth_method(const mailio::smtps::auth_method_t &auth_method);
40