Как написать почтовый клиент на Python и Qt

Python

Воз­можно, ты уже уме­ешь писать прос­тые сце­нарии на Python, но про­бовал ли ты делать гра­фичес­кие прог­раммы с нас­тоящи­ми работа­ющи­ми кно­поч­ками? Поверь, это тоже край­не увле­катель­но и не очень слож­но! Сегод­ня мы поп­ракти­куем­ся в этом, написав на Python и Qt прос­той поч­товик, который будет отправ­лять пись­ма с атта­чами.

Как написать почтовик на Python и Qt

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

Создание интерфейса почтовика

Для начала давай соз­дадим интерфейс будуще­го при­ложе­ния. Для это­го вос­поль­зуем­ся фрей­мвор­ком для раз­работ­ки кросс‑плат­формен­ного ПО — Qt 5. Пот­ребу­ется ска­чать его и уста­новить.

От­кро­ем Qt Designer и в появив­шемся окне выбора пос­тавим галоч­ку на пун­кте Main Window.

Почтовый клиент на Python и Qt. Создание нового окна
Почтовый клиент на Python и Qt. Создание нового окна.

За­тем соз­дадим окно при помощи готовых инс­тру­мен­тов, а имен­но Label для тек­ста, Line Edit для строк вво­да, Text Edit для поля вво­да тек­ста, а так­же Push Button для кно­пок. Раз­ложить всё можешь так, как тебе пон­равит­ся, глав­ное — пос­тавить все эле­мен­ты, показан­ные на кар­тинке, и запом­нить их номера. Даль­ше будет понят­но, зачем это.

Почтовый клиент на Python и Qt. Ин­терфейс кли­ента
Почтовый клиент на Python и Qt. Ин­терфейс кли­ента

Не забудь в поле вво­да пароля пос­тавить параметр echoMode = Password, что­бы скрыть пароль, а так­же вык­лючить поля, которые могут быть активны толь­ко пос­ле пра­виль­ного вво­да дан­ных. Что­бы это сде­лать, необ­ходимо в поле enabled убрать галоч­ку.

Пос­ле завер­шения работы мое окно выг­лядит как на скрин­шоте.

Почтовый клиент на Qt и Python

Сох­раняй документ, и получишь файл с рас­ширени­ем ui, который и будет фай­лом интерфей­са. Я наз­вал его Main.ui. Теперь к коду!

Пер­вым делом импорти­руем две биб­лиоте­ки. Они нуж­ны для работы с Qt 5.

Те­перь про­писы­ваем класс интерфей­са и в нем все фун­кции. У нас будет фун­кция вво­да ( login), фун­кция прик­репле­ния фай­ла ( attach_sth) и фун­кция отправ­ки сооб­щений ( send_mail). Так­же в осно­ве основ лежит фун­кция вызова гра­фичес­кого интерфей­са с демонс­тра­цией окна и акти­ваци­ей трех кно­пок.

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

Код уже мож­но запус­тить! Ты уви­дишь окно с нарисо­ван­ным тобой интерфей­сом, но в нем пока что ничего не будет работать. Конеч­но, мы же еще не опре­дели­ли, как это дол­жно про­исхо­дить.

Создание основной части почтовика

Итак, задача — написать дви­жок. Прис­тупим.

Фун­кция вхо­да. В ней мы дела­ем две вещи: логиним­ся и соз­даем перемен­ную msg (перемен­ная с содер­жани­ем пись­ма).

EHLO — это гла­гол рас­ширен­ного про­токо­ла переда­чи прос­тых сооб­щений (ESMTP), опре­делен­ный в RFC 5321. Сер­веры ESMTP могут объ­являть о сво­их воз­можнос­тях во вре­мя началь­ного под­клю­чения. Сре­ди них — мак­сималь­ный допус­тимый раз­мер сооб­щения и под­держи­ваемые методы про­вер­ки под­линнос­ти. HELO — это более ста­рая коман­да SMTP, опре­делен­ная в RFC 821. Боль­шинс­тво SMTP-сер­веров под­держи­вают ESMTP и EHLO. Если сер­вер не под­держи­вает EHLO, вмес­то него мож­но исполь­зовать HELO.

Да­лее идет фун­кция прик­репле­ния вло­жений:

Соз­дание той самой перемен­ной msg:

Весь код можешь пос­мотреть на GitHub.

Настройки почты

Я выб­рал поч­ту Gmail, пос­коль­ку в нем мож­но вык­лючить защиту от сто­рон­них при­ложе­ний. Мно­гие дру­гие поч­товики ста­вят зап­рет на нее, а здесь дос­таточ­но перей­ти по ссыл­ке и выс­тавить раз­решение.

Вклю­чение отправ­ки с нашего почтового кли­ента
Вклю­чение отправ­ки с нашего почтового кли­ента

Ад­рес SMTP для Gmail — smtp.gmail.com, порт — 587. Для дру­гих поч­товых кли­ентов мож­но пос­мотреть эти дан­ные, прос­то загуг­лив их наз­вание со сло­вом SMTP.

Заключение

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

На вся­кий слу­чай пре­дуп­реждаю: можешь даже не пытать­ся исполь­зовать этот код без изме­нений в незакон­ных целях. Мы здесь никак не скры­ваем свой IP, никак не шиф­руем фай­лы и не обхо­дим анти­виру­сы.

РЕКОМЕНДУЕМ:
Система распознавания лиц на Python

За­то ты можешь исполь­зовать этот при­мер, что­бы добавить к сво­им при­ложе­ниям удоб­ный гра­фичес­кий интерфейс.

Понравилась статья? Поделиться с друзьями:
Добавить комментарий