changeset 2200:9f43b6e24232

move mail sending code into core, so extensions can share it. document hgrc settings used.
author Vadim Gelfer <vadim.gelfer@gmail.com>
date Thu, 04 May 2006 12:23:01 -0700
parents f1986a61ccff
children f15056b29472
files doc/hgrc.5.txt hgext/patchbomb.py mercurial/ui.py
diffstat 3 files changed, 43 insertions(+), 25 deletions(-) [+]
line wrap: on
line diff
--- a/doc/hgrc.5.txt	Thu May 04 12:02:32 2006 -0700
+++ b/doc/hgrc.5.txt	Thu May 04 12:23:01 2006 -0700
@@ -130,6 +130,12 @@
     # them to the working dir
     **.txt = tempfile: unix2dos -n INFILE OUTFILE
 
+email::
+  Settings for extensions that send email messages.
+  from;;
+    Optional.  Email address to use in "From" header and SMTP envelope
+    of outgoing messages.
+
 hooks::
   Commands or Python functions that get automatically executed by
   various actions such as starting or finishing a commit. Multiple
@@ -240,6 +246,24 @@
   user;;
     Optional.  User name to authenticate with at the proxy server.
 
+smtp::
+  Configuration for extensions that need to send email messages.
+  host;;
+    Optional.  Host name of mail server.  Default: "mail".
+  port;;
+    Optional.  Port to connect to on mail server.  Default: 25.
+  tls;;
+    Optional.  Whether to connect to mail server using TLS.  True or
+    False.  Default: False.
+  username;;
+    Optional.  User name to authenticate to SMTP server with.
+    If username is specified, password must also be specified.
+    Default: none.
+  password;;
+    Optional.  Password to authenticate to SMTP server with.
+    If username is specified, password must also be specified.
+    Default: none.
+
 paths::
   Assigns symbolic names to repositories.  The left side is the
   symbolic name, and the right gives the directory or URL that is the
--- a/hgext/patchbomb.py	Thu May 04 12:02:32 2006 -0700
+++ b/hgext/patchbomb.py	Thu May 04 12:23:01 2006 -0700
@@ -31,16 +31,6 @@
 # the messages directly. This can be reviewed e.g. with "mutt -R -f mbox",
 # and finally sent with "formail -s sendmail -bm -t < mbox".
 #
-# To configure a default mail host, add a section like this to your
-# hgrc file:
-#
-# [smtp]
-# host = my_mail_host
-# port = 1025
-# tls = yes # or omit if not needed
-# username = user     # if SMTP authentication required
-# password = password # if SMTP authentication required - PLAINTEXT
-#
 # To configure other defaults, add a section like this to your hgrc
 # file:
 #
@@ -52,7 +42,7 @@
 from mercurial.demandload import *
 demandload(globals(), '''email.MIMEMultipart email.MIMEText email.Utils
                          mercurial:commands,hg,ui
-                         os errno popen2 smtplib socket sys tempfile time''')
+                         os errno popen2 socket sys tempfile time''')
 from mercurial.i18n import gettext as _
 
 try:
@@ -225,17 +215,7 @@
     ui.write('\n')
 
     if not opts['test'] and not opts['mbox']:
-        s = smtplib.SMTP()
-        s.connect(host = ui.config('smtp', 'host', 'mail'),
-                  port = int(ui.config('smtp', 'port', 25)))
-        if ui.configbool('smtp', 'tls'):
-            s.ehlo()
-            s.starttls()
-            s.ehlo()
-        username = ui.config('smtp', 'username')
-        password = ui.config('smtp', 'password')
-        if username and password:
-            s.login(username, password)
+        mail = ui.sendmail()
     parent = None
     tz = time.strftime('%z')
     sender_addr = email.Utils.parseaddr(sender)[1]
@@ -273,9 +253,9 @@
             fp.close()
         else:
             ui.status('Sending ', m['Subject'], ' ...\n')
-            s.sendmail(sender, to + cc, m.as_string(0))
+            mail.sendmail(sender, to + cc, m.as_string(0))
     if not opts['test'] and not opts['mbox']:
-        s.close()
+        mail.close()
 
 cmdtable = {
     'email':
--- a/mercurial/ui.py	Thu May 04 12:02:32 2006 -0700
+++ b/mercurial/ui.py	Thu May 04 12:23:01 2006 -0700
@@ -8,7 +8,7 @@
 import ConfigParser
 from i18n import gettext as _
 from demandload import *
-demandload(globals(), "errno os re socket sys tempfile util")
+demandload(globals(), "errno os re smtplib socket sys tempfile util")
 
 class ui(object):
     def __init__(self, verbose=False, debug=False, quiet=False,
@@ -264,3 +264,17 @@
             os.unlink(name)
 
         return t
+
+    def sendmail(self):
+        s = smtplib.SMTP()
+        s.connect(host = self.config('smtp', 'host', 'mail'),
+                  port = int(self.config('smtp', 'port', 25)))
+        if self.configbool('smtp', 'tls'):
+            s.ehlo()
+            s.starttls()
+            s.ehlo()
+        username = self.config('smtp', 'username')
+        password = self.config('smtp', 'password')
+        if username and password:
+            s.login(username, password)
+        return s