[Updated] D10471: mail: split out the SMTP login to allow the keyring extension to wrap it
mharbison72 (Matt Harbison)
phabricator at mercurial-scm.org
Tue Apr 20 14:23:47 UTC 2021
Closed by commit rHG83c0d144ef8d: mail: split out the SMTP login to allow the keyring extension to wrap it (authored by mharbison72).
This revision was automatically updated to reflect the committed changes.
This revision was not accepted when it landed; it landed in state "Needs Review".
REPOSITORY
rHG Mercurial
CHANGES SINCE LAST UPDATE
https://phab.mercurial-scm.org/D10471?vs=27062&id=27124
CHANGES SINCE LAST ACTION
https://phab.mercurial-scm.org/D10471/new/
REVISION DETAIL
https://phab.mercurial-scm.org/D10471
AFFECTED FILES
mercurial/mail.py
CHANGE DETAILS
diff --git a/mercurial/mail.py b/mercurial/mail.py
--- a/mercurial/mail.py
+++ b/mercurial/mail.py
@@ -151,6 +151,32 @@
if starttls or smtps:
ui.note(_(b'(verifying remote certificate)\n'))
sslutil.validatesocket(s.sock)
+
+ try:
+ _smtp_login(ui, s, mailhost, mailport)
+ except smtplib.SMTPException as inst:
+ raise error.Abort(stringutil.forcebytestr(inst))
+
+ def send(sender, recipients, msg):
+ try:
+ return s.sendmail(sender, recipients, msg)
+ except smtplib.SMTPRecipientsRefused as inst:
+ recipients = [r[1] for r in inst.recipients.values()]
+ raise error.Abort(b'\n' + b'\n'.join(recipients))
+ except smtplib.SMTPException as inst:
+ raise error.Abort(inst)
+
+ return send
+
+
+def _smtp_login(ui, smtp, mailhost, mailport):
+ """A hook for the keyring extension to perform the actual SMTP login.
+
+ An already connected SMTP object of the proper type is provided, based on
+ the current configuration. The host and port to which the connection was
+ established are provided for accessibility, since the SMTP object doesn't
+ provide an accessor. ``smtplib.SMTPException`` is raised on error.
+ """
username = ui.config(b'smtp', b'username')
password = ui.config(b'smtp', b'password')
if username:
@@ -163,21 +189,7 @@
if username and password:
ui.note(_(b'(authenticating to mail server as %s)\n') % username)
username = encoding.strfromlocal(username)
- try:
- s.login(username, password)
- except smtplib.SMTPException as inst:
- raise error.Abort(stringutil.forcebytestr(inst))
-
- def send(sender, recipients, msg):
- try:
- return s.sendmail(sender, recipients, msg)
- except smtplib.SMTPRecipientsRefused as inst:
- recipients = [r[1] for r in inst.recipients.values()]
- raise error.Abort(b'\n' + b'\n'.join(recipients))
- except smtplib.SMTPException as inst:
- raise error.Abort(inst)
-
- return send
+ smtp.login(username, password)
def _sendmail(ui, sender, recipients, msg):
To: mharbison72, #hg-reviewers, marmoute
Cc: mercurial-patches
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mercurial-scm.org/pipermail/mercurial-patches/attachments/20210420/6c8362e2/attachment-0002.html>
More information about the Mercurial-patches
mailing list