| 
									
										
										
										
											2024-11-12 15:59:19 +02:00
										 |  |  | # Copyright (C) 2001 Python Software Foundation | 
					
						
							| 
									
										
										
										
											2007-08-30 01:15:14 +00:00
										 |  |  | # Author: Barry Warsaw | 
					
						
							|  |  |  | # Contact: email-sig@python.org | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | """Encodings and related functions.""" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | __all__ = [ | 
					
						
							|  |  |  |     'encode_7or8bit', | 
					
						
							|  |  |  |     'encode_base64', | 
					
						
							|  |  |  |     'encode_noop', | 
					
						
							|  |  |  |     'encode_quopri', | 
					
						
							|  |  |  |     ] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-03-16 15:52:22 -04:00
										 |  |  | from base64 import encodebytes as _bencode | 
					
						
							| 
									
										
										
										
											2007-08-30 01:15:14 +00:00
										 |  |  | from quopri import encodestring as _encodestring | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def _qencode(s): | 
					
						
							|  |  |  |     enc = _encodestring(s, quotetabs=True) | 
					
						
							|  |  |  |     # Must encode spaces, which quopri.encodestring() doesn't do | 
					
						
							| 
									
										
										
										
											2013-06-27 18:37:00 -04:00
										 |  |  |     return enc.replace(b' ', b'=20') | 
					
						
							| 
									
										
										
										
											2007-08-30 01:15:14 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def encode_base64(msg): | 
					
						
							|  |  |  |     """Encode the message's payload in Base64.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     Also, add an appropriate Content-Transfer-Encoding header. | 
					
						
							|  |  |  |     """
 | 
					
						
							| 
									
										
										
										
											2013-08-21 21:10:31 -04:00
										 |  |  |     orig = msg.get_payload(decode=True) | 
					
						
							| 
									
										
										
										
											2010-06-04 16:11:08 +00:00
										 |  |  |     encdata = str(_bencode(orig), 'ascii') | 
					
						
							| 
									
										
										
										
											2007-08-30 01:15:14 +00:00
										 |  |  |     msg.set_payload(encdata) | 
					
						
							|  |  |  |     msg['Content-Transfer-Encoding'] = 'base64' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def encode_quopri(msg): | 
					
						
							|  |  |  |     """Encode the message's payload in quoted-printable.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     Also, add an appropriate Content-Transfer-Encoding header. | 
					
						
							|  |  |  |     """
 | 
					
						
							| 
									
										
										
										
											2013-08-21 21:10:31 -04:00
										 |  |  |     orig = msg.get_payload(decode=True) | 
					
						
							| 
									
										
										
										
											2007-08-30 01:15:14 +00:00
										 |  |  |     encdata = _qencode(orig) | 
					
						
							| 
									
										
										
										
											2013-08-21 21:10:31 -04:00
										 |  |  |     msg.set_payload(encdata) | 
					
						
							| 
									
										
										
										
											2007-08-30 01:15:14 +00:00
										 |  |  |     msg['Content-Transfer-Encoding'] = 'quoted-printable' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def encode_7or8bit(msg): | 
					
						
							|  |  |  |     """Set the Content-Transfer-Encoding header to 7bit or 8bit.""" | 
					
						
							| 
									
										
										
										
											2013-08-21 21:10:31 -04:00
										 |  |  |     orig = msg.get_payload(decode=True) | 
					
						
							| 
									
										
										
										
											2007-08-30 01:15:14 +00:00
										 |  |  |     if orig is None: | 
					
						
							|  |  |  |         # There's no payload.  For backwards compatibility we use 7bit | 
					
						
							|  |  |  |         msg['Content-Transfer-Encoding'] = '7bit' | 
					
						
							|  |  |  |         return | 
					
						
							| 
									
										
										
										
											2013-12-12 21:40:20 -05:00
										 |  |  |     # We play a trick to make this go fast.  If decoding from ASCII succeeds, | 
					
						
							|  |  |  |     # we know the data must be 7bit, otherwise treat it as 8bit. | 
					
						
							| 
									
										
										
										
											2007-08-30 01:15:14 +00:00
										 |  |  |     try: | 
					
						
							| 
									
										
										
										
											2013-12-12 21:40:20 -05:00
										 |  |  |         orig.decode('ascii') | 
					
						
							| 
									
										
										
										
											2007-08-30 01:15:14 +00:00
										 |  |  |     except UnicodeError: | 
					
						
							| 
									
										
										
										
											2013-12-12 21:40:20 -05:00
										 |  |  |         msg['Content-Transfer-Encoding'] = '8bit' | 
					
						
							| 
									
										
										
										
											2007-08-30 01:15:14 +00:00
										 |  |  |     else: | 
					
						
							|  |  |  |         msg['Content-Transfer-Encoding'] = '7bit' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def encode_noop(msg): | 
					
						
							|  |  |  |     """Do nothing.""" |