Python

Отправка писем с помощью Python

Отправка писем с помощью Python
Отправка, проверка и ответ на электронные письма - это трудоемкая задача, особенно когда вы делаете это для большого количества людей или клиентов, когда вам просто нужно изменить имя получателя, адрес, возраст и другие мелочи. Для вас было бы очень сложной задачей написать программу, которая могла бы обрабатывать все типы ваших личных / деловых писем, но все же вы можете автоматизировать многие вещи в этом отношении, что в конечном итоге сэкономит вам много времени.

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

Несколько слов о SMTP

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

Например, у вас есть учетная запись GMAIL, и вы хотите отправить электронное письмо своему другу с его учетной записи YAHOO. Вы пишете электронное письмо и нажимаете отправить, но внутренний процесс немного сложен, и чтобы понять этот процесс, вам сначала нужно понять SMTP. Ваш почтовый клиент SMTP сначала отправляет ПРИВЕТ (или же EHLO) на сервер GMAIL, вы можете сказать, что эта команда или заголовок эквивалентны Хозяин заголовок в протоколе HTTP и используется для идентификации сервера по доменному имени. После HELO или EHLO клиент аутентифицируется на сервере с указанным именем пользователя и паролем, используя AUTH команда. Затем он указывает адрес электронной почты отправителя и получателя, а затем тело сообщения и отправляет электронное письмо на сервер 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.эло ()
(250, smtp.Gmail.com к вашим услугам, [103.255.4.246] \ nSIZE35882577 \ n8BITMIME \ nSTARTTLS \
nENHANCEDSTATUSCODES \ nPIPELINING \ nCHUNKING \ nSMTPUTF8 ')
// Порт 587 означает, что мы используем зашифрованное соединение TLS, поэтому запустите зашифрованный TLS
общение с помощью starttls (), чтобы наши учетные данные и сообщения не попадали под обнюхивание
>>> mailobj.starttls ()
(220, '2.0.0 Готов начать TLS ')
// войдите в свою учетную запись GMAIL, используя адрес электронной почты и пароль
>>> mailobj.логин ('[электронная почта защищена]', 's3cr3t_p4ssw0rd')
(235, '2.7.0 Принято ')
// указываем адреса электронной почты отправителя и получателя и содержимое электронной почты
>>> mailobj.sendmail ('[электронная почта защищена]', '[электронная почта защищена]', 'Тема:
Привет мир! \ n Привет, мир! это моя первая электронная почта hello world на Python ')

// закрываем соединение с GMAIL сервером
>>> mailobj.покидать()
(221, '2.0.0 замыкающее соединение b6sm4519863lfi.72 - гсмтп ')

В приведенном выше примере программы замените данный контент своим собственным. Если вы не являетесь пользователем GMAIL, вы можете использовать почтовый сервер вашего провайдера. Вот список доменных имен и портов некоторых распространенных почтовых провайдеров.

Имя Доменное имя сервера Порт
Gmail smtp.Gmail.ком 587
Outlook / Hotmail smtp-почта.мировоззрение.ком 587
Почта Яху smtp.Почта.Yahoo.ком 587
Verizon smtp.Verizon.сеть 465
Comcast smtp.comcast.сеть 587

Несколько слов об IMAP

Итак, мы только что изучили, что SMTP используется для отправки электронной почты, но что такое IMAP (протокол обмена сообщениями доступа в Интернет) для? SMTP нельзя использовать для поиска и получения писем с сервера, для этой цели используется протокол IMAP или POP3.

IMAPCLIENT, IMAPLIB и PYZMAIL

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

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

[электронная почта защищена]: ~ $ sudo pip install imapclient
[электронная почта защищена]: ~ $ sudo pip install pyzmail

Получение писем с почтового сервера

Теперь мы узнаем, как искать и загружать электронную почту с почтового сервера с помощью imapclient. Мы будем использовать imapclient для поиска и загрузки писем с сервера, затем мы будем использовать pyzmail для анализа этого необработанного контента. Давайте

// импортируем библиотеку imapclient
>>> импортировать imapclient
// Подключение к серверу IMAP GMAIL
>>> obj = imapclient.IMAPClient ('imap.Gmail.com ', ssl = True)
// Войдите в свою учетную запись электронной почты, используя свои учетные данные
>>> obj.логин ('[электронная почта защищена]', 's3cr4tp4ss')
"[электронная почта защищена] аутентифицирована (успешно)"
// Выбираем папку сообщений для чтения i.е ВХОДЯЩИЕ, ЧЕРНОВЫ, ОТПРАВЛЕННЫЕ письма
>>> obj.select_folder ('INBOX', только для чтения = True)
'EXISTS': 830, 'PERMANENTFLAGS': (), 'HIGHESTMODSEQ': 112999, 'UIDNEXT': 931,
'ФЛАГИ': ('\\ Отвечено', '\\ Помечено', '\\ Черновик', '\\ Удалено', '\\ Просмотрено',
'$ NotPhishing', '$ Phishing'), 'UIDVALIDITY': 1, 'ТОЛЬКО ДЛЯ ЧТЕНИЯ': ["], 'НЕДАВНИЕ': 0
// Ищите сообщения в почтовом ящике или примените фильтр, фильтр ниже покажет
вам письма, полученные после 25 октября 2019 г
>>> mail_ids = obj.search (['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.fetch ([919], ['ТЕЛО []', 'ФЛАГИ'])
// Теперь содержимое переменной raw_mail находится в необработанном формате, оно не может отображаться в
экран напрямую, поэтому нам понадобится синтаксический анализатор, чтобы проанализировать этот контент для удобного вывода
>>> импортировать pyzmail
>>> сообщение = pyzmail.PyzMessage.фабрика (raw_mail [919] ['BODY []'])
// Теперь электронная почта анализируется и сохраняется в переменной сообщения, чтобы получить тему
электронное письмо, используйте функцию get_subject
>>> сообщение.get_subject ()
u'Одесяте свои навыки в этот Хэллоуин со скидкой 25% '
// Точно так же вы можете увидеть данные об отправителе
>>> сообщение.get_addresses ('от')
[(u'Usama Azad ',' [email protected] ')]
>>> сообщение.get_addresses ('в')
[(u '[электронная почта защищена]', '[электронная почта защищена]')]
// Чтобы получить текст сообщения электронной почты, введите
>>> сообщение.text_part.get_payload ().декодировать (сообщение.text_part.кодировка)
u ”Привет! Получите 25% фиксированной ставки на наших курсах премиум-класса »

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

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

Удаление электронной почты с сервера IMAP

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

// Чтобы удалить электронное письмо, вы должны установить значение «Ложь» только для чтения, чтобы получить доступ на запись к вашему
электронные письма
>>> obj.select_folder ('INBOX', readonly = False)
>>> mail_ids = obj.search (['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-на-mac /

Составьте собственное напоминание о дне рождения

У вас в ближайшие месяцы дни рождения ваших друзей, и вы хотите пожелать им их дни рождения. Но у вас в офисе много работы и есть вероятность, что вы забудете их пожелать. Таким образом, эта задача может быть выполнена автоматически с помощью python. Ниже приведен код для выполнения этой задачи.

// импортируем модули
импортный ре
// модуль os используется для выполнения задач операционной системы i.электронный доступ к каталогам
импорт ОС
дата и время импорта
импортировать smtplib
 
// определение функции, которая будет отправлять электронные письма
def send_mail (reciever_mail_address, имя):
sender_mail_address = "[электронная почта защищена]"
passwd = "senderPasswd"
// подключение к серверу gmail с доменным именем и номером порта
obj = smtplib.SMTP ('smtp.Gmail.com ', 587)
объект.эло ()
объект.starttls ()
// вход в свою учетную запись Gmail
объект.логин (sender_mail_address, passwd)
// отправка почты на 'reciever_mail_address'.
объект.sendmail (sender_mail_address, reciever_mail_address, "Тема: Письмо с пожеланиями дня рождения \ n \ n HappyBirthday" + имя)
// завершаем соединение
объект.покидать()
// Основной корпус
// переходим в каталог, в котором находится файл с данными
Операционные системы.chdir ("путь_к_файлу_данных_данных")
а 1:
// получаем дату и время настоящего момента
сегодня = дата и время.дата и время.Cегодня()
today = 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 в режиме чтения
birthday_file = open ('birthday_file', 'r')
// сохраняем все строки файла birthday_file в списке строк
lines = birthday_file.readlines ()
// закрытие объекта birthday_file
birthday_file.Закрыть()
// чтение каждой строки с помощью цикла for
для строки в строках:
// делаем регулярное выражение, чтобы найти дату в 'birthday_file'
dateEx = re.скомпилировать (r "\ d 4 - \ d 2 - \ d 2")
findDate = dateEx.поиск (строка)
date = findDate.группа()
// получаем birthday_month и birthday_day из файла
birthday_month = дата [5: 7]
birthday_day = дата [8:10]
// создание регулярного выражения для поиска адреса электронной почты из файла birthday_file
mailEx = re.compile (r "\ w * @ \ w *.com ")
findMail = mailEx.поиск (строка)
reciever_mail = findMail.группа()
// делаем регулярное выражение, чтобы найти имя человека
nameEx = re.compile (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, имя)

Теперь мы создаем файл birthday_file, в котором сохраняем имена, адреса электронной почты и дату их рождения. Это простой текстовый файл, который выглядит так.

Объяснение

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

В этом скрипте мы определяем функцию send_mail, которая отправляет почту на адрес reciever_mail_address, имя которого - name. Оба аргумента передаются функции из основного тела сообщения. В основной части скрипта мы увидим, как мы находим 'reciever_mail_address' и 'name'.

Отправка электронной почты с использованием smtplib была объяснена выше, поэтому вы можете ее прочитать, и здесь это обсуждаться не будет.

В основном тексте мы переходим в каталог, в котором мы сохранили файл birthday_file, используя os.chdir () '. Затем у нас есть цикл while, который всегда истинен, поэтому он будет постоянно проверять день рождения. Теперь мы получаем текущую дату и время и сохраняем их в переменной «сегодня». Это похоже на это.

2019-11-01 16:19:07.144925

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

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

После этого мы извлечем дату рождения, адрес электронной почты и имя человека с помощью модуля RE. Поскольку мы написали дату в следующем формате

ГГГГ-ММ-ДД

Поэтому мы создадим регулярное выражение dateEx, которое найдет этот формат в строке.

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

Выше команды найдите строку, в которой есть '4 цифры', за которыми следует '-', затем '2 цифры', за которыми следуют '-' и '2 цифры'. Это даст нам дату рождения человека, поэтому мы извлечем дату рождения и месяц рождения из этого выражения.

Точно так же мы найдем адрес электронной почты, используя регулярные выражения. После этого мы сравним 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 каждый раз, когда ваша система включена.

Как использовать AutoKey для автоматизации игр под Linux
AutoKey - это утилита автоматизации рабочего стола для Linux и X11, запрограммированная на Python 3, GTK и Qt. Используя его функции сценариев и MACRO...
Как показать счетчик FPS в играх для Linux
Игры для Linux получили серьезный толчок, когда Valve объявила о поддержке Linux для клиента Steam и своих игр в 2012 году. С тех пор многие игры AAA ...
Как загрузить и играть в Sid Meier's Civilization VI в Linux
Введение в игру Civilization 6 - это современный подход к классической концепции, представленной в серии игр Age of Empires. Идея была довольно просто...