Как автоматизировать процесс рассылки писем по электронной почте. Будет полезно абсолютно каждому, кто когда-либо сталкивался с необходимостью отправлять информацию или рекламные сообщения большому количеству получателей.
Код:
import os
import time
import imaplib
import smtplib
import logging
from typing import Optional
from email.mime.text import MIMEText
from email.header import Header
from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase
from email import encoders
from email.utils import formatdate
# Логгирование
logging.basicConfig(
level=logging.INFO,
format="%(asctime)s — %(levelname)s — %(message)s",
handlers=[
logging.FileHandler("email_sender.log"),
logging.StreamHandler()
]
)
def create_email(
from_addr: str,
to_addr: str,
subject: str,
body: str,
attachment_path: Optional[str] = None
) -> MIMEMultipart:
logging.info("Создание письма...")
msg = MIMEMultipart()
msg["From"] = from_addr
msg["To"] = to_addr
msg["Subject"] = Header(subject, 'utf-8')
msg["Date"] = formatdate(localtime=True)
msg.attach(MIMEText(body, 'html', 'utf-8'))
if attachment_path and os.path.exists(attachment_path):
try:
part = MIMEBase('application', "octet-stream")
with open(attachment_path, "rb") as file:
part.set_payload(file.read())
encoders.encode_base64(part)
part.add_header(
'Content-Disposition',
f'attachment; filename="{os.path.basename(attachment_path)}"'
)
msg.attach(part)
logging.info(f"Файл прикреплен: {attachment_path}")
except Exception as e:
logging.error(f"Ошибка при прикреплении файла: {e}")
else:
logging.warning("Файл не найден или не указан — письмо будет без вложения.")
return msg
def send_email(
smtp_server: str,
smtp_port: int,
from_addr: str,
from_pass: str,
to_addr: str,
message: MIMEMultipart
) -> None:
try:
with smtplib.SMTP(smtp_server, smtp_port) as smtp:
smtp.starttls()
smtp.login(from_addr, from_pass)
smtp.sendmail(from_addr, to_addr, message.as_string())
logging.info(f"Письмо отправлено на {to_addr}")
except Exception as e:
logging.error(f"Ошибка отправки письма: {e}")
def save_to_sent(
imap_server: str,
imap_port: int,
from_addr: str,
from_pass: str,
message: MIMEMultipart
) -> None:
try:
with imaplib.IMAP4(imap_server, imap_port) as imap:
imap.login(from_addr, from_pass)
imap.select('Sent')
imap.append('Sent', None, imaplib.Time2Internaldate(time.time()), message.as_bytes())
logging.info("Письмо сохранено в 'Sent'")
except Exception as e:
logging.error(f"Ошибка сохранения письма: {e}")
if __name__ == "__main__":
FROM_EMAIL = "corp-mail@mail.ru"
FROM_PASSWORD = "*"
SMTP_SERVER = "*.mail.ru"
SMTP_PORT = 25
IMAP_PORT = 143
TO_EMAIL = "students-mail@mail.ru"
SUBJECT = "Тема сообщения"
BODY = "Текст сообщения"
ATTACHMENT_PATH = "сертификат.pdf"
try:
email_msg = create_email(FROM_EMAIL, TO_EMAIL, SUBJECT, BODY, ATTACHMENT_PATH)
send_email(SMTP_SERVER, SMTP_PORT, FROM_EMAIL, FROM_PASSWORD, TO_EMAIL, email_msg)
save_to_sent(SMTP_SERVER, IMAP_PORT, FROM_EMAIL, FROM_PASSWORD, email_msg)
except Exception as e:
logging.critical(f"Критическая ошибка: {e}")
#python #soft #code
Please open Telegram to view this post
VIEW IN TELEGRAM
С его помощью вы легко сохраните любимый контент для офлайн-просмотра
Ключевые возможности:
1. Клонируйте репозиторий:
git clone https://github.com/Efeckc17/YoutubeGO.git
cd YoutubeGO
2. Убедитесь, что установлен Python 3.7+:
python --version
3. Установите зависимости:
pip install -r requirements.txt
4. Установите FFmpeg для обработки аудио и видео:
- macOS:
brew install ffmpeg
- Linux (Debian/Ubuntu):
sudo apt install ffmpeg
- Linux (Arch-based):
sudo pacman -S ffmpeg
- Windows (через winget):
winget install FFmpeg
python main.py
YoutubeGO — надежный помощник для сохранения контента в высоком качестве и удобном формате.
#python #soft #code
Please open Telegram to view this post
VIEW IN TELEGRAM
pip install img2table
Для использования с определённым OCR-сервисом:
pip install img2table[tesseract] # или [paddle], [easyocr], [gcp], [aws], [azure]
Пример использования:
from img2table.document import Image
from img2table.ocr import TesseractOCR
# Инициализация OCR
ocr = TesseractOCR()
# Загрузка изображения
img = Image("путь_к_изображению.jpg")
# Извлечение таблиц
tables = img.extract_tables(ocr=ocr)
# Получение первой таблицы в виде DataFrame
df = tables[0].df
Благодаря использованию OpenCV, img2table эффективно работает на CPU, не требуя мощных вычислительных ресурсв.
#python #soft #code
Please open Telegram to view this post
VIEW IN TELEGRAM
OpenCV-Face-Recognition — для всех, кто интересуется компьютерным зрением и хочет реализовать проект по распознаванию лиц в реальном времени.
Проект включает три основных этап:
Подробные инструкции и примеры кода доступны в репозитории.
#python #soft #code
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Если ты всё ещё руками сидишь на бирже — значит, ты пропускаешь профит.
🔁 Единый синтаксис для всех бирж — не нужно каждый раз переучиваться.
pip install ccxt
Пример использования на Python:
import ccxt
exchange = ccxt.binance()
markets = exchange.load_markets()
ticker = exchange.fetch_ticker('BTC/USDT')
print(ticker)
#python #soft #code
Please open Telegram to view this post
VIEW IN TELEGRAM
Хотите автоматизировать обработку изображений без фотошопа?
Скрипт-проект на базе библиотеки
rembg
:pip install rembg
Пример кода:
from rembg import remove
def remove_background(input_path: str, output_path: str) -> None:
"""Удаляет фон с изображения и сохраняет результат."""
with open(input_path, 'rb') as input_file:
with open(output_path, 'wb') as output_file:
image_bytes: bytes = input_file.read()
output_bytes: bytes = remove(image_bytes)
output_file.write(output_bytes)
if __name__ == "__main__":
remove_background('input.png', 'output.png')
#python #soft #code
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
#soft #code
Please open Telegram to view this post
VIEW IN TELEGRAM
Если тебе нужно быстро замазать лица на снимке — вот тебе универсальный скрипт!
Работает на основе каскадов Хаара и добавляет эффект размытия по каждому найденному лицу.
import cv2
from typing import Tuple
def load_image(path: str) -> cv2.Mat:
"""Загружает изображение с указанного пути."""
image = cv2.imread(path)
if image is None:
raise FileNotFoundError(f"Изображение не найдено: {path}")
return image
def detect_faces(image: cv2.Mat) -> Tuple[Tuple[int, int, int, int], ...]:
"""Находит лица на изображении с помощью каскада Хаара."""
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
face_cascade = cv2.CascadeClassifier(
cv2.data.haarcascades + "haarcascade_frontalface_default.xml"
)
faces = face_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5)
return tuple(faces)
def blur_faces(image: cv2.Mat, faces: Tuple[Tuple[int, int, int, int], ...]) -> cv2.Mat:
"""Размывает найденные лица на изображении."""
for (x, y, w, h) in faces:
face_roi = image[y:y+h, x:x+w]
blurred = cv2.GaussianBlur(face_roi, (99, 99), 30)
image[y:y+h, x:x+w] = blurred
return image
def save_image(image: cv2.Mat, path: str) -> None:
"""Сохраняет изображение на диск."""
cv2.imwrite(path, image)
if __name__ == "__main__":
input_path = "/home/kali/Coding/TEST/man.png"
output_path = "blurred_faces.jpg"
img = load_image(input_path)
found_faces = detect_faces(img)
print(f"👀 Найдено лиц: {len(found_faces)}")
blurred_img = blur_faces(img, found_faces)
save_image(blurred_img, output_path)
print(f"✅ Сохранено: {output_path}")
#python #soft #code
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
git clone https://github.com/RishiDesai/FaceEnhance
cd FaceEnhance
python -m venv venv
source venv/bin/activate
pip install -r requirements.txt
python install.py
python test.py --input examples/dany_gpt_1.png --ref examples/dany_face.jpg --out examples/dany_enhanced.png
python demo.py
) для быстрого теста без кода.#python #soft #code
Please open Telegram to view this post
VIEW IN TELEGRAM
Fake2db — настоящая находка для разработчиков, которым нужно «оживить» проект фейковыми данными за пару секунд.
Забудьте про ручной ввод или костыли в Excel — теперь всё автоматом, красиво и быстро.
Пример: хочешь протестить API магазина?
fake2db
закинет тебе в базу 1000 товаров с ценами, фотками и описаниями — и всё это одной командой.Поддерживает:
Идеальный инструмент, когда нужно показать «живой» проект, а заказчик не дал ни строки данных.
pip install fake2db
#python #soft #code #github
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Это не просто Python-библиотека — это удобный инструмент управления ИИ, который можно настроить под себя.
Что умеет:
#python #soft #code
Please open Telegram to view this post
VIEW IN TELEGRAM
Мини-программа, скрипт, который считает ИМТ (индекс массы тела) и классифицирует результат по всем канонам ВОЗ.
from typing import Optional
def calculate_bmi(weight: float, height: float) -> Optional[float]:
"""Вычисляет индекс массы тела (ИМТ)."""
try:
bmi = weight / (height ** 2)
return round(bmi, 2)
except ZeroDivisionError:
print("❌ Рост не может быть равен нулю.")
return None
def interpret_bmi(bmi: float) -> str:
"""Интерпретирует значение ИМТ по классификации ВОЗ."""
if bmi < 18.5:
return "Недостаточный вес"
elif 18.5 <= bmi < 25:
return "Нормальный вес"
elif 25 <= bmi < 30:
return "Избыточный вес"
elif 30 <= bmi < 35:
return "Ожирение I степени"
elif 35 <= bmi < 40:
return "Ожирение II степени"
else:
return "Ожирение III степени"
def main() -> None:
print("🧮 Калькулятор Индекса Массы Тела (ИМТ)")
while True:
print("\nМеню:")
print("1. Рассчитать ИМТ")
print("2. Выйти")
choice = input("Выберите действие (1-2): ").strip()
if choice == "1":
try:
weight = float(input("Введите вес (кг): ").strip())
height = float(input("Введите рост (в метрах): ").strip())
bmi = calculate_bmi(weight, height)
if bmi is not None:
category = interpret_bmi(bmi)
print(f"\nВаш ИМТ: {bmi}")
print(f"Категория: {category}")
except ValueError:
print("❌ Пожалуйста, введите числовые значения.")
elif choice == "2":
print("До встречи! 🖖")
break
else:
print("Неверный выбор. Попробуйте снова.")
if __name__ == "__main__":
main()
Сохраняй себе и делись с другом, которому давно пора в зал
@python2day
#python #code #soft
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from NetStalkers
NExfil — OSINT-инструмент на Python, который ищет профили по нику на 350+ сайтах — от популярных соцсетей до подозрительных форумов.
Подойдёт для:
$ git clone https://github.com/thewhiteh4t/nexfil.git
$ cd nexfil
$ pip3 install -r requirements.txt
$ python3 nexfil.py -h
$ nexfil.py [-h] [-u U] [-d D [D ...]] [-f F] [-l L] [-t T] [-v]
Поиск по одному имени:
$ python3 nexfil.py -u username
Поиск по нескольким именам:
$ python3 nexfil.py -l "user1, user2"
Поиск по списку пользователей из файла:
$ python3 nexfil.py -f users.txt
#soft #code #python #github
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Забудь про дорогой софт и вечную подписку — IOPaint это бесплатный, open-source инструмент, который превращает любые фото в шедевры с помощью ИИ.
Что умеет:
* Stable Diffusion, Dreamshaper, BrushNet, Paint-by-Example
* Плагины для улучшения лица (GFPGAN, RestoreFormer), удаления фона, повышения качества (RealESRGAN), аниме-сегментации и многого другого!
$ pip3 install iopaint
$ iopaint start --model=lama --device=cpu --port=8080
#python #soft #code
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Инструмент делает запрос к ExchangeRate API и показывает актуальный курс USD к RUB — без заморочек и регистрации.
import requests
from typing import Optional
def get_exchange_rate(base_currency: str, target_currency: str) -> Optional[float]:
"""
Получает курс обмена из base_currency в target_currency.
:param base_currency: Базовая валюта (например, 'USD').
:param target_currency: Целевая валюта (например, 'RUB').
:return: Курс обмена или None в случае ошибки.
"""
url = f"https://open.er-api.com/v6/latest/{base_currency}"
try:
response = requests.get(url, timeout=10)
response.raise_for_status()
data = response.json()
rate = data["rates"].get(target_currency)
if rate is None:
print(f"Курс для {target_currency} не найден.")
return None
return rate
except requests.RequestException as e:
print(f"Ошибка при запросе к API: {e}")
return None
if __name__ == "__main__":
base = "USD"
target = "RUB"
rate = get_exchange_rate(base, target)
if rate:
print(f"Курс {base} к {target}: {rate}")
else:
print("Не удалось получить курс обмена.")
# Курс USD к RUB: 80.926191
#python #code #soft
Please open Telegram to view this post
VIEW IN TELEGRAM