mirror of
https://github.com/python/cpython.git
synced 2025-08-31 05:58:33 +00:00
bpo-34246: Use no mutable default args in smtplib (GH-8554)
Some methods of the SMTP class use mutable default arguments. Specially `send_message` is affected as it mutates one of the args by appending items to it, which has side effects on further calls.
This commit is contained in:
parent
4e519377b1
commit
d5fbe9b1a3
5 changed files with 39 additions and 8 deletions
|
@ -513,7 +513,7 @@ class SMTP:
|
|||
"""SMTP 'noop' command -- doesn't do anything :>"""
|
||||
return self.docmd("noop")
|
||||
|
||||
def mail(self, sender, options=[]):
|
||||
def mail(self, sender, options=()):
|
||||
"""SMTP 'mail' command -- begins mail xfer session.
|
||||
|
||||
This method may raise the following exceptions:
|
||||
|
@ -534,7 +534,7 @@ class SMTP:
|
|||
self.putcmd("mail", "FROM:%s%s" % (quoteaddr(sender), optionlist))
|
||||
return self.getreply()
|
||||
|
||||
def rcpt(self, recip, options=[]):
|
||||
def rcpt(self, recip, options=()):
|
||||
"""SMTP 'rcpt' command -- indicates 1 recipient for this mail."""
|
||||
optionlist = ''
|
||||
if options and self.does_esmtp:
|
||||
|
@ -785,8 +785,8 @@ class SMTP:
|
|||
raise SMTPResponseException(resp, reply)
|
||||
return (resp, reply)
|
||||
|
||||
def sendmail(self, from_addr, to_addrs, msg, mail_options=[],
|
||||
rcpt_options=[]):
|
||||
def sendmail(self, from_addr, to_addrs, msg, mail_options=(),
|
||||
rcpt_options=()):
|
||||
"""This command performs an entire mail transaction.
|
||||
|
||||
The arguments are:
|
||||
|
@ -890,7 +890,7 @@ class SMTP:
|
|||
return senderrs
|
||||
|
||||
def send_message(self, msg, from_addr=None, to_addrs=None,
|
||||
mail_options=[], rcpt_options={}):
|
||||
mail_options=(), rcpt_options=()):
|
||||
"""Converts message to a bytestring and passes it to sendmail.
|
||||
|
||||
The arguments are as for sendmail, except that msg is an
|
||||
|
@ -958,7 +958,7 @@ class SMTP:
|
|||
if international:
|
||||
g = email.generator.BytesGenerator(
|
||||
bytesmsg, policy=msg.policy.clone(utf8=True))
|
||||
mail_options += ['SMTPUTF8', 'BODY=8BITMIME']
|
||||
mail_options = (*mail_options, 'SMTPUTF8', 'BODY=8BITMIME')
|
||||
else:
|
||||
g = email.generator.BytesGenerator(bytesmsg)
|
||||
g.flatten(msg_copy, linesep='\r\n')
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue