记录使用python smtplib邮件发送

基于多源异构数据存储管理系统开发时遇到的邮件发送问题,这里做一下记录。

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')

这是因为未能正确关闭导致的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值