Python

Надсилання електронних листів за допомогою Python

Надсилання електронних листів за допомогою Python
Надсилання, перевірка та відповідь на електронні листи є трудомістким завданням, особливо коли ви робите це для великої кількості людей або клієнтів, де вам просто потрібно змінити ім’я, адресу, вік та інші дрібниці. Для вас було б дуже складним завданням написати програму, яка могла б обробляти всі типи ваших особистих / ділових електронних листів, але все одно ви можете автоматизувати багато речей у цьому відношенні, що з часом заощадить вам багато часу.

Наприклад, ви хочете надіслати своїм клієнтам нагадування про залишки рахунків, і всі дані, пов’язані з клієнтами, такі як їх номери телефонів, адреса, вік тощо, ви маєте в аркуші Excel або базі даних, тоді замість того, щоб робити це вручну, ви можете написати проста програма на Python, яка автоматично робить це за вас. У цьому підручнику ми дізнаємося, як працює протокол електронної пошти та як ви можете автоматизувати процес, щоб заощадити ваш дорогоцінний час.

Слово про SMTP

Простий протокол пересилання пошти (SMTP) є комп’ютеризованим еквівалентом вашої поштової послуги. Це протокол, який працює на прикладному рівні мережі TCP / IP. Це стандартний протокол надсилання та отримання електронних листів через Інтернет. Процес пересилання пошти складається з серверів електронної пошти та клієнтів, які надсилають та отримують електронні листи один одному.

Наприклад, у вас є обліковий запис GMAIL, і ви хочете надіслати електронного листа своєму другові на його рахунок YAHOO. Ви пишете електронний лист і натискаєте "Надіслати", але процес внутрішньої розробки трохи складний, і щоб зрозуміти цей процес, спочатку потрібно зрозуміти SMTP. Спершу надсилає поштовий клієнт SMTP Привіт (або EHLO) на сервер GMAIL ви можете сказати, що ця команда або заголовок еквівалентна Ведучий заголовок у протоколі HTTP і використовується для ідентифікації сервера за допомогою доменного імені. Після HELO або EHLO клієнт автентифікується на сервері за допомогою вказаного імені користувача та пароля АВТ команди. Потім він вказує адресу електронної пошти відправника та одержувача, а потім тіло повідомлення та надсилає електронне повідомлення на сервер GMAIL. Сервер GMAIL спочатку підтвердить, чи існує адреса електронної пошти одержувача на YAHOO чи ні, тоді він надішле повідомлення на сервер YAHOO, де одержувач зможе отримати свої електронні листи з.

SMTPLIB

SMTPLIB - це бібліотека python, яка може використовуватися як SMTP-клієнт, як і ваш GMAIL, YAHOO, Thunderbird або будь-який інший поштовий клієнт, і може використовуватися для надсилання електронних листів. Ми можемо виконувати всі завдання за допомогою клієнта SMTPLIB, які ми можемо робити з тими, хто має графічний інтерфейс користувача.

Він поставляється за замовчуванням у Python, якщо у вас його немає, тоді ви можете встановити за допомогою наступної команди.

[захищено електронною поштою]: ~ $ pip install smtplib

АБО в Python3

[захищено електронною поштою]: ~ $ pip install smtplib

Написання першої електронної пошти за допомогою Python

У цьому підручнику я буду використовувати обліковий запис GMAIL як відправника, а також використовувати консоль Python, тому мені буде простіше пояснювати кожен рядок коду поетапно. Для початку нам потрібно надати GMAIL доступ до менш безпечних програм.

Тож увійдіть у свій акаунт GMAIL, а потім перейдіть до налаштувань облікового запису.

Тепер переконайтеся, що доступ для менш безпечних програм увімкнено.

Тепер відкрийте свою консоль python і почніть писати свою першу електронну пошту за допомогою Python

[захищено електронною поштою]: ~ $ python
Python 2.7.16 (за замовчуванням, 7 жовтня 2019 р., 17:36:04)
[GCC 8.3.0] на linux2

Введіть "довідка", "авторське право", "кредити" або "ліцензія" для отримання додаткової інформації.

// імпорт бібліотеки SMTP
>>> імпортувати smtplib
// підключаємося до сервера GMAIL із доменним іменем та номером порту (це налаштування відрізняється для
будь-якого постачальника послуг електронної пошти, подивіться на таблицю, наведену нижче)
>>> mailobj = smtplib.SMTP ('smtp.gmail.com ', 587)
// привітатися з сервером
>>> mailobj.ehlo ()
(250, 'smtp.gmail.com до ваших послуг, [103.255.4.246] \ nРОЗМІР35882577 \ n8BITMIME \ nЗАПУСК \
nПОВШИНЕНІСТАТУСКОДИ \ nПІЛОПРОВОД \ nЧАНКІНГ \ nSMTPUTF8 ')
// Порт 587 означає, що ми використовуємо зашифроване з'єднання TLS, тому почніть зашифроване TLS
спілкування за допомогою starttls (), щоб наші облікові дані та повідомлення не обнюхувались
>>> mailobj.starttls ()
(220, '2.0.0 Готовий до запуску TLS ')
// увійдіть у свій акаунт GMAIL за допомогою електронної пошти та пароля
>>> mailobj.логін ('[захищений електронною поштою]', 's3cr3t_p4ssw0rd')
(235, '2.7.0 Прийнято ')
// вказуємо адресу електронної пошти відправника та одержувача та вміст електронної пошти
>>> mailobj.sendmail ('[захищений електронною поштою]', '[захищений електронною поштою]', 'Тема:
Привіт Світ! \ n Привіт світ! це моя перша світова електронна пошта на Python ')

// тісне підключення до сервера GMAIL
>>> mailobj.вийти ()
(221, '2.0.0 замикання з'єднання b6sm4519863lfi.72 - gsmtp ')

У наведеній вище зразковій програмі замініть поданий вміст своїм. Якщо ви не користувач GMAIL, тоді ви можете використовувати сервер електронної пошти свого постачальника. Ось список доменних імен та портів деяких поширених постачальників послуг пошти.

Ім'я Доменне ім’я сервера Порт
Gmail smtp.gmail.ком 587
Outlook / Hotmail smtp-пошта.світогляд.ком 587
Пошта YAHOO smtp.поштою.Yahoo.ком 587
Verizon smtp.веризон.чистий 465
Comcast smtp.comcast.чистий 587

Деякі слова про IMAP

Отже, ми щойно вивчили, що SMTP використовується для надсилання електронних листів, але що таке IMAP (протокол обміну повідомленнями в Інтернеті)? SMTP не можна використовувати для пошуку та отримання електронних листів із сервера, для цього використовується протокол IMAP або POP3.

ІМПАКЛІЄНТ, ІМАПЛІБ та ПИЗМАЙЛ

У Python є дві основні бібліотеки, які можна використовувати як клієнт IMAP для пошуку, отримання та видалення електронних листів з поштового сервера. Python має за замовчуванням imaplib бібліотека, але інша зовнішня бібліотека imapclient є більш ефективним і простим у використанні. У цьому підручнику ми використаємо imapclient для отримання електронних листів з поштового сервера.

Проблема з imapclient полягає в тому, що він отримує електронні листи з поштового сервера у необробленому форматі. Отже, нам знадобиться пизмаїл бібліотека як парсер для зручного виводу. Щоб встановити обидві бібліотеки, введіть

[захищено електронною поштою]: ~ $ sudo pip встановити imapclient
[захищено електронною поштою]: ~ $ sudo pip встановити pyzmail

Отримання електронної пошти з поштового сервера

Тепер ми дізнаємося, як шукати та завантажувати електронну пошту з поштового сервера за допомогою imapclient. Ми будемо використовувати imapclient для пошуку та завантаження електронних листів із сервера, а потім будемо використовувати синтаксичний аналіз цього необробленого вмісту. Давайте

// імпорт бібліотеки imapclient
>>> імпортувати imapclient
// Підключення до IMAP-сервера GMAIL
>>> obj = imapclient.IMAPClient ('imap.gmail.com ', ssl = True)
// Увійдіть у свій обліковий запис електронної пошти, використовуючи свої облікові дані
>>> obj.логін ('[захищений електронною поштою]', 's3cr4tp4ss')
'[електронна пошта захищена] автентифікована (успішно)'
// Виберіть папку повідомлень для читання i.e ВХІДНІ, СКОРОЧНІ, НАДІСЛАНІ листи
>>> obj.select_folder ('INBOX', тільки для читання = True)
'ІСНУЄ': 830, 'ПОСТОЯННІ ФЛАГИ': (), 'HIGHESTMODSEQ': 112999, 'UIDNEXT': 931,
'ПРАПОРИ': ('\\ відповіли', '\\ позначено', '\\ чернетка', '\\ видалено', '\\ бачено',
'$ NotPhishing', '$ Phishing'), 'UIDVALIDITY': 1, 'ТОЛЬКО ДЛЯ ЧИТАННЯ': ["]," ОСТАННІ ": 0
// Шукайте у своїх повідомленнях у INBOX або застосовуйте фільтр, показаний нижче фільтр
ви отримали повідомлення після 25 жовтня 2019 року
>>> mail_ids = obj.пошук (['SINCE', '25 -Oct-2019 '])
>>> ідентифікатори_пошти
[919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930]
// Список “id_id” містить список ідентифікаторів електронної пошти, отриманих з 25 жовтня 2019 року,
Ви можете завантажити електронне повідомлення, використовуючи функцію imapclient fetch.
>>> raw_mail = obj.отримати ([919], ['BODY []', 'FLAGS'])
// Тепер вміст у змінній raw_mail знаходиться у вихідному форматі, його неможливо відобразити у
екран безпосередньо, тому нам потрібен парсер, щоб проаналізувати цей вміст для зручного виведення
>>> імпортувати pyzmail
>>> повідомлення = pyzmail.PyzMessage.фабрика (raw_mail [919] ['BODY []'])
// Тепер електронна пошта аналізується і зберігається у змінній повідомлення, щоб отримати тему
електронної пошти, використовуйте функцію get_subject
>>> повідомлення.get_subject ()
u'Одягніть свої навички цього Хеллоуїна зі знижкою 25% '
// Так само ви можете побачити деталі відправника
>>> повідомлення.get_addresses ('від')
[(u'Usama Azad ',' [email protected] ')]
>>> повідомлення.get_addresses ('to')
[(u '[захищений електронною поштою]', '[захищений електронною поштою]')]
// Щоб отримати тіло електронного листа, введіть
>>> повідомлення.text_part.get_payload ().декодувати (повідомлення.text_part.charset)
u ”Привіт! Насолоджуйтесь рівно 25% на наших преміум-курсах "

Якщо у вас є обліковий запис у іншого постачальника послуг електронної пошти, крім GMAIL, ви можете увійти до їх сервера IMAP. Ось список доменних імен IMAP деяких відомих поштових провайдерів.

Постачальник Доменне ім'я для сервера IMAP
YAHOO imap.поштою.Yahoo.ком
Hotmail / Outlook imap-пошта.світогляд.ком
Verizon вхідні.веризон.чистий
Comcast imap.comcast.чистий
AT&T imap.поштою.атт.чистий

Видалення електронної пошти з сервера IMAP

Як і пошук та отримання електронних листів із сервера, ви також можете видаляти електронні листи зі свого поштового сервера, використовуючи їх uid. Просто виконайте наведені кроки

// Щоб видалити електронний лист, вам потрібно перетворити лише читання на "False", щоб отримати доступ до запису на ваш
електронні листи
>>> obj.select_folder ('INBOX', тільки для читання = False)
>>> mail_ids = obj.пошук (['SINCE', '25 -Oct-2019 '])
>>> ідентифікатори_пошти
[919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930]
 
// Введіть електронну адресу електронної пошти або список електронної пошти після запуску команди нижче,
ваша електронна пошта зникне з INBOX.
>>> obj.видалити повідомлення (919)
919: ('\\ Бачив', '\\ Видалено')
 
// Ця команда назавжди видалить ваші електронні листи з поштового сервера
>>> obj.expunge ()
('Успіх', [])

https: // techtopz.com / build-a-день-нагадування-додаток-в-python-на-mac /

Складання власного нагадування про день народження

У вас є дні народження ваших друзів у найближчі місяці, і ви хочете побажати їм їх днів народження. Але у вас багато роботи в офісі, і є ймовірність, що ви забудете їх побажати. Отже, це завдання може бути автоматично виконано за допомогою python. Далі наведено код для виконання цього завдання.

// імпорт модулів
імпортувати повторно
// модуль os використовується для виконання завдань операційної системи i.e доступ до директорій
імпорт ос
імпорт дата і час
імпортувати smtplib
 
// визначення функції, яка буде надсилати електронні листи
def send_mail (адреса адреси_пошти, ім'я):
sender_mail_address = "[електронна пошта захищена]"
passwd = "senderPasswd"
// підключення до gmail-сервера із доменним іменем та номером порту
obj = smtplib.SMTP ('smtp.gmail.com ', 587)
obj.ehlo ()
obj.starttls ()
// вхід у свій обліковий запис gmail
obj.логін (sender_mail_address, passwd)
// надсилання пошти на 'reciever_mail_address'.
obj.sendmail (sender_mail_address, reciever_mail_address, "Subject: BirthDay Wishing Mail \ n \ n HappyBirthday" + ім'я)
// кінцевий зв’язок
obj.вийти ()
// Головні сили
// перехід до каталогу, в якому присутній файл, що містить дані
ос.chdir ("файл_файлу_до_народження_даних")
в той час як 1:
// отримання дати та часу поточного моменту
сьогодні = дата і час.дата, час.сьогодні ()
сьогодні = str (сьогодні)
// отримання поточного року, місяця, дня, години, хвилини та секунди
поточний_рік = сьогодні [0: 4]
current_month = сьогодні [5: 7]
current_day = сьогодні [8:10]
current_hour = сьогодні [11:13]
current_minute = сьогодні [14:16]
current_sec = сьогодні [17:19]
// відкриття файлу дня народження в об'єкті 'birthday_file' в режимі читання
birthday_file = відкрито ('file_day', 'r')
// збереження всіх рядків файлу 'birthday_file' у списку рядків
рядки = файл_ день народження.лінії читання ()
// закриття об'єкта "файл_іменинника"
файл_ день народження.закрити ()
// читання кожного рядка за допомогою циклу for
для рядка в рядках:
// створення регулярного виразу для пошуку дати у файлі `` файл_іменинника ''
dateEx = re.компілювати (r "\ d 4 - \ d 2 - \ d 2")
findDate = dateEx.пошук (рядок)
date = findDate.група ()
// отримання дня народження_місяця та дня народження з файлу
день народження_місяць = дата [5: 7]
day_day = дата [8:10]
// створення регулярного виразу для пошуку поштової адреси з файлу імя_річчя
mailEx = re.компілювати (r "\ w * @ \ w *.com ")
findMail = mailEx.пошук (рядок)
reciever_mail = findMail.група ()
// створення регулярного виразу для пошуку імені людини
nameEx = re.компілювати (r "\ w *")
findName = nameEx.пошук (рядок)
name = findName.група ()
// перевірка, чи наближається день народження когось чи ні
якщо поточний_місяць == день народження_місяць і = поточний_день == день народження:
// відправлення пошти точно о 08:00
якщо current_hour == '08' і current_minute == '00' і current_sec == '00':
// виклик функції 'send_mail'
send_mail (reciever_mail, ім'я)

Тепер ми робимо «файл_іменинника», в якому зберігаємо імена, адреси електронної пошти та дату їх народження. Це простий текстовий файл і виглядає так.

Пояснення

Ми прочитаємо цей файл за допомогою сценарію python, перевіримо, чий день народження наближається, і побажаємо їм. Перш за все ми імпортуємо деякі модулі. Модуль DATETIME має функції, які надають нам поточну дату та час та багато іншого. Але ми будемо використовувати це лише для пошуку поточної дати та часу. Модуль SMTPLIB використовується для надсилання пошти, про що було пояснено вище. Модуль RE має функції, які використовуються для пошуку регулярного виразу з рядка.

У цьому сценарії ми визначаємо функцію 'send_mail', яка надсилає пошту на адресу 'reciever_mail_address', ім'я якого - 'name'. Обидва аргументи передаються функції з основного тіла msg. В основній частині сценарію ми побачимо, як ми знаходимо 'reciever_mail_address' та 'name'.

Надсилання електронної пошти за допомогою smtplib пояснювалося вище, тому ви можете прочитати його, і це не буде обговорюватися тут.

В основному тексті ми переходимо до каталогу, де ми зберегли файл 'birthday_file', використовуючи 'os.chdir () '. Тоді ми маємо цикл while, який завжди відповідає дійсності, тому він буде перевіряти день народження постійно. Тепер ми отримуємо поточну дату та час і зберігаємо їх у змінній 'сьогодні'. Це виглядає так.

2019-11-01 16:19:07.144925

Ми отримаємо рік, місяць, день, годину, хвилини та секунди, використовуючи індекси цих величин. Після цього ми відкриємо файл імя_річчя в об'єкті 'файл_річчя_ дня' в режимі читання, тому ми можемо його лише прочитати. Тепер ми збережемо всі рядки цього файлу у списку рядків. 'файл_іменинника.readlines () 'збереже кожен рядок у списку' рядків '. Після цього ми закриємо файл birthday_file, використовуючи 'birthday_file.функція close () '.

Тепер ми будемо читати кожен рядок по одному, використовуючи цикл for. У кожному рядку у файлі 'birthday_file' доступні лише дані однієї людини, тому ми одночасно читаємо лише дані однієї особи в цьому циклі.

Після цього ми витягнемо дату народження, адресу електронної пошти та ім’я особи за допомогою модуля RE. Як ми писали дату у наступному форматі

РРРР-ММ-ДД

Отже, ми створимо регулярний вираз 'dateEx', який знайде цей формат у рядку.

повторно.компілювати (r ”\ d 4 - \ d 2 - \ d 2”)

Над командою знайдіть рядок, який має "4 цифри", після чого "-", потім "2 цифри", після чого - - "та" 2 цифри. Це дасть нам дату народження людини, тому ми витягнемо день народження і місяць народження з цього виразу.

Подібним чином ми знайдемо електронну адресу за допомогою регулярних виразів. Після цього ми порівняємо день народження_місяць і поточний_місяць, день народження_ та поточний_день. Якщо ці умови будуть задоволені, ми надішлемо електронний лист із днем ​​народження за допомогою функції 'send_mail' точно в '08: 00 '.

Запуск сценарію автоматично через Cronjob

Тепер ми переконаємося, що цей сценарій python запускається кожного разу. Для цього ми додамо це завдання до crontab. Crontab, в Linux, використовується для автоматичного виконання завдань. Що нам потрібно зробити, це просто додати завдання до crontab. Для цього виконайте наведені кроки.

  1. Відкрийте crontab, щоб додати завдання у свій термінал, використовуючи наступну команду
[захищено електронною поштою]: ~ $ crontab -e
  1. В кінці цього файлу введіть наступну команду без #
@reboot python path_to_the_script

Наведені вище команди дозволять вашій системі запускати скрипт python кожного разу, коли ви перезавантажуєте систему. Таким чином, ваша система буде запускати скрипт python кожного разу, коли ваша система ввімкнена.

How to Install and Play Doom on Linux
Introduction to Doom The Doom Series originated in the 90s after the release of the original Doom. It was an instant hit and from that time onwards th...
Vulkan for Linux Users
With each new generation of graphics cards, we see game developers push the limits of graphical fidelity and come one step closer to photorealism. But...
OpenTTD vs Simutrans
Creating your own transport simulation can be fun, relaxing and extremely enticing. That's why you need to make sure that you try out as many games as...