Рано или поздно практически у каждого разработчика возникает задача отправки электронной почты. Часто это связано с необходимостью информирования получателя о наступлении какого-нибудь события.
Материалы данной статьи используются в статье о камере для Raspberry Pi 3, в разделе о построении простой системы безопасности, суть которой заключается в отправке фотографии пользователю по электронке, при детектировании движения в зоне действия датчика.
Для отправки письма по электронной почте используется штатная, предустановленная в системе, библиотека smtplib :
import smtplib
Для получения справки о любом импортированном классе или библиотеке, в интерпретаторе Python, после непосредственно импорта, нужно выполнить команду:
>>> import smtplib >>> help (smtplib)
Или из скетча — вывод в консоль через функцию print() :
import smtplib print ( help (smtplib))
- Gmail — https://support.google.com/mail/answer/7126229?hl=ru
- Mail.ru — https://help.mail.ru/mail-help/mailer/popsmtp
- Yandex — https://yandex.ru/support/mail-new/mail-clients.html
Для упрощения работы с письмами понадобится пакет email . Он позволяет работать с сообщениями электронной почты как с отдельными объектами. Пакет содержит также подклассы, описывающие различные MIME-типы. Для работы понадобятся 2 из них — MIMEMultipart и MIMEText :
Как отправить сообщение на почту с помощью Python | Email рассылка | Python send Gmail
import smtplib from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText
Общий шаблон отправки сообщения выглядит так:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Если необходимо добавить HTML-фрагмент, нужно присоединить к объекту msg ещё один подкласс:
Фрагмент HTML-кода
msg.attach(MIMEText(html, ‘html’ , ‘utf-8’ )) # Добавляем в сообщение HTML-фрагмент
server = smtplib.SMTP( ‘smtp-server’ , 587) # Создаем объект SMTP server.set_debuglevel( True ) # Включаем режим отладки — если отчет не нужен, строку можно закомментировать server.starttls() # Начинаем шифрованный обмен по TLS server.login(addr_from, password) # Получаем доступ server.send_message(msg) # Отправляем сообщение server.quit() # Выходим
В случае проблем с кодировкой, для тех полей, которым это необходимо, её необходимо указывать явно:
msg.attach(MIMEText(body, ‘html’ , ‘utf-8’ )) # или msg[ ‘Subject’ ] = Header( ‘Тема сообщения’ , ‘utf-8’ )
При включении режима отладки server.set_debuglevel(True) вся информация о процессе будет выводиться в консоль оболочки Shell. Это скажется на производительности, особенно в случаях вложения в отправление файлов.
При наличии вложений, использовать отладку server.set_debuglevel(True) не рекомендуется!
По такому же принципу к сообщению добавляются файлы — создаются экземпляры соответствующих подклассов и присоединяются к объекту msg . Код для включения различных типов файлов представлен ниже. Также необходимо импортировать дополнительные MIME-типы, энкодеры и библиотеки:
Программы на Python | Как отправить письмо с вложением на почту с помощью Python | Email рассылка
import mimetypes # Импорт класса для обработки неизвестных MIME-типов, базирующихся на расширении файла from email import encoders # Импортируем энкодер from email.mime.base import MIMEBase # Общий тип from email.mime.text import MIMEText # Текст/HTML from email.mime.image import MIMEImage # Изображения from email.mime.audio import MIMEAudio # Аудио # . filepath= «full_file_path_with_filename» # Имя файла в абсолютном или относительном формате filename = os.path.basename(filepath) # Только имя файла if os.path.isfile(filepath): # Если файл существует ctype, encoding = mimetypes.guess_type(filepath) # Определяем тип файла на основе его расширения if ctype is None or encoding is not None : # Если тип файла не определяется ctype = ‘application/octet-stream’ # Будем использовать общий тип maintype, subtype = ctype.split( ‘/’ , 1) # Получаем тип и подтип if maintype == ‘text’ : # Если текстовый файл with open (filepath) as fp: # Открываем файл для чтения file = MIMEText(fp.read(), _subtype=subtype) # Используем тип MIMEText fp.close() # После использования файл обязательно нужно закрыть elif maintype == ‘image’ : # Если изображение with open (filepath, ‘rb’ ) as fp: file = MIMEImage(fp.read(), _subtype=subtype) fp.close() elif maintype == ‘audio’ : # Если аудио with open (filepath, ‘rb’ ) as fp: file = MIMEAudio(fp.read(), _subtype=subtype) fp.close() else : # Неизвестный тип файла with open (filepath, ‘rb’ ) as fp: file = MIMEBase(maintype, subtype) # Используем общий MIME-тип file.set_payload(fp.read()) # Добавляем содержимое общего типа (полезную нагрузку) fp.close() encoders.encode_base64(file) # Содержимое должно кодироваться как Base64 file.add_header( ‘Content-Disposition’ , ‘attachment’ , filename=filename) # Добавляем заголовки msg.attach(file) # Присоединяем файл к сообщению
После вынесения функционала отправки сообщения в отдельную функцию, полный код с примером использования будет выглядеть так:
Источник: codius.ru
Как я могу отправить программу на Python (включая библиотеки) другу?
Я хочу отправить программу, которую я сделал моему другу, но проблема в том, что он не будет работать на его компьютере, потому что у него нет всех установленных библиотек. Например:
#! /usr/bin/env python2.7 from PyQt4.QtCore import * from PyQt4.QtGui import * from PyQt4.QtWebKit import * from bs4 import BeautifulSoup as bs import sys
как я могу отправить ему все необходимые библиотеки? надеюсь, мой вопрос ясен.
Vor 10 дек. 2012, в 18:04
Поделиться
Является ли ваш друг разработчиком, и вы хотите убедиться, что он может легко получить все библиотеки / пакеты, или вы просто хотите, чтобы он запускал ваше приложение?
YXD 10 дек. 2012, в 16:35
он разработчик, и ему нужен реальный код.
Vor 10 дек. 2012, в 16:36
Стандартный способ — использовать virtualenv , локально установить ваши пакеты с помощью pip , убедиться, что он работает, а затем использовать pip freeze для создания файла требований.
YXD 10 дек. 2012, в 16:37
Взгляните на pip-installer.org/en/latest/requirements.html
Wooble 10 дек. 2012, в 16:37
Показать ещё 2 комментария
Поделиться:
shared-libraries
1 ответ
Вы также можете попробовать «Python to EXE»:
http://www.py2exe.org/
Это упаковывает script, а компоненты — в пакет, который работает с включенным exe.
Если вы храбры, вы можете «сворачивать свои собственные», собирая ключевые DLL и EXE для python:
.MSVCR71.dll .OCI.dll .python.exe .python25.dll
И все необходимые файлы *.pyc и *.pyd в каталоге Python HOME Lib:
.Libcx_Oracle.pyc .Libcx_Oracle.pyd .Libencodingsaliases.pyc .Libglob.pyc .Libloggingconfig.pyc .Libos.pyc .Libpprint.pyc . excreta .
Принимая все файлы и любые ваши разработанные скрипты *.py и сворачивая их в соответствующие структуру каталогов и его подпитку для распространения.
Alan Penny 10 дек. 2012, в 22:09
Поделиться
Ещё вопросы
- 1 Smack API выдает ошибку при локальном входе в настройку Tigase Server
- 0 Phalcon datetime в модели запроса об ошибке
- 0 Циклы ожидания не работают
- 0 как вызвать переменную в родительской области видимости
- 0 Параметры: где они объявлены?
- 0 Как получить общее значение поля Scorecard.run
- 0 Не могу найти загруженные файлы
- 1 Используйте API расширения Chrome в компоненте Vue.js
- 0 Зачем проверять, если переменная $ _GET пуста дважды?
- 0 пытаясь заставить PHP разместить строку в файл
- 0 Размещение текста над набором изображений с использованием jQuery
- 0 Ошибка входа в Java
- 0 JQuery Переключить текст на основе видимости элемента не ведет себя так, как ожидалось
- 0 когда jQuery FadeOut элемент, какой атрибут изменяется в CSS?
- 0 Почему я получаю сообщение об ошибке, когда пытаюсь получить высоту элемента из тега rel?
- 1 Python: присвоение переменной с использованием «или» с лямбда-функциями? [Дубликат]
- 0 PHP-файл с HTML в нем комментирует PHP
- 1 Улучшение производительности метода Java
- 1 Является ли View или ViewModel ответственным за преобразование данных из модели, представляемой в пользовательском интерфейсе?
- 1 как заставить ckeditor перестать удалять пустые div
- 0 Ошибка: недопустимое значение для атрибута x = «NaN» в angularJS nvd3-multi-bar-chart
- 0 Как получить параметры в contollerFactory Zend 2?
- 1 новый оператор в Java
- 0 Завершающее регулярное выражение со специфическим символом при первом появлении
- 0 jquery — проверка, щелкает ли элемент и не щелкаются ли подэлементы
- 1 Десериализация Gson — вложенные классы, отображающие строчные поля
- 0 jquery запомнить открытые пункты списка
- 0 Синтаксическая ошибка при обновлении столбцов
- 0 Добавление динамических радиокнопок в угловых
- 0 Скомпилировать функцию MATLAB во что-то, что можно запустить на терминале linux без MATLAB?
- 0 Как я могу создать новые экземпляры разных классов хорошим способом?
- 1 Конфигурационные файлы, редактируемые после `npm run build`
- 0 Добавление двух карт Google на одну страницу HTML
- 1 Вложено для петли в терминале
- 0 манипулирование таблицей html с использованием foreach в codeigniter
- 0 C ++. как читать из файла и сопоставлять с вводом
- 0 Ошибка MySQL 1215: невозможно добавить ограничение внешнего ключа для типа данных геометрии POINT
- 0 Ошибка в AngularJS? Различные результаты на Chrome (43) и Firefox (38.0.5)
- 0 Угловой файл JS скачать
- 1 CasperJS не хватает памяти
- 1 Как Date.prototype.getUTCFullYear () соответствует 2000 году?
- 0 рекурсия через функцию производных классов шаблонного класса
- 1 Фильтрация слов в элементах списка по текстовому полю
- 0 добавить пользовательскую директиву от контроллера
- 0 Ошибка Facebook и Codeigniter T_OBJECT_OPERATOR
- 0 Чтобы получить экземпляр li с выбранным значением в его div, используя JQuery
- 0 Центрировать элемент Div на странице?
- 1 как посчитать появление группового результата в Pandas
- 1 Как отобразить изображение с помощью imageurl в C #
- 1 Сохранение файлового объекта с помощью matplotlib savefig, создание tar-файла из нескольких рисунков SVG
Источник: overcoder.net
Как отправить программу на python
Как я могу отправить программу Python (включая библиотеки) другу?
Я хочу отправить программу, которую я сделал моему другу, но проблема в том, что он не будет работать на его компьютере, потому что у него нет всех установленных библиотек.
Например:
как я могу отправить ему все необходимые библиотеки?
надеюсь, мой вопрос ясен.
Вы также можете попробовать «Python to EXE»:
Это упаковывает script, а компоненты — в пакет, который работает с включенным exe.
Если вы храбры, вы можете «сворачивать свои собственные», собирая ключевые DLL и EXE для python:
И все необходимые файлы *.pyc и *.pyd в каталоге Python HOME Lib:
Принимая все файлы и любые ваши разработанные скрипты *.py и сворачивая их в соответствующие
структуру каталогов и его подпитку для распространения.
Как перенести программу? [закрыт]
Хотите улучшить этот вопрос? Переформулируйте вопрос так, чтобы он был сосредоточен только на одной проблеме.
Закрыт 5 лет назад .
Столкнулся с тем, что нет подробной информации про то, как передать написанную программу пользователю. Пишу на Python 3 и получаю файл .py , из личных соображений понимаю что должен каким-то образом передать пользователю все модули которые подключал и он должен как-то запустить программу)
Пожалуйста, перечислите все возможные варианты, их плюсы и минусы и для каких OC они подходят, а так же если я использую PyQt добавляются ещё какие-то способы переноса или их становится меньше?
Похожие публикации:
- Mysql как посмотреть связи между таблицами
- Openoffice writer что это за программа
- Как считать программу с микроконтроллера
- 124 движения как слоумо
Источник: gshimki.ru