Mercurial > public > mercurial-scm > hg
comparison mercurial/ui.py @ 2292:903ab41ac7eb
allow to send email using sendmail.
default is still smtp.
update hgrc doc with sendmail info.
author | Vadim Gelfer <vadim.gelfer@gmail.com> |
---|---|
date | Mon, 15 May 2006 10:25:17 -0700 |
parents | 9f745d3675d4 |
children | 3dc6f2501dbc |
comparison
equal
deleted
inserted
replaced
2291:1cad19678b4c | 2292:903ab41ac7eb |
---|---|
6 # of the GNU General Public License, incorporated herein by reference. | 6 # of the GNU General Public License, incorporated herein by reference. |
7 | 7 |
8 import ConfigParser | 8 import ConfigParser |
9 from i18n import gettext as _ | 9 from i18n import gettext as _ |
10 from demandload import * | 10 from demandload import * |
11 demandload(globals(), "errno getpass os re smtplib socket sys tempfile util") | 11 demandload(globals(), "errno getpass os re smtplib socket sys tempfile") |
12 demandload(globals(), "templater util") | |
12 | 13 |
13 class ui(object): | 14 class ui(object): |
14 def __init__(self, verbose=False, debug=False, quiet=False, | 15 def __init__(self, verbose=False, debug=False, quiet=False, |
15 interactive=True, traceback=False, parentui=None): | 16 interactive=True, traceback=False, parentui=None): |
16 self.overlay = {} | 17 self.overlay = {} |
268 os.unlink(name) | 269 os.unlink(name) |
269 | 270 |
270 return t | 271 return t |
271 | 272 |
272 def sendmail(self): | 273 def sendmail(self): |
273 s = smtplib.SMTP() | 274 '''send mail message. object returned has one method, sendmail. |
274 mailhost = self.config('smtp', 'host') | 275 call as sendmail(sender, list-of-recipients, msg).''' |
275 if not mailhost: | 276 |
276 raise util.Abort(_('no [smtp]host in hgrc - cannot send mail')) | 277 def smtp(): |
277 s.connect(host=mailhost, port=int(self.config('smtp', 'port', 25))) | 278 '''send mail using smtp.''' |
278 if self.configbool('smtp', 'tls'): | 279 |
279 s.ehlo() | 280 s = smtplib.SMTP() |
280 s.starttls() | 281 mailhost = self.config('smtp', 'host') |
281 s.ehlo() | 282 if not mailhost: |
282 username = self.config('smtp', 'username') | 283 raise util.Abort(_('no [smtp]host in hgrc - cannot send mail')) |
283 password = self.config('smtp', 'password') | 284 mailport = int(self.config('smtp', 'port', 25)) |
284 if username and password: | 285 self.note(_('sending mail: smtp host %s, port %s\n') % |
285 s.login(username, password) | 286 (mailhost, mailport)) |
286 return s | 287 s.connect(host=mailhost, port=mailport) |
288 if self.configbool('smtp', 'tls'): | |
289 self.note(_('(using tls)\n')) | |
290 s.ehlo() | |
291 s.starttls() | |
292 s.ehlo() | |
293 username = self.config('smtp', 'username') | |
294 password = self.config('smtp', 'password') | |
295 if username and password: | |
296 self.note(_('(authenticating to mail server as %s)\n') % | |
297 (username)) | |
298 s.login(username, password) | |
299 return s | |
300 | |
301 class sendmail(object): | |
302 '''send mail using sendmail.''' | |
303 | |
304 def __init__(self, ui, program): | |
305 self.ui = ui | |
306 self.program = program | |
307 | |
308 def sendmail(self, sender, recipients, msg): | |
309 cmdline = '%s -f %s %s' % ( | |
310 self.program, templater.email(sender), | |
311 ' '.join(map(templater.email, recipients))) | |
312 self.ui.note(_('sending mail: %s\n') % cmdline) | |
313 fp = os.popen(cmdline, 'w') | |
314 fp.write(msg) | |
315 ret = fp.close() | |
316 if ret: | |
317 raise util.Abort('%s %s' % ( | |
318 os.path.basename(self.program.split(None, 1)[0]), | |
319 util.explain_exit(ret)[0])) | |
320 | |
321 method = self.config('email', 'method', 'smtp') | |
322 if method == 'smtp': | |
323 mail = smtp() | |
324 else: | |
325 mail = sendmail(self, method) | |
326 return mail |