以下代码示例,Python 语言(版本 >= 3.6即可)通过 SMTP 发送邮件,具体示例如下:# -*- coding:utf-8 -*-import smtplibimport sslfrom email.header import Headerfrom email.mime.multipart import MIMEMultipartfrom email.mime.text import MIMETextfr。
以下代码示例,Python 语言(版本 >= 3.6即可)通过 SMTP 发送邮件,具体示例如下:# -*- coding:utf-8 -*-import smtplibimport sslfrom email.header import Headerfrom email.mime.multipart import MIMEMultipartfrom email.mime.text import MIMETextfrom email.utils import formataddrdef send_mail(sender, sender_alias, sender_pwd, recipient_list, subject, body, host="smtp.qcloudmail.com", port=465, is_use_ssl=True): try: message = MIMEMultipart('alternative') message['Subject'] = Header(subject, 'UTF-8') message['From'] = formataddr([sender_alias, sender]) message['To'] = ",".join(recipient_list) to_addr_list = recipient_list mime_text = MIMEText(body, _subtype='html', _charset='UTF-8') message.attach(mime_text) if is_use_ssl: context = ssl.create_default_context() context.set_ciphers('DEFAULT') # context.options |= ssl.OP_NO_TLSv1_3 # 如果当前选择到了TLSv1_3,则使用这行来屏蔽1.3因为服务端不支持 # 当使用了上面代码还是出现 SSL: SSLV3_ALERT_HANDSHAKE_FAILURE] sslv3 alert handshake failure 之类的ssl错误, # 请先使用 pip install –upgrade ssl 来更新SSL库,重新运行,如果仍旧失败,则需要更改下面ses的支持的协议和加密算法 # 目前ses服务端支持ssl的协议和加密套件如下: # ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # ssl_ciphers AES128-SHA:AES256-SHA:RC4-SHA:DES-CBC3-SHA:RC4-MD5; # 使用下面方法来自定义协议和加密算法 # print(f'ssl_version={ssl.OPENSSL_VERSION}') # context = ssl.SSLContext(ssl.PROTOCOL_TLSv1_2) # context.set_ciphers('AES128-SHA:AES256-SHA:RC4-SHA:DES-CBC3-SHA:RC4-MD5') client = smtplib.SMTP_SSL(host, port, context=context) else: client = smtplib.SMTP(host, port) client.login(sender, sender_pwd) client.sendmail(sender, to_addr_list, message.as_string()) client.quit() print('Send email success!') except smtplib.SMTPConnectError as e: print('Send email failed,connection error:', e.smtp_code, e.smtp_error) except smtplib.SMTPAuthenticationError as e: print('Send email failed,smtp authentication error:', e.smtp_code, e.smtp_error) except smtplib.SMTPSenderRefused as e: print('Send email failed,sender refused:', e.smtp_code, e.smtp_error) except smtplib.SMTPRecipientsRefused as e: print('Send email failed,recipients refused:', e.recipients) except smtplib.SMTPDataError as e: print('Send email failed,smtp data error:', e.smtp_code, e.smtp_error) except smtplib.SMTPException as e: print('Send email failed,smtp exception:', str(e)) except Exception as e: print('Send email failed,other error:', str(e))if __name__ == '__main__': # 将下面xxx之类替换为自己的地址,直接运行就可以成功发送邮件了,python版本>=3.6即可 # 控制台创建的发信人地址 from_email = "xxx@xxxx" # 控制台发信地址对应设置的SMTP密码 from_email_pwd = "xxx" # 接收人地址列表 to_email_list = ["xxx@xxx1", "xxx@xxx2"] # 发信人地址别名 from_alias = "测试别名" # 邮件主题 subject_txt = "[测试主题]" # 邮件内容 body_content = ( "<!DOCTYPE html>\\n<html>\\n<head>\\n<meta charset=\\"utf-8\\">\\n<title>hello world</title>\\n</head>\\n<body>\\n " "<h1>我的第一个标题</h1>\\n <p>我的第一个段落。</p>\\n</body>\\n</html>") # 默认使用ssl发邮件,端口可以为 465或587 is_using_ssl = True # smtp服务地址, 香港=smtp.qcloudmail.com,新加坡=sg-smtp.qcloudmail.com,广州=gz-smtp.qcloudmail.com smtp_host = "smtp.qcloudmail.com" # smtp端口号, 465和587使用ssl加密,25使用tls smtp_port = 465 # 使用25端口发邮件 # is_using_ssl = False # smtp_host = "smtp.qcloudmail.com" # smtp_port = 25 send_mail(from_email, from_alias, from_email_pwd, to_email_list, subject_txt, body_content, smtp_host, smtp_port, is_using_ssl)