Отправка писем из Python SMTPlib
Python для начинающих python smtplib, python почта, отправка писем python, рассылка python
Недавно пришлось написать небольшой скрипт для рассылки писем к читателям с одного проекта. На PHP у меня уже ранее реализован данный скрипт, но т.к. я перешел программировать на Python мне нужно больше практики для понимания языка. Хочу сказать, что по сравнению с PHP, собственная smtp библиотека от Python гораздо удобнее для настройки в случае если нам нужна аутентификация с другого почтового сервиса.
Плюсы и минусы
Написал небольшую функцию которая должна отвечать всем вашим требованиям. Некоторые моменты с которыми были бы костыли в PHP, в Python реализованы весьма логично. Например отправлять массовое сообщение на PHP, пришлось создавать цикл и каждому получателю отправлять отдельное письмо через вызов mail(). Python нам сразу предлагает указать все нужные адресаты в общий список и передать ему - он сам разберется.
В PHP мне иногда приходилось мучится с кодировкой. Когда проверяешь и видишь, что все в порядке с кодировкой но письмо опять с иероглифами, это очень сильно бесит. Несмотря на то, что в Python, модуль smtplib принимает текст письма исключительно в ASCII, проблема с русским языков исчезает сразу если указать кодировку в самом скрипте т.е.
# -*- coding: utf-8 -*- import smtplib ...
Используя smtplib, вам придется поработать ручками. Нужно в теле письма дописать SMTP команды такие как: From, To, Subject. Но, для вам я написал небольшую функцию которая избавит вам от этой рутины. Почему? - Потому, что я вам люблю ;)
Я использовал smtp сервер от Яндекс, т.к. с его почтой я работаю. Если вам нужно узнать адрес smtp сервера и порт другой почты, напишите в гугле "smtp gmail" например. В готовых вопросах - ответах из поддержки почты вы узнаете все нужные данные.
# -*- coding: utf-8 -*- import smtplib def mail(sender, subject, message, to): smtp_server = 'smtp.yandex.ru' smtp_port = 25 smtp_pasword = 'pew_pew99' mail_lib = smtplib.SMTP(smtp_server, smtp_port) mail_lib.login(sender, smtp_pasword) # В случае если функции передан не список с получателями # а обычную строку if isinstance(to, str): to = ','.join(to) msg = 'From: %s\r\nTo: %s\r\nContent-Type: text/html; charset="utf-8"\r\nSubject: %s\r\n\r\n' % (sender, to, subject) msg += message mail_lib.sendmail(sender, to, msg) # отправляем письмо message = """ Привет из Python! """ mail('JessePinkman@yandex.ru', 'Yeah Bitch! Magnets!', message, 'Walter_White@yahoo.com')
Первый параметр функции sender должен содержать email отправителя к которому соответствуют SMTP данные из функции. Если менять email отправителя не меняя настроек smtp в самой функции, тогда сообщение не будет доставлено.
По каким критериям нужно покупать ноутбуки и компьютеры,программы,советы по техобслуживанию, настройка и характеристики на комплектующие части компьютера или ноутбука,мониторы,электронные книги,оргтехника,мультимедиа. Узнайте много полезной для себе информации на компьютерную тематику.
Спасибо круто!
Большое спасибо за статью! Но я для таких целей использую Юнисендер(http://www.unisender.com/ru/)
Статья очень плохая, очень много говнокода, а автор на момент написания статьи даже не удосужился прочитать о сравнении строковых объектов.
"if isinstance(to, str)" - ты серьезно? а если придет строка Unicode?
message = """
Привет из Python! - это вообще шедевр! текст письма в исходниках да еще и многострочный! молодец!!!
"""
для дибилов таких как Rom4eg, python 3 (полночтью unicode)
а насчет """xxxxx""" для вида.