PyPI — это официальный репозиторий программного обеспечения для сторонних приложений на языке программирования Python.
Несколько дней назад появилась новость о том, что репозиторий пакетов Python PyPI (индекс пакетов Python) уже предоставляет возможность использовать новый безопасный метод публикации пакетов, что избавляет от необходимости хранить жесткие пароли и токены доступа к API во внешних системах (например, в GitHub Actions).
Новый метод аутентификации имеет название«Надежные издатели» и предназначен для решения проблемы выпуска вредоносных обновлений в результате взлома внешних систем и попадания предопределенных паролей или токенов в чужие руки.
Python с его обширной экосистемой библиотек позволяет легко создать скрипт для отправки электронных писем с использованием простого протокола передачи почты (SMTP).
В этой статье мы рассмотрим процесс создания скрипта Python для обмена сообщениями на основе сервера SMTP, что позволит вам с легкостью отправлять электронные письма.
1. Введение в SMTP и Python
SMTP – это стандартный интернет-протокол для передачи электронной почты.
Он определяет процесс, посредством которого сообщения электронной почты отправляются с одного почтового сервера на другой.
Библиотеки Python smtplib и email предоставляют простой в использовании интерфейс для работы с SMTP-серверами и создания почтовых сообщений.
2. Установка Python и необходимых библиотек
Чтобы начать работу, убедитесь, что в вашей системе установлен Python 3.6 или более поздней версии.
Вы можете скачать последнюю версию с официального сайта Python.
Необходимые библиотеки, smtplib и email, являются частью стандартной библиотеки Python и не требуют дополнительной установки.
Чтобы отправлять электронные письма через SMTP-сервер, необходимо указать следующие данные:
адрес SMTP-сервера
Порт SMTP-сервера
Учетные данные для аутентификации (адрес электронной почты и пароль)
Популярные почтовые службы, такие как Gmail, Yahoo и Outlook, имеют адреса и порты своих SMTP-серверов в открытом доступе.
Для Gmail адрес сервера – smtp.gmail.com, а порт – 587.
Примечание: Некоторые поставщики услуг электронной почты могут потребовать включить “Менее безопасные приложения” или создать “Пароль приложения” для аутентификации. Для получения дополнительной информации обратитесь к документации поставщика услуг электронной почты.
4. Создание простого электронной почты
Имея на руках информацию о SMTP-сервере, мы можем теперь создать Python скрипт для отправки электронной почты.
Вот пример:
importsmtplibfromemail.mime.text importMIMETextfromemail.mime.multipart importMIMEMultipart# Определение настроек электронной почтыsmtp_server = 'smtp.gmail.com'smtp_port = 587email_address = 'you@gmail.com'email_password = 'your-password'# Создание письмаsubject = 'Hello, World!'body = 'This is a test email sent from a Python script.'msg = MIMEMultipart()msg['From'] = email_addressmsg['To'] = 'recipient@example.com'msg['Subject'] = subjectmsg.attach(MIMEText(body,'plain'))# Отправка emailwithsmtplib.SMTP(smtp_server,smtp_port)asserver:server.starttls()server.login(email_address,email_password)server.send_message(msg)print('Email sent successfully!')
Замените email_address, email_password и recipient@example.com на ваш реальный адрес электронной почты, пароль и адрес электронной почты получателя соответственно.
5. Дополнение скрипта электронной почты вложениями и HTML-содержимым
Чтобы добавить вложения или HTML-содержимое в письмо, вы можете изменить скрипта следующим образом:
from email.mime.application import MIMEApplication
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.utils import COMMASPACE
import os
# Определение настроек электронной почты
smtp_server = 'smtp.gmail.com'
smtp_port = 587
email_address = 'you@gmail.com'
email_password = 'your-password'
# Создание сообщения электронной почты с содержимым HTML
subject = 'Hello, World!'
body = ('<h1>This is a test email sent from a Python script.</h1>'
'<p>It contains <strong>HTML content</strong> and an <em>attachment</em>.</p>')
msg = MIMEMultipart()
msg['From'] = email_address
msg['To'] = 'recipient@example.com'
msg['Subject'] = subject
msg.attach(MIMEText(body, 'html'))
# Add an attachment
attachment_path = 'example_file.pdf'
attachment_filename = os.path.basename(attachment_path)
with open(attachment_path, 'rb') as file:
attachment = MIMEApplication(file.read(), _subtype='pdf')
attachment.add_header('Content-Disposition', 'attachment', filename=attachment_filename)
msg.attach(attachment)
# Отправка почты
with smtplib.SMTP(smtp_server, smtp_port) as server:
server.starttls()
server.login(email_address, email_password)
server.send_message(msg)
print('Email sent successfully!')
В этом примере мы изменили переменную `body`, чтобы она содержала HTML-содержимое, и использовали `MIMEText(body, ‘html’)` для прикрепления HTML-содержимого к письму.
Чтобы добавить вложение, мы прочитали файл из указанного `attachment_path`, создали объект `MIMEApplication` и прикрепили его к письму.
Примечание: Не забудьте заменить `attachment_path` на фактический путь к файлу, который вы хотите прикрепить.
Заключение
В этой статье мы рассмотрели, как создать сценарий на Python для отправки электронных писем с помощью обмена сообщениями на основе SMTP-сервера.
Мы начали с базового сценария, научились добавлять HTML-содержимое и добавлять вложения в наши электронные письма.
Эти знания можно применять в различных скриптах, например, для отправки автоматизированных отчетов, уведомлений или информационных бюллетеней.
Как всегда, не забывайте придерживаться лучших практик и уважать конфиденциальность и предпочтения получателей при программной отправке электронных писем.
Данная книга позволяет уже с первых шагов создавать свои программы на языке Python. Акцент сделан на написании компьютерных игр и небольших приложений.
Для удобства начинающих пользователей в книге есть краткий вводный курс в основы языка, который поможет лучше ориентироваться на практике. По ходу изложения даются все необходимые пояснения, приводят-ся примеры, а все листинги (коды программ) сопровождаются подробными комментариями.
Книга будет полезна как начинающим программистам, так и всем, кто хочет быстро и эффективно научиться писать программы на Python.
Скачать Python. Создаем программы и игры [3-е издание]
В этой статье я разбираю Множества в Python 3. Вы узнаете, какими свойствами обладают множества и как можно с ними работать.
Свойства множеств
Я уже писал про последовательности и множества в Python 3. Множество — это неупорядоченная совокупность объектов, в которой не может быть дубликатов. Множество можно изменять, добавляя и удаляя из него объекты.
Объявить множество можно с помощью фигурных скобок, но в отличии от словарей не нужно указывать ключи. Создание множества и получение некоторых свойств множества показаны ниже:
### Код
my_set = {1, 2, 3, 4, 5} # создание множества
print(type(my_set)) # тип
print(len(my_set)) # длина
print(my_set)
### Исполнение
<class 'set'>
5
{1, 2, 3, 4, 5}
Так как множество не упорядочены, то: обращение по индексу, срезы, конкатенация и повторение — здесь не работают.
Множества часто используются для двух целей:
для удаления дубликатов;
для проверки, входит ли элемент в множество (поиск в множестве занимает очень мало времени даже для очень больших множеств).
Работа с множествами
Добавить элемент в множество можно с помощью метода add():
### Код
my_set = {1, 2, 3, 4, 5}
my_set.add(6)
print(my_set)
### Исполнение
{1, 2, 3, 4, 5, 6}
Можно одно множество соединить с другим с помощью метода update():
Проверка на то, входит ли элемент в множество, осуществляется с помощью оператора in:
my_set = {15, 85, 12, 55, 95, 87, 33}
print(95 in my_set) # True
print(11 in my_set) # False
Так как множества должны вычислять хеш-код для каждого элемента, в них могут храниться только хешируемые элементы. В языке Python изменяемые элементы (список, словарь) не являются хешируемыми. То есть, такое множество нельзя создать:
my_set = {[1, 2, 3], ["один", "два"]}
А такое можно:
my_set = {(1, 2, 3), ("один", "два")}
Итог
В этой статье я немного рассказал про множества (set) в Python 3. Дополнительно, про некоторые особенности множеств можете почитать в официальной документации.