Форум программистов, компьютерный форум, киберфорум
Python
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/103: Рейтинг темы: голосов - 103, средняя оценка - 4.62
7 / 7 / 0
Регистрация: 15.02.2018
Сообщений: 56

Почта

14.04.2018, 15:03. Показов 21584. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Реализуйте программу, имитирующую работу почтовых серверов и клиентов.

Клиенты должны иметь возможность принимать и отправлять письма, которые хранятся на серверах.

Вам предстоит спроектировать программу самостоятельно. Чтобы задать направление мысли, давайте обсудим примерный интерфейс почтового клиента.

client = MailClient(server, user) — подключение к учётной записи пользователя user на сервере server.

client.receive_mail() — получение почты. Когда почта получена, она удаляется с сервера. Что конкретно возвращает этот метод, решите самостоятельно.

client.send_mail(server1, user1, message) — послать сообщение message пользователю user1 на сервере server1.

Ваша программа должна быть не просто набором классов, но и предоставлять готовый интерфейс, по которому преподаватель (а не автоматическая система тестирования) будет оценивать функциональность и корректность вашей программы.

Программа должна позволять из своего интерфейса определять список серверов, на которые можно отправлять письма. При попытке отправить письмо на сервер, которого нет в списке, программа должна сообщать пользователю, что не может этого сделать.
1
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
14.04.2018, 15:03
Ответы с готовыми решениями:

Электронная почта
Пятилетний Митя узнал, что такое электронная почта и решил придумать адрес для своего почтового ящика. Он составил адрес из карточек с...

Электронная почта
Пятилетний Митя узнал, что такое электронная почта и решил придумать адрес для своего почтового ящика. Он составил адрес из карточек с...

Корпоративная почта
В одной известной парагвайской компании, называть которую мы не будем, потому что она не заплатила нам за рекламу, сотрудникам положена...

2
69 / 61 / 11
Регистрация: 08.04.2019
Сообщений: 117
21.04.2019, 01:55
Python
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
from sys import exit
 
 
class MailClient:
    def __init__(self, server, user):
        self.s = server
        self.u = user
 
    d = dict()
 
    def f(self):
        return self.d
 
    def list(self):
        self.d[self.s] = self.u
 
 
class Receive(MailClient):
 
    def __init__(self):
        super().f()
 
    def Mail(self):
        s = input('На какой сервер зайдем? ')
        if s in self.d.keys():
            if type(self.d[s]) == tuple:
                print(f'Получено письмо от пользователя {self.d[s][0]}: {self.d[s][1]}')
            else:
                print('В папке "Вся почта" пока пусто')
        else:
            print('К сожалению, такого сервера не существует ¯\_(ツ)_/¯')
 
 
class Send(MailClient):
 
    def __init__(self):
        super().f()
 
    def get_key(self, d, value):
        for k, v in d.items():
            if v == value:
                return k
 
    def send(self):
        un = input('Кому напишем? ')
        if un in self.d.values() and len(self.d[self.get_key(self.d, un)]) > 1:
            tom = input('Введи текст сообщения: ')
            for i in self.d.values():
                if i == un:
                    self.d[self.get_key(self.d, un)] = (i, tom)
            print(f'Сообщение успешно отправлено пользователю {un}!')
        else:
            print('Такого пользователя не существует ¯\_(ツ)_/¯')
 
 
def main():
    while True:
        print('Привет! Ты попал(а) на почтовый сервис AmEl!')
        serv = input('На какой сервер зайдем? ')
        name = input('Как тебя звать? ')
        print(f'{name[0].upper() + name[1:].lower()}, добро пожаловать!')
        m = MailClient(serv, name)
        m.list()
        way = input('Что хотим сделать? ')
        if way.lower().strip() == 'отправить сообщение' or way.lower().strip() == 'написать сообщение'\
                or way.lower().strip() == 'написать':
            s = Send()
            s.send()
        elif way.lower().strip() == 'просмотреть ящик' or way.lower().strip() == 'посмотреть сообщения' \
                or way.lower().strip() == 'прочитать сообщения' or way.lower().strip() == 'почитать' \
                or way.lower().strip() == 'посмотреть почту':
            r = Receive()
            r.Mail()
        else:
            print('Ой! Ошибочка вышла...')
 
        print('/-----------------------------------------\ ')
        s = '|"exit" - выйти                           |\n|"return" - вернуться на домашнюю страницу|'
        print(s)
        print('\-----------------------------------------/ ')
        a = input()
        if a == 'exit':
            exit()
        elif a == 'return':
            pass
        else:
            print('Ой! Ошибочка вышла...')
            exit()
 
 
main()
5
8 / 7 / 1
Регистрация: 27.10.2021
Сообщений: 14
10.04.2022, 15:20
Python
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
import time
 
 
class MailClient:
    def __init__(self):
        self.GLOBAL_DATA = {'Global': {}, 'South America': {}, 'North America': {},
                            'Europe': {}, 'Asia': {}, 'Australia': {}, 'Other': {}}
 
    def register(self, server):
        login = input('Введите логин: ')
        if login.lower() == 'отменить команду':
            print('Команда отменена')
            return False
        password = input('Введите пароль: ')
        if password.lower() == 'отменить команду':
            print('Команда отменена')
            return False
        while login in self.GLOBAL_DATA[server].keys():
            print(f'Пользователь на сервере {server} с логином {login} уже есть, придумайте другой')
            login = input('Введите логин: ')
            if login.lower() == 'отменить команду':
                print('Команда отменена')
                return False
            password = input('Введите пароль: ')
            if password.lower() == 'отменить команду':
                print('Команда отменена')
                return False
        self.GLOBAL_DATA[server][login] = {}
        self.GLOBAL_DATA[server][login]['password'] = password
        self.GLOBAL_DATA[server][login]['mail'] = []
        print('Вы успешно зарегистрировались!')
        return login, password
        
    def read_mails(self, login, server):
        if len(self.GLOBAL_DATA[server][login]['mail']) == 0:
            print('У вас нет новых сообщений')
        else: 
            for i in self.GLOBAL_DATA[server][login]['mail']:
                print(f'''Сообщение от пользователя {i[0]}:
{i[1]}''')
                time.sleep(3)
                print('-----------------------------------')
            print('Все сообщения просмотрены')
            self.GLOBAL_DATA[server][login]['mail'] = []
        
    def write_mail(self, login, server):
        who = input('Кому хотите написать письмо?')
        if who.lower() == 'отменить команду':
            print('Команда отменена')
            return False
        while who not in self.GLOBAL_DATA[server]:
            print(f'Пользователя на сервере {server} с логином {who} не существует, повторите ввод')
            who = input()
            if who.lower() == 'отменить команду':
                print('Команда отменена')
                return False
        text = input('''Введите текст сообщения:
''')
        self.GLOBAL_DATA[server][who]['mail'].append([login, text])
        print(f'Сообщение пользователю {who} успешно отправлено')
        return True
 
    
def main():
    now_server = False
    now_login = False
    now_password = False
    print('''Ты попал на самый профессиональный почтовый сервис!
Если ты здесь - ты точно особенный.''')
    print('''Список команд:
1)Стандартные:
    Войти на сервер
    Выйти с сервера
    Войти в аккаунт
    Выйти из аккаунта
    Создать аккаунт
    Проверить почту
    Написать письмо
    Отменить команду(когда одна из команд запущена)
    Выйти с сервиса
        ''')
    print('Правило: нельзя устанавливать имя сервера, логин или пароль на: отменить команду')
    MAIN_COMAND = MailClient()
    while True:
        comand = input('Введите команду: ').lower().strip()
        if comand == 'войти на сервер':
            print('Список доступных серверов:')
            print(', '.join(MAIN_COMAND.GLOBAL_DATA.keys()))
            server = input('Введите имя нужного сервера: ')
            while server not in MAIN_COMAND.GLOBAL_DATA:
                print('Такого сервера не существует, повторите ввод')
                server = input()
                if server.lower() == 'отменить команду':
                    print('Команда отменена')
                    break
            if server in MAIN_COMAND.GLOBAL_DATA:
                print(f'Вы успешно вошли на сервер {server}')
                now_server = server
        elif comand == 'выйти с сервера':
            if now_server is False:
                print('Вы еще не на сервере')
            else:
                print(f'Вы вышли с сервера {now_server}')
                now_server = False
                now_login = False
                now_password = False
        elif comand == 'создать аккаунт':
            if now_server is not False:
                sys_answer = MAIN_COMAND.register(now_server)
                if sys_answer is not False:
                    now_login, now_password = sys_answer
            else:
                print('Вы не вошли на сервер')
        elif comand == 'войти в аккаунт':
            if now_server is False:
                print('Вы не зашли на сервер')
            else:
                login = input('Введите логин: ')
                if login.lower() == 'отменить команду':
                    print('Команда отменена')
                    continue
                password = input('Введите пароль: ')
                if password.lower() == 'отменить команду':
                    print('Команда отменена')
                    continue
                else:
                    while True:
                        if login not in MAIN_COMAND.GLOBAL_DATA[server].keys():
                            print('Произошла ошибка! Повторите ввод')
                            login = input('Введите логин: ')
                            if login.lower() == 'отменить команду':
                                print('Команда отменена')
                                continue
                            password = input('Введите пароль: ')
                            if password.lower() == 'отменить команду':
                                print('Команда отменена')
                                continue
                        elif MAIN_COMAND.GLOBAL_DATA[server][login]['password'] != password:
                            print('Произошла ошибка! Повторите ввод')
                            login = input('Введите логин: ')
                            if login.lower() == 'отменить команду':
                                print('Команда отменена')
                                continue
                            password = input('Введите пароль: ')
                            if password.lower() == 'отменить команду':
                                print('Команда отменена')
                                continue
                        else:
                            now_login = login
                            now_password = password
                            print('Вы успешно вошли!')
                            break
        elif comand == 'выйти из аккаунта':
            print('Вы вышли из аккаунта')
            now_login = False
        elif comand == 'написать письмо':
            if now_server is False or now_login is False:
                print('Для того, чтобы написать письмо нужно войти на сервер и в аккаунт')
            else:
                sys_answer = MAIN_COMAND.write_mail(now_login, now_server)
        elif comand == 'проверить почту':
            if now_server is False or now_login is False:
                print('Для того, чтобы проверить почту нужно войти на сервер и в аккаунт')
            else:
                sys_answer = MAIN_COMAND.read_mails(now_login, now_server)
        elif comand == 'выйти с сервиса':
            print('Выход...')
            break
        else:
            print('Команда не распознана, повторите ввод')
 
 
main()
Хотелось сделать что то поинтереснее и сделал систему регистрации
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
10.04.2022, 15:20
Помогаю со студенческими работами здесь

Корпоративная почта
Помогите, пожалуйста, решить. Компания "Пампарам" регистрирует сотрудникам корпоративные почты и хочет оставить им логины, которыми...

Подскажите ошибку Электронная почта
Электронная почта Вводится N строк. Требуется определить, сколько в этих строках суммарно записано адресов электронной почты. Считаем,...

Входящая электронная почта во Flask
Здравствуйте. У меня возник вопрос. Можно ли как-то получать входящую электронную почту при помощи сервера на Flask. Честно, не очень...

Нужно исправить программу(Почта)
Помогите пожалуйста исправить ошибку. Вот условие задачи: Реализуйте программу, имитирующую работу почтовых серверов и клиентов. ...

Почта не отправляется, хотя интернет есть, браузеры работают, почта принимается
Добрый день, уважаемые товарищи. Проблема, прошу совета. Интернет есть, все бразуры работают, почта принимается. Но почта не...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru