SSL证书可用于Python 2.6.6的smtplib,但不能用于Python 2.7.9
代码是:SSL证书可用于Python 2.6.6的smtplib,但不能用于Python 2.7.9,python,ssl,smtplib,Python,Ssl,Smtplib,代码是: import smtplib SERVER = XXX PORT = 587 USERNAME = YYY PASSWORD = ZZZZ SENDER = 'foo@domain.com' RECEIVERS = ['bar@anotherdomain.com', ] CERTFILE = "/path/to/certfile.crt" KEYFILE = "/path/to/certfile.key" client = smtplib.SMTP(SERVER, PORT) c
import smtplib
SERVER = XXX
PORT = 587
USERNAME = YYY
PASSWORD = ZZZZ
SENDER = 'foo@domain.com'
RECEIVERS = ['bar@anotherdomain.com', ]
CERTFILE = "/path/to/certfile.crt"
KEYFILE = "/path/to/certfile.key"
client = smtplib.SMTP(SERVER, PORT)
client.set_debuglevel(1)
client.ehlo()
client.starttls(keyfile=KEYFILE, certfile=CERTFILE)
client.ehlo()
client.login(USERNAME, PASSWORD)
client.sendmail(SENDER, RECEIVERS, """Subject: XXX
hello world!""")
当我使用python 2.6.6时,它可以发送电子邮件,但当我使用python 2.7.9时,它给出的错误是:
[...]
send: 'STARTTLS\r\n'
reply: '220 2.0.0 SMTP server ready\r\n'
reply: retcode (220); Msg: 2.0.0 SMTP server ready
Traceback (most recent call last):
File "./fbo_test_email.py", line 31, in <module>
client.starttls(keyfile=KEYFILE, certfile=CERTFILE)
File "/usr/local/lib/python2.7/smtplib.py", line 649, in starttls
self.sock = ssl.wrap_socket(self.sock, keyfile, certfile)
File "/usr/local/lib/python2.7/ssl.py", line 891, in wrap_socket
ciphers=ciphers)
File "/usr/local/lib/python2.7/ssl.py", line 509, in __init__
self._context.load_cert_chain(certfile, keyfile)
ssl.SSLError: [X509: KEY_VALUES_MISMATCH] key values mismatch (_ssl.c:2525)
更多信息:
crt文件是一个RSA私钥,第一行是:----开始RSA私钥---
密钥文件的第一行是:
---开始证书---
我不明白为什么证书对于Python2.6.6的smtplib是可以的,但是对于Python2.7.9却不行
任何提示都将不胜感激,提前感谢。必须是另一种方式:密钥文件必须是带有RSA私钥的文件。Steffen,请按照您的建议,当我切换文件时,它们既不适用于Python 2.6,也不适用于Python 2.7