基于多源异构数据存储管理系统开发时遇到的邮件发送问题,这里做一下记录。
import smtplib # 导入smtplib模块,用于发送邮件
from email.mime.text import MIMEText # 从email.mime.text导入MIMEText类,用于构建文本邮件
from email.header import Header # 从email.header导入Header类,用于设置邮件头部
email_subject = '邮件主题' # 定义邮件主题
# 定义邮件内容,使用多行字符串
email_content = """
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>数据问题提醒</title>
<style>
body {
font-family: 'Arial', sans-serif;
margin: 0;
padding: 0;
background: #1e1e1e;
color: #fff;
}
/* 由于QQ邮箱可能不支持外部CSS,我们将样式写在元素内部 */
</style>
</head>
<body leftmargin="0" marginwidth="0" topmargin="0" marginheight="0" offset="0">
<center>
<table width="100%" bgcolor="#1e1e1e">
<tr>
<td>
<center>
<table width="600" border="0" cellpadding="0" cellspacing="0" align="center" style="margin: auto; background: #282828;">
<tr>
<td height="40">
<center>
<font face="Arial, sans-serif" size="5" color="#4CAF50"><b>数据问题提醒</b></font>
</center>
</td>
</tr>
<tr>
<td>
<center>
<table width="100%" border="0" cellpadding="0" cellspacing="0" style="background: #282828;">
<tr>
<td style="text-align: center; padding: 20px;">
<font face="Arial, sans-serif" size="4" color="#FF9800"><b>尊敬的用户,您好!</b></font>
<p style="color: #bfbfbf; font-size: 14px;">我们注意到您的账户数据存在一些问题,需要您立即关注并采取行动。以下是具体问题及建议的解决步骤:</p>
<ul style="list-style: none; padding: 0; margin: 0;">
<li style="background: #333; padding: 10px; margin-bottom: 10px; border-radius: 4px; color: #bfbfbf;"><b>问题1:数据1显示异常,请检查数据来源是否正确。</b></li>
<li style="background: #333; padding: 10px; margin-bottom: 10px; border-radius: 4px; color: #bfbfbf;"><b>问题2:数据2存在缺失,请补充完整以保证服务正常运行。</b></li>
<li style="background: #333; padding: 10px; margin-bottom: 10px; border-radius: 4px; color: #bfbfbf;"><b>问题3:数据3超出正常范围,请调整至合理数值。</b></li>
</ul>
<p style="color: #bfbfbf; font-size: 14px;">请尽快登录到您的账户中检查并更新相关数据。如果有任何疑问,或需要我们的帮助,请通过以下联系方式与我们联系。</p>
<a href="#" style="display: inline-block; background: #4CAF50; color: #fff; text-decoration: none; padding: 10px 20px; margin: 20px 0; border-radius: 5px; font-size: 14px;"><font color="#fff">立即登录并检查数据</font></a>
</td>
</tr>
</table>
</center>
</td>
</tr>
<tr>
<td height="40" style="background: #333; text-align: center; color: #bfbfbf;">
<p style="margin: 0; font-size: 12px;">感谢您的理解与合作。</p>
</td>
</tr>
</table>
</center>
</td>
</tr>
</table>
</center>
</body>
</html>
"""
msg = MIMEText(email_content, 'plain', 'utf-8') # 创建MIMEText对象,设置邮件内容、格式和编码
msg['Subject'] = Header(email_subject, 'utf-8') # 设置邮件主题
msg['From'] = 'addressor@qq.com' # 设置发件人邮箱
msg['To'] = 'receiver@qq.com' # 设置收件人邮箱
smtp_server = 'smtp.qq.com' # 定义SMTP服务器地址,QQ邮箱服务器地址为smtp.qq.com
smtp_port = 587 # 定义SMTP服务器端口(587为TLS端口,465为SSL端口)
sender_email = 'wiktok@qq.com' # 定义发送者邮箱
password = 'yourauthorizationcode' # 定义发送者邮箱的授权码
try:
with smtplib.SMTP(smtp_server, smtp_port) as server: # 创建SMTP对象并连接到SMTP服务器
#server.set_debuglevel(1) # 开启调试信息,需要再启用
server.starttls() # 启用TLS加密
server.login(sender_email, password) # 登录到SMTP服务器
server.sendmail(sender_email, msg['To'], msg.as_string()) # 发送邮件
server.quit() # 结束会话
print('邮件发送成功') # 打印成功消息
except smtplib.SMTPException as e: # 捕获SMTP异常
print(f'邮件发送失败: {e}') # 打印失败消息和异常信息
except Exception as e: # 捕获其他异常
print(f'发生了其他错误: {e}') # 打印其他错误信息
在发送过程中需要手动调用一下server.quit()方法关闭会话,否则会报一个错误
send: 'QUIT\r\n'
reply: b'\x00\x00\x00\x1a\x00\x00\x00\n'
reply: retcode (-1); Msg: b'\x00\x00\x00'
邮件发送失败: (-1, b'\x00\x00\x00')
这是因为未能正确关闭导致的。