Show More
@@ -135,6 +135,20 b' email::' | |||
|
135 | 135 | from;; |
|
136 | 136 | Optional. Email address to use in "From" header and SMTP envelope |
|
137 | 137 | of outgoing messages. |
|
138 | method;; | |
|
139 | Optional. Method to use to send email messages. If value is | |
|
140 | "smtp" (default), use SMTP (see section "[mail]" for | |
|
141 | configuration). Otherwise, use as name of program to run that | |
|
142 | acts like sendmail (takes "-f" option for sender, list of | |
|
143 | recipients on command line, message on stdin). Normally, setting | |
|
144 | this to "sendmail" or "/usr/sbin/sendmail" is enough to use | |
|
145 | sendmail to send messages. | |
|
146 | ||
|
147 | Email example: | |
|
148 | ||
|
149 | [email] | |
|
150 | from = Joseph User <joe.user@example.com> | |
|
151 | method = /usr/sbin/sendmail | |
|
138 | 152 | |
|
139 | 153 | extensions:: |
|
140 | 154 | Mercurial has an extension mechanism for adding new features. To |
@@ -254,8 +254,6 b' def patchbomb(ui, repo, *revs, **opts):' | |||
|
254 | 254 | else: |
|
255 | 255 | ui.status('Sending ', m['Subject'], ' ...\n') |
|
256 | 256 | mail.sendmail(sender, to + cc, m.as_string(0)) |
|
257 | if not opts['test'] and not opts['mbox']: | |
|
258 | mail.close() | |
|
259 | 257 | |
|
260 | 258 | cmdtable = { |
|
261 | 259 | 'email': |
@@ -8,7 +8,8 b'' | |||
|
8 | 8 | import ConfigParser |
|
9 | 9 | from i18n import gettext as _ |
|
10 | 10 | from demandload import * |
|
11 |
demandload(globals(), "errno getpass os re smtplib socket sys tempfile |
|
|
11 | demandload(globals(), "errno getpass os re smtplib socket sys tempfile") | |
|
12 | demandload(globals(), "templater util") | |
|
12 | 13 | |
|
13 | 14 | class ui(object): |
|
14 | 15 | def __init__(self, verbose=False, debug=False, quiet=False, |
@@ -270,17 +271,56 b' class ui(object):' | |||
|
270 | 271 | return t |
|
271 | 272 | |
|
272 | 273 | def sendmail(self): |
|
273 | s = smtplib.SMTP() | |
|
274 | mailhost = self.config('smtp', 'host') | |
|
275 | if not mailhost: | |
|
276 | raise util.Abort(_('no [smtp]host in hgrc - cannot send mail')) | |
|
277 | s.connect(host=mailhost, port=int(self.config('smtp', 'port', 25))) | |
|
278 | if self.configbool('smtp', 'tls'): | |
|
279 |
s. |
|
|
280 | s.starttls() | |
|
281 | s.ehlo() | |
|
282 | username = self.config('smtp', 'username') | |
|
283 |
|
|
|
284 | if username and password: | |
|
285 | s.login(username, password) | |
|
286 | return s | |
|
274 | '''send mail message. object returned has one method, sendmail. | |
|
275 | call as sendmail(sender, list-of-recipients, msg).''' | |
|
276 | ||
|
277 | def smtp(): | |
|
278 | '''send mail using smtp.''' | |
|
279 | ||
|
280 | s = smtplib.SMTP() | |
|
281 | mailhost = self.config('smtp', 'host') | |
|
282 | if not mailhost: | |
|
283 | raise util.Abort(_('no [smtp]host in hgrc - cannot send mail')) | |
|
284 | mailport = int(self.config('smtp', 'port', 25)) | |
|
285 | self.note(_('sending mail: smtp host %s, port %s\n') % | |
|
286 | (mailhost, mailport)) | |
|
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 |
General Comments 0
You need to be logged in to leave comments.
Login now