@@ -129,19 +129,6 @@ def _finalize_set(msg, disposition, filename, cid, params):
129129 msg .set_param (key , value )
130130
131131
132- # XXX: This is a cleaned-up version of base64mime.body_encode (including a bug
133- # fix in the calculation of unencoded_bytes_per_line). It would be nice to
134- # drop both this and quoprimime.body_encode in favor of enhanced binascii
135- # routines that accepted a max_line_length parameter.
136- def _encode_base64 (data , max_line_length ):
137- encoded_lines = []
138- unencoded_bytes_per_line = max_line_length // 4 * 3
139- for i in range (0 , len (data ), unencoded_bytes_per_line ):
140- thisline = data [i :i + unencoded_bytes_per_line ]
141- encoded_lines .append (binascii .b2a_base64 (thisline ).decode ('ascii' ))
142- return '' .join (encoded_lines )
143-
144-
145132def _encode_text (string , charset , cte , policy ):
146133 # If max_line_length is 0 or None, there is no limit.
147134 maxlen = policy .max_line_length or sys .maxsize
@@ -176,7 +163,7 @@ def normal_body(lines): return b'\n'.join(lines) + b'\n'
176163 data = quoprimime .body_encode (normal_body (lines ).decode ('latin-1' ),
177164 maxlen )
178165 elif cte == 'base64' :
179- data = _encode_base64 (embedded_body (lines ), maxlen )
166+ data = binascii . b2a_base64 (embedded_body (lines ), wrapcol = maxlen ). decode ( 'ascii' )
180167 else :
181168 raise ValueError ("Unknown content transfer encoding {}" .format (cte ))
182169 return cte , data
@@ -234,7 +221,8 @@ def set_bytes_content(msg, data, maintype, subtype, cte='base64',
234221 params = None , headers = None ):
235222 _prepare_set (msg , maintype , subtype , headers )
236223 if cte == 'base64' :
237- data = _encode_base64 (data , max_line_length = msg .policy .max_line_length )
224+ data = binascii .b2a_base64 (data , wrapcol = msg .policy .max_line_length )
225+ data = data .decode ('ascii' )
238226 elif cte == 'quoted-printable' :
239227 # XXX: quoprimime.body_encode won't encode newline characters in data,
240228 # so we can't use it. This means max_line_length is ignored. Another
0 commit comments