Files
@ ae5ac36cdf83
Branch filter:
Location: kallithea/rhodecode/lib/rcmail/smtp_mailer.py - annotation
ae5ac36cdf83
3.4 KiB
text/x-python
pull request: use unionrepo instead of outgoing
This makes it possible to look the 'moving target' symbols up in the right repo.
Using a revset with the right revisions also removes the need for pruning
changesets that are outside the requested range.
It will also not be confused by changesets that for some reason has been pulled
to the repo but haven't been merged yet. They are going to be 'merged' by the
'pull' request and should thus be a part of what is reviewed.
This makes it possible to look the 'moving target' symbols up in the right repo.
Using a revset with the right revisions also removes the need for pruning
changesets that are outside the requested range.
It will also not be confused by changesets that for some reason has been pulled
to the repo but haven't been merged yet. They are going to be 'merged' by the
'pull' request and should thus be a part of what is reviewed.
7ff304d3028f 7ff304d3028f 7ff304d3028f 7ff304d3028f 7ff304d3028f 7ff304d3028f 7ff304d3028f 7ff304d3028f 89efedac4e6c 7ff304d3028f 7ff304d3028f 7ff304d3028f 7ff304d3028f 7ff304d3028f 7ff304d3028f 7ff304d3028f 7ff304d3028f 7ff304d3028f 7ff304d3028f 7ff304d3028f 7ff304d3028f 7ff304d3028f 7ff304d3028f d95ef6587bca 7ff304d3028f 7ff304d3028f 7ff304d3028f d95ef6587bca 7ff304d3028f 9766f0baf5c5 7ff304d3028f 89efedac4e6c 7ff304d3028f 7ff304d3028f 7ff304d3028f 7ff304d3028f 7ff304d3028f 7ff304d3028f 7ff304d3028f 7ff304d3028f 7ff304d3028f 7ff304d3028f 7ff304d3028f 7ff304d3028f 7ff304d3028f 7ff304d3028f 7ff304d3028f 7ff304d3028f 7ff304d3028f 7ff304d3028f 7ff304d3028f 7ff304d3028f 7ff304d3028f 7ff304d3028f 7ff304d3028f 7ff304d3028f 7ff304d3028f 7ff304d3028f 7ff304d3028f 7ff304d3028f 7ff304d3028f 7ff304d3028f 7ff304d3028f d95ef6587bca d95ef6587bca d95ef6587bca 349a0ca30a75 d95ef6587bca 7ff304d3028f 7ff304d3028f 7ff304d3028f 9766f0baf5c5 9766f0baf5c5 7ff304d3028f 9766f0baf5c5 9766f0baf5c5 7ff304d3028f 7ff304d3028f 7ff304d3028f 7ff304d3028f 7ff304d3028f 7ff304d3028f 7ff304d3028f 7ff304d3028f 7ff304d3028f 7ff304d3028f 7ff304d3028f 7ff304d3028f 7ff304d3028f 7ff304d3028f 7ff304d3028f 7ff304d3028f 7ff304d3028f 7ff304d3028f 7ff304d3028f 7ff304d3028f 7ff304d3028f 7ff304d3028f 7ff304d3028f 7ff304d3028f 9766f0baf5c5 | # -*- coding: utf-8 -*-
"""
rhodecode.lib.rcmail.smtp_mailer
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Simple smtp mailer used in RhodeCode
:created_on: Sep 13, 2010
:copyright: (C) 2010-2012 Marcin Kuzminski <marcin@python-works.com>
:license: GPLv3, see COPYING for more details.
"""
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
import time
import logging
import smtplib
from socket import sslerror
from email.utils import formatdate
from rhodecode.lib.rcmail.message import Message
from rhodecode.lib.rcmail.utils import DNS_NAME
class SmtpMailer(object):
"""SMTP mailer class
mailer = SmtpMailer(mail_from, user, passwd, mail_server, smtp_auth
mail_port, ssl, tls)
mailer.send(recipients, subject, body, attachment_files)
:param recipients might be a list of string or single string
:param attachment_files is a dict of {filename:location}
it tries to guess the mimetype and attach the file
"""
def __init__(self, mail_from, user, passwd, mail_server, smtp_auth=None,
mail_port=None, ssl=False, tls=False, debug=False):
self.mail_from = mail_from
self.mail_server = mail_server
self.mail_port = mail_port
self.user = user
self.passwd = passwd
self.ssl = ssl
self.tls = tls
self.debug = debug
self.auth = smtp_auth
def send(self, recipients=[], subject='', body='', html='',
attachment_files=None):
if isinstance(recipients, basestring):
recipients = [recipients]
headers = {
'Date': formatdate(time.time())
}
msg = Message(subject, recipients, body, html, self.mail_from,
recipients_separator=", ", extra_headers=headers)
raw_msg = msg.to_message()
if self.ssl:
smtp_serv = smtplib.SMTP_SSL(self.mail_server, self.mail_port,
local_hostname=DNS_NAME.get_fqdn())
else:
smtp_serv = smtplib.SMTP(self.mail_server, self.mail_port,
local_hostname=DNS_NAME.get_fqdn())
if self.tls:
smtp_serv.ehlo()
smtp_serv.starttls()
if self.debug:
smtp_serv.set_debuglevel(1)
smtp_serv.ehlo()
if self.auth:
smtp_serv.esmtp_features["auth"] = self.auth
# if server requires authorization you must provide login and password
# but only if we have them
if self.user and self.passwd:
smtp_serv.login(self.user, self.passwd)
smtp_serv.sendmail(msg.sender, msg.send_to, raw_msg.as_string())
logging.info('MAIL SEND TO: %s' % recipients)
try:
smtp_serv.quit()
except sslerror:
# sslerror is raised in tls connections on closing sometimes
smtp_serv.close()
|