blob: 15654f28dfbeeab137b83a6712f2ba199a57327c [file] [log] [blame]
R. David Murray87e20742009-05-23 01:30:26 +00001import unittest
2from test import support
3import smtplib
Christian Heimesa5768f72013-12-02 20:44:17 +01004import socket
Antoine Pitrou0d38f2e2011-05-18 20:02:50 +02005
6ssl = support.import_module("ssl")
R. David Murray87e20742009-05-23 01:30:26 +00007
R. David Murrayeccb2ce2009-05-23 02:36:15 +00008support.requires("network")
R. David Murray87e20742009-05-23 01:30:26 +00009
Christian Heimesa5768f72013-12-02 20:44:17 +010010def check_ssl_verifiy(host, port):
11 context = ssl.create_default_context()
12 with socket.create_connection((host, port)) as sock:
13 try:
14 sock = context.wrap_socket(sock, server_hostname=host)
15 except Exception:
16 return False
17 else:
18 sock.close()
19 return True
20
Antoine Pitroue0650202011-05-18 18:03:09 +020021
22class SmtpTest(unittest.TestCase):
23 testServer = 'smtp.gmail.com'
Berker Peksaged0392a2015-03-02 07:40:36 +020024 remotePort = 587
Antoine Pitroue0650202011-05-18 18:03:09 +020025
26 def test_connect_starttls(self):
27 support.get_attribute(smtplib, 'SMTP_SSL')
Christian Heimesa5768f72013-12-02 20:44:17 +010028 context = ssl.SSLContext(ssl.PROTOCOL_SSLv23)
Antoine Pitroue0650202011-05-18 18:03:09 +020029 with support.transient_internet(self.testServer):
30 server = smtplib.SMTP(self.testServer, self.remotePort)
Nadeem Vawda3fc58682011-07-30 23:46:54 +020031 try:
Christian Heimesa5768f72013-12-02 20:44:17 +010032 server.starttls(context=context)
Nadeem Vawda3fc58682011-07-30 23:46:54 +020033 except smtplib.SMTPException as e:
34 if e.args[0] == 'STARTTLS extension not supported by server.':
35 unittest.skip(e.args[0])
36 else:
37 raise
Antoine Pitroucc9ca222011-05-18 18:04:04 +020038 server.ehlo()
39 server.quit()
Antoine Pitroue0650202011-05-18 18:03:09 +020040
41
R. David Murray87e20742009-05-23 01:30:26 +000042class SmtpSSLTest(unittest.TestCase):
43 testServer = 'smtp.gmail.com'
44 remotePort = 465
45
46 def test_connect(self):
R. David Murrayeccb2ce2009-05-23 02:36:15 +000047 support.get_attribute(smtplib, 'SMTP_SSL')
Antoine Pitrou6003ff72010-10-13 17:14:16 +000048 with support.transient_internet(self.testServer):
49 server = smtplib.SMTP_SSL(self.testServer, self.remotePort)
Antoine Pitroucc9ca222011-05-18 18:04:04 +020050 server.ehlo()
51 server.quit()
R. David Murray87e20742009-05-23 01:30:26 +000052
Antoine Pitrouc1d52062011-05-07 19:39:37 +020053 def test_connect_default_port(self):
54 support.get_attribute(smtplib, 'SMTP_SSL')
55 with support.transient_internet(self.testServer):
56 server = smtplib.SMTP_SSL(self.testServer)
Antoine Pitroucc9ca222011-05-18 18:04:04 +020057 server.ehlo()
58 server.quit()
Antoine Pitrouc1d52062011-05-07 19:39:37 +020059
Antoine Pitroue0650202011-05-18 18:03:09 +020060 def test_connect_using_sslcontext(self):
Christian Heimesa5768f72013-12-02 20:44:17 +010061 context = ssl.SSLContext(ssl.PROTOCOL_SSLv23)
Antoine Pitroue0650202011-05-18 18:03:09 +020062 support.get_attribute(smtplib, 'SMTP_SSL')
63 with support.transient_internet(self.testServer):
Christian Heimesa5768f72013-12-02 20:44:17 +010064 server = smtplib.SMTP_SSL(self.testServer, self.remotePort, context=context)
65 server.ehlo()
66 server.quit()
67
Christian Heimesa5768f72013-12-02 20:44:17 +010068 def test_connect_using_sslcontext_verified(self):
Victor Stinner19c899c2014-09-04 00:35:43 +020069 with support.transient_internet(self.testServer):
70 can_verify = check_ssl_verifiy(self.testServer, self.remotePort)
71 if not can_verify:
72 self.skipTest("SSL certificate can't be verified")
73
Christian Heimesa5768f72013-12-02 20:44:17 +010074 support.get_attribute(smtplib, 'SMTP_SSL')
75 context = ssl.create_default_context()
76 with support.transient_internet(self.testServer):
77 server = smtplib.SMTP_SSL(self.testServer, self.remotePort, context=context)
Antoine Pitroucc9ca222011-05-18 18:04:04 +020078 server.ehlo()
79 server.quit()
Antoine Pitroue0650202011-05-18 18:03:09 +020080
81
R. David Murray87e20742009-05-23 01:30:26 +000082def test_main():
Antoine Pitroue0650202011-05-18 18:03:09 +020083 support.run_unittest(SmtpTest, SmtpSSLTest)
R. David Murray87e20742009-05-23 01:30:26 +000084
85if __name__ == "__main__":
86 test_main()