%PDF- %PDF-
| Direktori : /proc/thread-self/root/data/old/usr/lib/python3.4/site-packages/urlwatch/ |
| Current File : //proc/thread-self/root/data/old/usr/lib/python3.4/site-packages/urlwatch/mailer.py |
# -*- coding: utf-8 -*-
#
# This file is part of urlwatch (https://thp.io/2008/urlwatch/).
# Copyright (c) 2008-2016 Thomas Perl <thp.io/about>
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
#
# 1. Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
# 3. The name of the author may not be used to endorse or promote products
# derived from this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
import smtplib
import getpass
try:
import keyring
except ImportError:
keyring = None
import email.mime.multipart
import email.mime.text
import email.utils
class Mailer(object):
def __init__(self, smtp_server, smtp_port, tls, auth):
self.smtp_server = smtp_server
self.smtp_port = smtp_port
self.tls = tls
self.auth = auth
def send(self, msg):
s = smtplib.SMTP()
s.connect(self.smtp_server, self.smtp_port)
s.ehlo()
if self.tls:
s.starttls()
if self.auth and keyring is not None:
passwd = keyring.get_password(self.smtp_server, msg['From'])
if passwd is None:
raise ValueError('No password available in keyring for {}, {}'.format(self.smtp_server, msg['From']))
s.login(msg['From'], passwd)
s.sendmail(msg['From'], [msg['To']], msg.as_string())
s.quit()
def msg_plain(self, from_email, to_email, subject, body):
msg = email.mime.text.MIMEText(body, 'plain', 'utf_8')
msg['Subject'] = subject
msg['From'] = from_email
msg['To'] = to_email
msg['Date'] = email.utils.formatdate()
return msg
def msg_html(self, from_email, to_email, subject, body_text, body_html):
msg = email.mime.multipart.MIMEMultipart('alternative')
msg['Subject'] = subject
msg['From'] = from_email
msg['To'] = to_email
msg['Date'] = email.utils.formatdate()
msg.attach(email.mime.text.MIMEText(body_text, 'plain', 'utf_8'))
msg.attach(email.mime.text.MIMEText(body_html, 'html', 'utf_8'))
return msg
def set_password(smtp_server, from_email):
''' Set the keyring password for the mail connection. Interactive.'''
if keyring is None:
raise ImportError('keyring module missing - service unsupported')
password = getpass.getpass(prompt='Enter password for {} using {}: '.format(from_email, smtp_server))
keyring.set_password(smtp_server, from_email, password)