mirror of
https://github.com/facebook/sapling.git
synced 2024-10-07 15:27:13 +03:00
Move ui.sendmail to mail.connect/sendmail
This commit is contained in:
parent
6ecbc46d1a
commit
f849bdf704
@ -67,8 +67,8 @@
|
||||
from mercurial.demandload import *
|
||||
from mercurial.i18n import gettext as _
|
||||
from mercurial.node import *
|
||||
demandload(globals(), 'email.Parser mercurial:commands,patch,templater,util')
|
||||
demandload(globals(), 'fnmatch socket time')
|
||||
demandload(globals(), 'mercurial:commands,patch,templater,util,mail')
|
||||
demandload(globals(), 'email.Parser fnmatch socket time')
|
||||
|
||||
# template for single changeset can include email headers.
|
||||
single_template = '''
|
||||
@ -229,8 +229,8 @@ class notifier(object):
|
||||
else:
|
||||
self.ui.status(_('notify: sending %d subscribers %d changes\n') %
|
||||
(len(self.subs), count))
|
||||
mail = self.ui.sendmail()
|
||||
mail.sendmail(templater.email(msg['From']), self.subs, msgtext)
|
||||
mail.sendmail(self.ui, templater.email(msg['From']),
|
||||
self.subs, msgtext)
|
||||
|
||||
def diff(self, node, ref):
|
||||
maxdiff = int(self.ui.config('notify', 'maxdiff', 300))
|
||||
|
@ -241,7 +241,7 @@ def patchbomb(ui, repo, *revs, **opts):
|
||||
ui.write('\n')
|
||||
|
||||
if not opts['test'] and not opts['mbox']:
|
||||
mail = ui.sendmail()
|
||||
mailer = mail.connect(ui)
|
||||
parent = None
|
||||
|
||||
# Calculate UTC offset
|
||||
@ -290,7 +290,7 @@ def patchbomb(ui, repo, *revs, **opts):
|
||||
ui.status('Sending ', m['Subject'], ' ...\n')
|
||||
# Exim does not remove the Bcc field
|
||||
del m['Bcc']
|
||||
mail.sendmail(sender, to + bcc + cc, m.as_string(0))
|
||||
mailer.sendmail(sender, to + bcc + cc, m.as_string(0))
|
||||
|
||||
cmdtable = {
|
||||
'email':
|
||||
|
68
mercurial/mail.py
Normal file
68
mercurial/mail.py
Normal file
@ -0,0 +1,68 @@
|
||||
# mail.py - mail sending bits for mercurial
|
||||
#
|
||||
# Copyright 2006 Matt Mackall <mpm@selenic.com>
|
||||
#
|
||||
# This software may be used and distributed according to the terms
|
||||
# of the GNU General Public License, incorporated herein by reference.
|
||||
|
||||
from i18n import gettext as _
|
||||
from demandload import *
|
||||
demandload(globals(), "os re smtplib templater util")
|
||||
|
||||
def _smtp(ui):
|
||||
'''send mail using smtp.'''
|
||||
|
||||
local_hostname = ui.config('smtp', 'local_hostname')
|
||||
s = smtplib.SMTP(local_hostname=local_hostname)
|
||||
mailhost = ui.config('smtp', 'host')
|
||||
if not mailhost:
|
||||
raise util.Abort(_('no [smtp]host in hgrc - cannot send mail'))
|
||||
mailport = int(ui.config('smtp', 'port', 25))
|
||||
self.note(_('sending mail: smtp host %s, port %s\n') %
|
||||
(mailhost, mailport))
|
||||
s.connect(host=mailhost, port=mailport)
|
||||
if ui.configbool('smtp', 'tls'):
|
||||
ui.note(_('(using tls)\n'))
|
||||
s.ehlo()
|
||||
s.starttls()
|
||||
s.ehlo()
|
||||
username = ui.config('smtp', 'username')
|
||||
password = ui.config('smtp', 'password')
|
||||
if username and password:
|
||||
ui.note(_('(authenticating to mail server as %s)\n') %
|
||||
(username))
|
||||
s.login(username, password)
|
||||
return s
|
||||
|
||||
class _sendmail(object):
|
||||
'''send mail using sendmail.'''
|
||||
|
||||
def __init__(self, ui, program):
|
||||
self.ui = ui
|
||||
self.program = program
|
||||
|
||||
def sendmail(self, sender, recipients, msg):
|
||||
cmdline = '%s -f %s %s' % (
|
||||
self.program, templater.email(sender),
|
||||
' '.join(map(templater.email, recipients)))
|
||||
self.ui.note(_('sending mail: %s\n') % cmdline)
|
||||
fp = os.popen(cmdline, 'w')
|
||||
fp.write(msg)
|
||||
ret = fp.close()
|
||||
if ret:
|
||||
raise util.Abort('%s %s' % (
|
||||
os.path.basename(self.program.split(None, 1)[0]),
|
||||
util.explain_exit(ret)[0]))
|
||||
|
||||
def connect(ui):
|
||||
'''make a mail connection. object returned has one method, sendmail.
|
||||
call as sendmail(sender, list-of-recipients, msg).'''
|
||||
|
||||
method = ui.config('email', 'method', 'smtp')
|
||||
if method == 'smtp':
|
||||
return smtp(ui)
|
||||
|
||||
return sendmail(ui, method)
|
||||
|
||||
def sendmail(ui, sender, recipients, msg):
|
||||
return connect(ui).sendmail(sender, recipients, msg)
|
@ -7,7 +7,7 @@
|
||||
|
||||
from i18n import gettext as _
|
||||
from demandload import *
|
||||
demandload(globals(), "errno getpass os re smtplib socket sys tempfile")
|
||||
demandload(globals(), "errno getpass os re socket sys tempfile")
|
||||
demandload(globals(), "ConfigParser mdiff templater traceback util")
|
||||
|
||||
class ui(object):
|
||||
@ -281,62 +281,6 @@ class ui(object):
|
||||
|
||||
return t
|
||||
|
||||
def sendmail(self):
|
||||
'''send mail message. object returned has one method, sendmail.
|
||||
call as sendmail(sender, list-of-recipients, msg).'''
|
||||
|
||||
def smtp():
|
||||
'''send mail using smtp.'''
|
||||
|
||||
local_hostname = self.config('smtp', 'local_hostname')
|
||||
s = smtplib.SMTP(local_hostname=local_hostname)
|
||||
mailhost = self.config('smtp', 'host')
|
||||
if not mailhost:
|
||||
raise util.Abort(_('no [smtp]host in hgrc - cannot send mail'))
|
||||
mailport = int(self.config('smtp', 'port', 25))
|
||||
self.note(_('sending mail: smtp host %s, port %s\n') %
|
||||
(mailhost, mailport))
|
||||
s.connect(host=mailhost, port=mailport)
|
||||
if self.configbool('smtp', 'tls'):
|
||||
self.note(_('(using tls)\n'))
|
||||
s.ehlo()
|
||||
s.starttls()
|
||||
s.ehlo()
|
||||
username = self.config('smtp', 'username')
|
||||
password = self.config('smtp', 'password')
|
||||
if username and password:
|
||||
self.note(_('(authenticating to mail server as %s)\n') %
|
||||
(username))
|
||||
s.login(username, password)
|
||||
return s
|
||||
|
||||
class sendmail(object):
|
||||
'''send mail using sendmail.'''
|
||||
|
||||
def __init__(self, ui, program):
|
||||
self.ui = ui
|
||||
self.program = program
|
||||
|
||||
def sendmail(self, sender, recipients, msg):
|
||||
cmdline = '%s -f %s %s' % (
|
||||
self.program, templater.email(sender),
|
||||
' '.join(map(templater.email, recipients)))
|
||||
self.ui.note(_('sending mail: %s\n') % cmdline)
|
||||
fp = os.popen(cmdline, 'w')
|
||||
fp.write(msg)
|
||||
ret = fp.close()
|
||||
if ret:
|
||||
raise util.Abort('%s %s' % (
|
||||
os.path.basename(self.program.split(None, 1)[0]),
|
||||
util.explain_exit(ret)[0]))
|
||||
|
||||
method = self.config('email', 'method', 'smtp')
|
||||
if method == 'smtp':
|
||||
mail = smtp()
|
||||
else:
|
||||
mail = sendmail(self, method)
|
||||
return mail
|
||||
|
||||
def print_exc(self):
|
||||
'''print exception traceback if traceback printing enabled.
|
||||
only to call in exception handler. returns true if traceback
|
||||
|
Loading…
Reference in New Issue
Block a user