##// END OF EJS Templates
mail: split out the SMTP login to allow the keyring extension to wrap it...
Matt Harbison -
r47753:83c0d144 default
parent child Browse files
Show More
@@ -151,20 +151,9 b' def _smtp(ui):'
151 if starttls or smtps:
151 if starttls or smtps:
152 ui.note(_(b'(verifying remote certificate)\n'))
152 ui.note(_(b'(verifying remote certificate)\n'))
153 sslutil.validatesocket(s.sock)
153 sslutil.validatesocket(s.sock)
154 username = ui.config(b'smtp', b'username')
154
155 password = ui.config(b'smtp', b'password')
156 if username:
157 if password:
158 password = encoding.strfromlocal(password)
159 else:
160 password = ui.getpass()
161 if password is not None:
162 password = encoding.strfromlocal(password)
163 if username and password:
164 ui.note(_(b'(authenticating to mail server as %s)\n') % username)
165 username = encoding.strfromlocal(username)
166 try:
155 try:
167 s.login(username, password)
156 _smtp_login(ui, s, mailhost, mailport)
168 except smtplib.SMTPException as inst:
157 except smtplib.SMTPException as inst:
169 raise error.Abort(stringutil.forcebytestr(inst))
158 raise error.Abort(stringutil.forcebytestr(inst))
170
159
@@ -180,6 +169,29 b' def _smtp(ui):'
180 return send
169 return send
181
170
182
171
172 def _smtp_login(ui, smtp, mailhost, mailport):
173 """A hook for the keyring extension to perform the actual SMTP login.
174
175 An already connected SMTP object of the proper type is provided, based on
176 the current configuration. The host and port to which the connection was
177 established are provided for accessibility, since the SMTP object doesn't
178 provide an accessor. ``smtplib.SMTPException`` is raised on error.
179 """
180 username = ui.config(b'smtp', b'username')
181 password = ui.config(b'smtp', b'password')
182 if username:
183 if password:
184 password = encoding.strfromlocal(password)
185 else:
186 password = ui.getpass()
187 if password is not None:
188 password = encoding.strfromlocal(password)
189 if username and password:
190 ui.note(_(b'(authenticating to mail server as %s)\n') % username)
191 username = encoding.strfromlocal(username)
192 smtp.login(username, password)
193
194
183 def _sendmail(ui, sender, recipients, msg):
195 def _sendmail(ui, sender, recipients, msg):
184 '''send mail using sendmail.'''
196 '''send mail using sendmail.'''
185 program = ui.config(b'email', b'method')
197 program = ui.config(b'email', b'method')
General Comments 0
You need to be logged in to leave comments. Login now