You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Python查询MySQL的结果嵌入smtplib邮件正文?

解决MySQL查询结果(元组)整合到邮件正文的问题

我来帮你搞定这个问题!其实核心就是把查询返回的元组列表转换成易读的文本格式,然后嵌入到邮件正文中。下面分步骤给你演示具体做法:

第一步:处理MySQL查询结果,把元组转为友好文本

当你用MySQLdb执行查询后,cursor.fetchall()会返回一个元组的列表,比如[(id1, name1, email1), (id2, name2, email2)]。我们可以把这些数据转成带表头的格式化文本,提升可读性:

import MySQLdb

# 数据库连接配置,替换成你的实际信息
db_config = {
    'host': 'your_host',
    'user': 'your_user',
    'passwd': 'your_password',
    'db': 'your_database'
}

def get_formatted_query_result():
    # 连接数据库并执行查询
    db = MySQLdb.connect(**db_config)
    cursor = db.cursor()
    
    # 替换成你的实际查询语句
    query = "SELECT id, username, create_time FROM users LIMIT 10;"
    cursor.execute(query)
    
    # 获取查询的表头(字段名)
    headers = [desc[0] for desc in cursor.description]
    # 获取所有查询结果
    results = cursor.fetchall()
    
    # 关闭数据库连接
    cursor.close()
    db.close()
    
    # 开始格式化文本:先写表头,再添加分隔线,最后逐行处理结果
    formatted_text = "\t".join(headers) + "\n"
    formatted_text += "-" * 60 + "\n"
    
    for row in results:
        # 把元组里的每个元素转成字符串,用制表符分隔,保证对齐
        row_str = "\t".join(str(item) for item in row)
        formatted_text += row_str + "\n"
    
    return formatted_text

这个函数会输出类似这样的易读文本:

id	username	create_time
------------------------------------------------------------
1	alice	2024-01-01 10:00:00
2	bob	2024-01-02 14:30:00

第二步:整合到邮件发送脚本

接下来把上面生成的格式化文本作为邮件正文,和你的smtplib发送逻辑整合:

import smtplib
from email.mime.text import MIMEText
from email.header import Header

def send_email_with_query_result():
    # 获取格式化后的查询结果
    query_content = get_formatted_query_result()
    
    # 邮件配置,替换成你的实际信息
    sender = 'your_email@example.com'
    receiver = 'target_email@example.com'
    smtp_server = 'smtp.example.com'
    smtp_port = 587
    email_password = 'your_email_password'  # 注意:部分邮箱需要用应用专用密码
    
    # 构造邮件内容
    msg = MIMEText(query_content, 'plain', 'utf-8')
    msg['From'] = Header('数据库查询通知', 'utf-8')
    msg['To'] = Header('收件人', 'utf-8')
    msg['Subject'] = Header('最新MySQL查询结果', 'utf-8')
    
    # 发送邮件
    try:
        server = smtplib.SMTP(smtp_server, smtp_port)
        server.starttls()  # 启用TLS加密,保障传输安全
        server.login(sender, email_password)
        server.sendmail(sender, receiver, msg.as_string())
        print("邮件发送成功!")
    except Exception as e:
        print(f"邮件发送失败:{str(e)}")
    finally:
        server.quit()

# 调用函数触发发送
send_email_with_query_result()

额外小贴士

  • 如果想要更美观的邮件排版,可以把文本转成HTML表格格式(用<table>标签包裹),这样邮件客户端显示会更规整。
  • 处理中文或特殊字符时,务必保证全程使用utf-8编码,避免出现乱码。
  • 可以用with语句自动管理数据库连接,避免忘记关闭的问题:
    with MySQLdb.connect(**db_config) as db:
        with db.cursor() as cursor:
            cursor.execute(query)
            results = cursor.fetchall()
    

这样就能把MySQL的查询结果完美嵌入到邮件正文里啦!

内容的提问来源于stack exchange,提问作者safernandez666

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:00:24