Files
@ 6d9b3ade3051
Branch filter:
Location: kallithea/rhodecode/lib/rcmail/smtp_mailer.py - annotation
6d9b3ade3051
3.4 KiB
text/x-python
Allowing multiple issue servers to be autolinked in the changeset view;
linking is now contingent on issue_server_link, issue_pat and issue_prefix
being defined; multiple servers can be used by specifying a common suffix on all
the above variables, ie ..
issue_server_link_1
issue_pat_1
issue_prefix_1
.. and ..
issue_server_link_other
issue_pat_other
issue_prefix_other
.. would be treated as two distinct servers, but ..
issue_pat_thing
.. would be ignored (since the other two requisite vars aren't present).
This patch is backwards compatible with existing variables (as a suffix
isn't needed).
linking is now contingent on issue_server_link, issue_pat and issue_prefix
being defined; multiple servers can be used by specifying a common suffix on all
the above variables, ie ..
issue_server_link_1
issue_pat_1
issue_prefix_1
.. and ..
issue_server_link_other
issue_pat_other
issue_prefix_other
.. would be treated as two distinct servers, but ..
issue_pat_thing
.. would be ignored (since the other two requisite vars aren't present).
This patch is backwards compatible with existing variables (as a suffix
isn't needed).
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()
|