Добавил:
СПбГУТ * ИКСС * Программная инженерия Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

8 семестр / Готовая курсовая работа / ММиВА. Курсовая работа

.pdf
Скачиваний:
31
Добавлен:
09.03.2022
Размер:
2.04 Mб
Скачать

Имеется поддержка русскоязычных папок (рис. 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

Соседние файлы в папке Готовая курсовая работа