Skip to content
  • Denis Laxalde's avatar
    [py3] Pass bytes as "msg" to smtplib.SMTP.sendmail() · 9fb4a71f119d
    Denis Laxalde authored
    When passing a unicode string to smtplib.SMTP.sendmail() as "msg"
    argument, there is an implicit bytes encoding using "ascii" encoding in
    python3. Of course this does not work if the string contains non-ASCII
    characters. In fact, config's sendmails method intent to pass bytes to
    smtplib.SMTP.sendmail() as it uses msg.as_string() method.
    Unfortunately, in python3, this method returns a unicode string whereas
    it returns a bytes string in python2; we thus fix this by calling
    as_bytes() method on python3.
    
    As there is no "as_bytes" method in python2, we need to handle python2
    compatibility by hand and either call as_string() or as_bytes().
    
    In testlib, where we mock smtplib.SMTP, we need to keep the "msg"
    argument of Email class (defined in testlib as well) a unicode string.
    Otherwise, it fails to be parsed by email.message_from_string() (from
    stdlib) if it is bytes on python3.
    9fb4a71f119d