Python

Изпращане на имейли с Python

Изпращане на имейли с Python
Изпращането, проверката и отговорът на имейли е отнемаща време задача, особено когато го правите за голям брой хора или клиенти, при които просто трябва да промените името, адреса, възрастта и други малки неща на получателя. За вас би било много трудна задача да напишете програма, която да може да обработва всички видове ваши лични / бизнес имейли, но все пак можете да автоматизирате много неща в това отношение, което в крайна сметка ще ви спести много време.

Например искате да изпратите напомняне на вашите клиенти за оставащите им сметки и имате всички свързани с клиентите данни, като техните телефонни номера, адрес, възраст и т.н. в Excel лист или база данни, след което вместо да го правите ръчно, можете да напишете проста програма в Python, която автоматично да направи това вместо вас. В този урок ще научим как работи имейл протоколът и как можете да автоматизирате процеса, за да спестите ценното си време.

Дума за SMTP

Простият протокол за прехвърляне на поща (SMTP) е компютъризиран еквивалент на вашата пощенска услуга. Това е протокол, който работи на приложния слой на TCP / IP мрежа. Това е стандартен протокол за изпращане и получаване на имейли през интернет. Процесът на прехвърляне на поща се състои от имейл сървъри и клиенти, които си изпращат и получават имейли един към друг.

Например имате акаунт в GMAIL и искате да изпратите имейл до приятеля си в неговия акаунт в YAHOO. Пишете имейл и натискате изпращане, но бекенд процесът е малко сложен и за да разберете този процес, първо ще трябва да разберете SMTP. Вашият SMTP имейл клиент първо изпраща ЗДРАВЕЙТЕ (или EHLO) към GMAIL сървъра, можете да кажете, че тази команда или заглавка е еквивалентна на Водещ заглавка в HTTP протокол и се използва за идентифициране на сървъра, използвайки име на домейн. След HELO или EHLO, клиентът се удостоверява със сървъра с дадено потребителско име и парола АВТ команда. След това той посочва имейл адреса на подателя и получателя и след това тялото на съобщението и изпраща имейл до GMAIL сървъра. GMAIL сървърът първо ще потвърди, че дали имейл адресът на получателя в YAHOO съществува или не, след това ще изпрати имейла до YAHOO Server, където получателят може да извлече имейлите си от.

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 \ nSTARTTLS \
n ПОВИШЕНИ СТАТУТКОДИ \ nПИПЕЛИНИНГ \ nCHUNKING \ 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.com 587
Outlook / Hotmail smtp-поща.перспектива.com 587
YAHOO поща smtp.поща.yahoo.com 587
Verizon smtp.веризон.нето 465
Comcast smtp.comcast.нето 587

Няколко думи за IMAP

Така че току-що проучихме, че SMTP се използва за изпращане на имейли, но какво е IMAP (протокол за съобщения за достъп до Интернет) за? SMTP не може да се използва за търсене и получаване на имейли от сървъра, за тази цел се използва протокол IMAP или POP3.

IMAPCLIENT, IMAPLIB и PYZMAIL

В Python има две основни библиотеки, които могат да се използват като IMAP клиент за намиране, извличане и изтриване на имейли от пощенския сървър. Python има по подразбиране имаплиб библиотека, но друга външна библиотека имапклиент е по-ефективен и лесен за използване. В този урок ще използваме имапклиент за извличане на имейли от пощенския сървър.

Проблемът с имапклиент е, че извлича имейли от пощенския сървър в суров формат. И така, ще ни трябва pyzmail библиотека като парсер за лесен за ползване изход. За да инсталирате двете библиотеки, напишете

[имейл защитен]: ~ $ sudo pip инсталира imapclient
[имейл защитен]: ~ $ sudo pip install pyzmail

Получаване на имейлите ви от пощенския сървър

Сега ще научим как да търсите и изтегляте имейли от пощенския сървър с помощта на imapclient. Ще използваме imapclient за търсене и изтегляне на имейли от сървъра, след което ще използваме pyzmail, за да анализираме това сурово съдържание. Нека да

// импортиране на imapclient библиотека
>>> импортиране на imapclient
// Свържете се с IMAP сървъра на GMAIL
>>> obj = imapclient.IMAPClient ('imap.gmail.com ', ssl = Вярно)
// Влезте в имейл акаунта си, използвайки вашите идентификационни данни
>>> obj.вход ('[имейл защитен]', 's3cr4tp4ss')
„[имейл защитен] удостоверен (Успех)“
// Изберете папка за съобщения, която да прочетете.e INBOX, DRAFTS, SENT mails
>>> 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 '])
>>> mail_ids
[919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930]
// Списъкът „mail_ids“ съдържа списък с имейл идентификатори, получени от 25 октомври 2019 г,
можете да изтеглите имейл с помощта на функцията за извличане на imapclient.
>>> 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 ',' [имейл защитен] ')]
>>> съобщение.get_addresses ('до')
[(u '[имейл защитен]', '[имейл защитен]')]
// За да получите тялото на имейла, напишете
>>> съобщение.text_part.get_payload ().декодиране (съобщение.text_part.charset)
u ”Здравей! Насладете се на 25% от нашите премиум курсове ”

Ако имате акаунт в друг доставчик на имейл услуги, различен от GMAIL, можете да влезете в техния IMAP сървър. Ето списъка с имена на IMAP домейни на някои известни доставчици на поща.

Доставчик Име на домейн за IMAP сървър
YAHOO imap.поща.yahoo.com
Hotmail / Outlook imap-поща.перспектива.com
Verizon входящи.веризон.нето
Comcast imap.comcast.нето
AT&T imap.поща.att.нето

Изтриване на вашия имейл от IMAP сървър

Подобно на търсенето и извличането на имейли от сървъра, можете също да изтривате имейли от вашия пощенски сървър, използвайки техния uid. Просто следвайте дадените стъпки

// За да изтриете имейл, трябва да включите само за четене „False“, за да получите достъп за запис до вашия
имейли
>>> obj.select_folder ('INBOX', само за четене = False)
>>> mail_ids = obj.търсене (['SINCE', '25 -Oct-2019 '])
>>> mail_ids
[919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930]
 
// Предоставете имейл uid или списък с имейл uid, след като стартирате командата по-долу,
вашият имейл ще изчезне от INBOX.
>>> obj.delete_messages (919)
919: ('\\ Видяно', '\\ Изтрито')
 
// Тази команда ще изтрие завинаги вашите имейли от пощенския сървър
>>> obj.премахване ()
(„Успех“, [])

https: // techtopz.com / build-a-birthday-напомняне-приложение-в-python-on-mac /

Изготвяне на собствено напомняне за рожден ден

Имате рождени дни на вашите приятели през следващите месеци и искате да им пожелаете рождените им дни. Но имате много работа в офиса си и има вероятност да забравите да им пожелаете. Така че тази задача може да бъде изпълнена автоматично с помощта на python. Следва кодът за изпълнение на тази задача.

// импортиране на модули
внос re
// os модул се използва за изпълнение на задачи на операционната система i.e достъп до директориите
внос os
импортиране на дата и час
внос smtplib
 
// дефиниране на функция, която ще изпраща имейли
def send_mail (reciever_mail_address, name):
sender_mail_address = "[имейл защитен]"
passwd = "senderPasswd"
// свързване към gmail сървър с име на домейн и номер на порт
obj = smtplib.SMTP ('smtp.gmail.com ', 587)
обект.ehlo ()
обект.starttls ()
// влизане във вашия gmail акаунт
обект.вход (sender_mail_address, passwd)
// изпращане на поща до 'reciever_mail_address'.
обект.sendmail (sender_mail_address, reciever_mail_address, "Subject: BirthDay Wishing Mail \ n \ n Честит рожден ден" + име)
// завършваща връзка
обект.изход ()
// Основно тяло
// отиваме в директорията, в която присъства файл, съдържащ данни
операционна система.chdir ("path_to_birthday_data_file")
докато 1:
// получаване на дата и час на настоящия момент
днес = дата и час.Време за среща.днес ()
днес = str (днес)
// получаване на текущата година, месец, ден, час, минута и секунда
current_year = днес [0: 4]
current_month = днес [5: 7]
current_day = днес [8:10]
current_hour = днес [11:13]
current_minute = днес [14:16]
current_sec = днес [17:19]
// отваряне на файл за рожден ден в обект 'birthday_file' в режим на четене
файл за рожден ден = отворен ('файл за рожден ден', 'r')
// запазване на всички редове от 'birthday_file' в списък с редове
редове = файл за рожден ден.прочетени линии ()
// затваряне на обект 'birthday_file'
файл за рожден ден.близо()
// четене на всеки ред с помощта на цикъл for
за ред в редове:
// създаване на регулярен израз за намиране на дата в 'file_day'
dateEx = re.компилиране (r "\ d 4 - \ d 2 - \ d 2")
findDate = dateEx.търсене (ред)
date = findDate.група ()
// получаване на рожден ден_месец и рожден ден_от файл
month_month = дата [5: 7]
day_day = дата [8:10]
// създаване на регулярен израз за намиране на пощенски адрес от birthday_file
mailEx = re.компилиране (r "\ w * @ \ w *.com ")
findMail = mailEx.търсене (ред)
reciever_mail = findMail.група ()
// създаване на регулярен израз за намиране на името на човека
nameEx = re.компилиране (r "\ w *")
findName = nameEx.търсене (ред)
name = findName.група ()
// проверка дали идва рожден ден на някого или не
ако current_month == birthday_month и = current_day == birthday_day:
// изпращане на поща в точно 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 loop“, който винаги е верен, така че ще проверява рождения ден непрекъснато. Сега получаваме текущата дата и час и ги записваме в променливата „днес“. Изглежда така.

2019-11-01 16:19:07.144925

Ще извлечем година, месец, ден, час, минути и секунди, използвайки индекси на тези количества. След това ще отворим файл за рожден ден в обект „файл за рожден ден“ в режим на четене, така че можем да го прочетем само. Сега ще запазим всички редове от този файл в списък с редове. „файл за рожден ден.readlines () 'ще запази всеки ред в списъка' редове '. След това ще затворим файл за рожден ден, като използваме файл за рожден ден.функция close () '.

Сега ще прочетем всеки ред един по един, използвайки for цикъл. Във всеки ред са налични само данни за един човек в 'birthday_file', така че четем само данни за един човек наведнъж в този цикъл.

След това ще извлечем дата на раждане, имейл адрес и име на лице, използващо RE модул. Както сме записали датата в следния формат

ГГГГ-ММ-ДД

Така че ще направим регулярен израз 'dateEx', който намира този формат в реда.

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

Над командата намерете низ, който има „4 цифри“, последван от „-“, след това „2 цифри“, последван от „-“ и „2 цифри“. Това ще ни даде датата на раждане на човека, така че ще извлечем Birth_day и Birth_month от този израз.

По същия начин ще намерим имейл адрес, използвайки регулярни изрази. След това ще сравним birthday_month и current_month и birthday_day и current_day. Ако тези условия са изпълнени, ние ще изпратим имейла на рождения ден с помощта на функцията 'send_mail' точно в '08: 00 '.

Стартиране на скрипт автоматично чрез Cronjob

Сега ще се уверим, че този python скрипт се изпълнява всеки път. За целта ще добавим тази задача към crontab. Crontab в Linux се използва за автоматично изпълнение на задачи. Това, което трябва да направим, е просто да добавим задачата към crontab. За целта следвайте дадените стъпки.

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

Горните команди ще позволят на вашата система да стартира скрипта на python всеки път, когато рестартирате системата си. По този начин вашата система ще изпълнява python скрипт всеки път, когато системата ви е включена.

Как да покажа брояч на FPS в игрите на Linux
Linux игрите получиха голям тласък, когато Valve обяви поддръжка на Linux за Steam клиент и техните игри през 2012 г. Оттогава много AAA и независими ...
Как да изтеглите и пуснете Civilization VI на Сид Майер на Linux
Въведение в играта Civilization 6 е модерен поглед върху класическата концепция, въведена в поредицата от игрите Age of Empires. Идеята беше доста про...
Как да инсталирате и играете Doom на Linux
Въведение в Doom Серията Doom възниква през 90-те години след пускането на оригиналния Doom. Това беше незабавен хит и от този момент нататък серията ...