Архив метки: Python

PyPI теперь позволяет публиковать пакеты без привязки к паролям и токенам

PyPI

PyPI — это официальный репозиторий программного обеспечения для сторонних приложений на языке программирования Python.

Несколько дней назад появилась новость о том, что репозиторий пакетов Python PyPI (индекс пакетов Python) уже предоставляет возможность использовать новый безопасный метод публикации пакетов, что избавляет от необходимости хранить жесткие пароли и токены доступа к API во внешних системах (например, в GitHub Actions).

Новый метод аутентификации имеет название«Надежные издатели» и предназначен для решения проблемы выпуска вредоносных обновлений в результате взлома внешних систем и попадания предопределенных паролей или токенов в чужие руки.



Читать

🐍 Python скрипт для отправки электронного письма через SMTP-сервер

Python с его обширной экосистемой библиотек позволяет легко создать скрипт для отправки электронных писем с использованием простого протокола передачи почты (SMTP).

В этой статье мы рассмотрим процесс создания скрипта Python для обмена сообщениями на основе сервера SMTP, что позволит вам с легкостью отправлять электронные письма.

1. Введение в SMTP и Python

SMTP – это стандартный интернет-протокол для передачи электронной почты.

Он определяет процесс, посредством которого сообщения электронной почты отправляются с одного почтового сервера на другой.

Библиотеки Python smtplib и email предоставляют простой в использовании интерфейс для работы с SMTP-серверами и создания почтовых сообщений.

2. Установка Python и необходимых библиотек

Чтобы начать работу, убедитесь, что в вашей системе установлен Python 3.6 или более поздней версии.

Вы можете скачать последнюю версию с официального сайта Python.

Необходимые библиотеки, smtplib и email, являются частью стандартной библиотеки Python и не требуют дополнительной установки.

🐍 Управление версиями Python с помощью pyenv

3. Настройка параметров сервера SMTP

Чтобы отправлять электронные письма через SMTP-сервер, необходимо указать следующие данные:

  • адрес SMTP-сервера
  • Порт SMTP-сервера
  • Учетные данные для аутентификации (адрес электронной почты и пароль)

Популярные почтовые службы, такие как Gmail, Yahoo и Outlook, имеют адреса и порты своих SMTP-серверов в открытом доступе.

Для Gmail адрес сервера – smtp.gmail.com, а порт – 587.

Примечание: Некоторые поставщики услуг электронной почты могут потребовать включить “Менее безопасные приложения” или создать “Пароль приложения” для аутентификации. Для получения дополнительной информации обратитесь к документации поставщика услуг электронной почты.

4. Создание простого электронной почты

Имея на руках информацию о SMTP-сервере, мы можем теперь создать Python скрипт для отправки электронной почты.

Вот пример:

import smtplib



from email.mime.text import MIMEText



from email.mime.multipart import MIMEMultipart



# Определение настроек электронной почты



smtp_server = 'smtp.gmail.com'



smtp_port = 587



email_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_address



msg['To'] = 'recipient@example.com'



msg['Subject'] = subject



msg.attach(MIMEText(body, 'plain'))



# Отправка email



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!')

Замените 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-содержимое и добавлять вложения в наши электронные письма.

Эти знания можно применять в различных скриптах, например, для отправки автоматизированных отчетов, уведомлений или информационных бюллетеней.

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

см. также:



2023-04-18T08:43:47
Скрипты

Python 3. Арифметические операции

В этой статье разберем числовые типы данных в Python 3: int, float и complex, а также разберём арифметические операции.





Читать

Python. Создаем программы и игры (3-е издание)

Python. Создаем программы и игры [3-е издание]

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

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

Книга будет полезна как начинающим программистам, так и всем, кто хочет быстро и эффективно научиться писать программы на Python.

Скачать Python. Создаем программы и игры [3-е издание]

Скачать с mail облакаСкачать с mega облака

2023-04-06T13:13:10Книги и Курсы

Python 3. Работа с файлами

В статье будет описана работа с текстовыми файлами в Python 3. Вы научитесь сохранять строки и другие объекты в файлы а затем считывать их.





Читать

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():




### Код
my_set1 = {1, 2, 3, 4, 5}
my_set2 = {3, 4, 5, 6, 7}
my_set1.update(my_set2)
print(my_set1)

### Исполнение
{1, 2, 3, 4, 5, 6, 7}




Метод update() может принять любой список:




### Код
my_set = {1, 2, 3, 4, 5}
my_set.update([7, 5, 3, 6, 2])
print(my_set)

### Исполнение
{1, 2, 3, 4, 5, 6, 7}




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




Удаление элемента из множества можно выполнить с помощью методов remove() и discard(). При этом, если удалять несуществующий элемент:




  • с помощью remove() — то приложение выдаст ошибку,



  • с помощью discard() — приложение ничего не удалит, но и ошибки не будет.




### Код
my_set = {1, 2, 3, 4, 5}
my_set.remove(1)
my_set.discard(3)
print(my_set)

### Исполнение
{2, 4, 5}

### Код (удаление несуществующего элемента методом remove())
my_set = {1, 2, 3, 4, 5}
my_set.remove(6)
print(my_set)
print("Конец!") # Сюда выполнение кода не дойдёт

### Исполнение
Traceback (most recent call last):
  File "test2.py", line 2, in <module>
    my_set.remove(6)
KeyError: 6

### Код (удаление несуществующего элемента методом discard())
my_set = {1, 2, 3, 4, 5}
my_set.discard(6)
print(my_set)
print("Конец!") # Сюда выполнение кода дойдёт

### Исполнение
{1, 2, 3, 4, 5}
Конец!




Некоторые специфичные операции над множествами продемонстрированы на следующем рисунке:




Операции над множествами




Эти же операции в виде кода:




# Множества
my_set1 = {1, 5, 9, 6, 4}
my_set2 = {6, 5, 1, 8, 2}

# Пересечение
print(my_set1 & my_set2) # {1, 5, 6}

# Объединение
print(my_set1 | my_set2) # {1, 2, 4, 5, 6, 8, 9}

# Симметричная разница
print(my_set1 ^ my_set2) # {2, 4, 8, 9}

# Разница
print(my_set1 - my_set2) # {9, 4}
print(my_set2 - my_set1) # {8, 2}




Проверка на то, входит ли элемент в множество, осуществляется с помощью оператора 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. Дополнительно, про некоторые особенности множеств можете почитать в официальной документации.



2023-03-13T17:35:40
Python