| 
									
										
										
										
											2009-05-23 01:30:26 +00:00
										 |  |  | import unittest | 
					
						
							|  |  |  | from test import support | 
					
						
							| 
									
										
										
										
											2020-06-26 01:17:57 +08:00
										 |  |  | from test.support import import_helper | 
					
						
							| 
									
										
										
										
											2020-04-29 10:36:20 +03:00
										 |  |  | from test.support import socket_helper | 
					
						
							| 
									
										
										
										
											2024-04-17 14:31:48 +01:00
										 |  |  | import os | 
					
						
							| 
									
										
										
										
											2009-05-23 01:30:26 +00:00
										 |  |  | import smtplib | 
					
						
							| 
									
										
										
										
											2013-12-02 20:44:17 +01:00
										 |  |  | import socket | 
					
						
							| 
									
										
										
										
											2011-05-18 20:02:50 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-06-26 01:17:57 +08:00
										 |  |  | ssl = import_helper.import_module("ssl") | 
					
						
							| 
									
										
										
										
											2009-05-23 01:30:26 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-05-23 02:36:15 +00:00
										 |  |  | support.requires("network") | 
					
						
							| 
									
										
										
										
											2009-05-23 01:30:26 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-04-17 14:31:48 +01:00
										 |  |  | SMTP_TEST_SERVER = os.getenv('CPYTHON_TEST_SMTP_SERVER', 'smtp.gmail.com') | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-12-02 20:44:17 +01:00
										 |  |  | def check_ssl_verifiy(host, port): | 
					
						
							|  |  |  |     context = ssl.create_default_context() | 
					
						
							|  |  |  |     with socket.create_connection((host, port)) as sock: | 
					
						
							|  |  |  |         try: | 
					
						
							|  |  |  |             sock = context.wrap_socket(sock, server_hostname=host) | 
					
						
							|  |  |  |         except Exception: | 
					
						
							|  |  |  |             return False | 
					
						
							|  |  |  |         else: | 
					
						
							|  |  |  |             sock.close() | 
					
						
							|  |  |  |             return True | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-05-18 18:03:09 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | class SmtpTest(unittest.TestCase): | 
					
						
							| 
									
										
										
										
											2024-04-17 14:31:48 +01:00
										 |  |  |     testServer = SMTP_TEST_SERVER | 
					
						
							| 
									
										
										
										
											2015-03-02 07:40:36 +02:00
										 |  |  |     remotePort = 587 | 
					
						
							| 
									
										
										
										
											2011-05-18 18:03:09 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def test_connect_starttls(self): | 
					
						
							|  |  |  |         support.get_attribute(smtplib, 'SMTP_SSL') | 
					
						
							| 
									
										
										
										
											2017-09-15 20:27:30 +02:00
										 |  |  |         context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT) | 
					
						
							|  |  |  |         context.check_hostname = False | 
					
						
							|  |  |  |         context.verify_mode = ssl.CERT_NONE | 
					
						
							| 
									
										
										
										
											2020-04-29 10:36:20 +03:00
										 |  |  |         with socket_helper.transient_internet(self.testServer): | 
					
						
							| 
									
										
										
										
											2011-05-18 18:03:09 +02:00
										 |  |  |             server = smtplib.SMTP(self.testServer, self.remotePort) | 
					
						
							| 
									
										
										
										
											2011-07-30 23:46:54 +02:00
										 |  |  |             try: | 
					
						
							| 
									
										
										
										
											2013-12-02 20:44:17 +01:00
										 |  |  |                 server.starttls(context=context) | 
					
						
							| 
									
										
										
										
											2011-07-30 23:46:54 +02:00
										 |  |  |             except smtplib.SMTPException as e: | 
					
						
							|  |  |  |                 if e.args[0] == 'STARTTLS extension not supported by server.': | 
					
						
							|  |  |  |                     unittest.skip(e.args[0]) | 
					
						
							|  |  |  |                 else: | 
					
						
							|  |  |  |                     raise | 
					
						
							| 
									
										
										
										
											2011-05-18 18:04:04 +02:00
										 |  |  |             server.ehlo() | 
					
						
							|  |  |  |             server.quit() | 
					
						
							| 
									
										
										
										
											2011-05-18 18:03:09 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-05-23 01:30:26 +00:00
										 |  |  | class SmtpSSLTest(unittest.TestCase): | 
					
						
							| 
									
										
										
										
											2024-04-17 14:31:48 +01:00
										 |  |  |     testServer = SMTP_TEST_SERVER | 
					
						
							| 
									
										
										
										
											2009-05-23 01:30:26 +00:00
										 |  |  |     remotePort = 465 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_connect(self): | 
					
						
							| 
									
										
										
										
											2009-05-23 02:36:15 +00:00
										 |  |  |         support.get_attribute(smtplib, 'SMTP_SSL') | 
					
						
							| 
									
										
										
										
											2020-04-29 10:36:20 +03:00
										 |  |  |         with socket_helper.transient_internet(self.testServer): | 
					
						
							| 
									
										
										
										
											2010-10-13 17:14:16 +00:00
										 |  |  |             server = smtplib.SMTP_SSL(self.testServer, self.remotePort) | 
					
						
							| 
									
										
										
										
											2011-05-18 18:04:04 +02:00
										 |  |  |             server.ehlo() | 
					
						
							|  |  |  |             server.quit() | 
					
						
							| 
									
										
										
										
											2009-05-23 01:30:26 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-05-07 19:39:37 +02:00
										 |  |  |     def test_connect_default_port(self): | 
					
						
							|  |  |  |         support.get_attribute(smtplib, 'SMTP_SSL') | 
					
						
							| 
									
										
										
										
											2020-04-29 10:36:20 +03:00
										 |  |  |         with socket_helper.transient_internet(self.testServer): | 
					
						
							| 
									
										
										
										
											2011-05-07 19:39:37 +02:00
										 |  |  |             server = smtplib.SMTP_SSL(self.testServer) | 
					
						
							| 
									
										
										
										
											2011-05-18 18:04:04 +02:00
										 |  |  |             server.ehlo() | 
					
						
							|  |  |  |             server.quit() | 
					
						
							| 
									
										
										
										
											2011-05-07 19:39:37 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-09-05 17:56:30 +03:00
										 |  |  |     @support.requires_resource('walltime') | 
					
						
							| 
									
										
										
										
											2011-05-18 18:03:09 +02:00
										 |  |  |     def test_connect_using_sslcontext(self): | 
					
						
							| 
									
										
										
										
											2017-09-15 20:27:30 +02:00
										 |  |  |         context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT) | 
					
						
							|  |  |  |         context.check_hostname = False | 
					
						
							|  |  |  |         context.verify_mode = ssl.CERT_NONE | 
					
						
							| 
									
										
										
										
											2013-12-02 20:44:17 +01:00
										 |  |  |         support.get_attribute(smtplib, 'SMTP_SSL') | 
					
						
							| 
									
										
										
										
											2020-04-29 10:36:20 +03:00
										 |  |  |         with socket_helper.transient_internet(self.testServer): | 
					
						
							| 
									
										
										
										
											2013-12-02 20:44:17 +01:00
										 |  |  |             server = smtplib.SMTP_SSL(self.testServer, self.remotePort, context=context) | 
					
						
							|  |  |  |             server.ehlo() | 
					
						
							|  |  |  |             server.quit() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def test_connect_using_sslcontext_verified(self): | 
					
						
							| 
									
										
										
										
											2020-04-29 10:36:20 +03:00
										 |  |  |         with socket_helper.transient_internet(self.testServer): | 
					
						
							| 
									
										
										
										
											2014-09-04 00:35:43 +02:00
										 |  |  |             can_verify = check_ssl_verifiy(self.testServer, self.remotePort) | 
					
						
							|  |  |  |             if not can_verify: | 
					
						
							|  |  |  |                 self.skipTest("SSL certificate can't be verified") | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-05-18 18:03:09 +02:00
										 |  |  |         support.get_attribute(smtplib, 'SMTP_SSL') | 
					
						
							| 
									
										
										
										
											2013-12-02 20:44:17 +01:00
										 |  |  |         context = ssl.create_default_context() | 
					
						
							| 
									
										
										
										
											2020-04-29 10:36:20 +03:00
										 |  |  |         with socket_helper.transient_internet(self.testServer): | 
					
						
							| 
									
										
										
										
											2013-12-02 20:44:17 +01:00
										 |  |  |             server = smtplib.SMTP_SSL(self.testServer, self.remotePort, context=context) | 
					
						
							| 
									
										
										
										
											2011-05-18 18:04:04 +02:00
										 |  |  |             server.ehlo() | 
					
						
							|  |  |  |             server.quit() | 
					
						
							| 
									
										
										
										
											2011-05-18 18:03:09 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-05-23 01:30:26 +00:00
										 |  |  | if __name__ == "__main__": | 
					
						
							| 
									
										
										
										
											2015-04-13 15:00:43 -05:00
										 |  |  |     unittest.main() |