# -*- coding:utf-8 -*-
import smtplib
import email
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.image import MIMEImage
from email.mime.base import MIMEBase
from email.mime.application import MIMEApplication
from email.header import Header
# 发件人地址,通过控制台创建的发件人地址
username = 'message@dvema.com'
# 发件人密码,通过控制台创建的发件人密码
password = 'SMtp123456'
# 自定义的回复地址
replyto = '***'
# 收件人地址或是地址列表,支持多个收件人,最多30个
#rcptto = '***,***'
# rcptto = '1758730877@qq.com'
rcptto = 'cjk1758730877@gmail.com'
# 构建alternative结构
msg = MIMEMultipart('alternative')
msg['Subject'] = Header('自定义信件主题').encode()
msg['From'] = '%s <%s>' % (Header('自定义发信昵称').encode(), username)
# msg['To'] = rcptto
msg['Reply-to'] = replyto
msg['Message-id'] = email.utils.make_msgid()
msg['Date'] = email.utils.formatdate()
# 构建alternative的text/plain部分
# textplain = MIMEText('自定义TEXT纯文本部分', _subtype='plain', _charset='UTF-8')
# msg.attach(textplain)
# 构建alternative的text/html部分
sendHtml = '''
Title
Hello, {username}
请输入验证码完成注册,有效期10分钟:
{captcha}
'''
texthtml = MIMEText(sendHtml, _subtype='html', _charset='UTF-8')
msg.attach(texthtml)
# 发送邮件
try:
client = smtplib.SMTP()
#python 2.7以上版本,若需要使用SSL,可以这样创建client
#client = smtplib.SMTP_SSL()
#SMTP普通端口为25或80
client.connect('smtpdm.aliyun.com', 25)
#开启DEBUG模式
client.set_debuglevel(0)
client.login(username, password)
#发件人和认证地址必须一致
#备注:若想取到DATA命令返回值,可参考smtplib的sendmaili封装方法:
# 使用SMTP.mail/SMTP.rcpt/SMTP.data方法
client.sendmail(username, rcptto, msg.as_string())
client.quit()
print('邮件发送成功')
except smtplib.SMTPConnectError as e:
print('邮件发送失败,连接失败:', e.smtp_code, e.smtp_error)
except smtplib.SMTPAuthenticationError as e:
print('邮件发送失败,认证错误:', e.smtp_code, e.smtp_error)
except smtplib.SMTPSenderRefused as e:
print('邮件发送失败,发件人被拒绝:', e.smtp_code, e.smtp_error)
except smtplib.SMTPRecipientsRefused as e:
print('邮件发送失败,收件人被拒绝:', e.smtp_code, e.smtp_error)
except smtplib.SMTPDataError as e:
print('邮件发送失败,数据接收拒绝:', e.smtp_code, e.smtp_error)
except smtplib.SMTPException as e:
print('邮件发送失败, ', e.message)
except Exception as e:
print('邮件发送异常, ', str(e))