python - Python- SMTP 自定义邮件正文,包括 Dataframe 表和纯文本
问题描述
Python- SMTP 自定义邮件正文,包括 Dataframe 表和纯文本:我希望发送一封邮件,邮件正文由纯文本组成,例如“亲爱的用户,以下是 KPI 详细信息:
数据框表
当我尝试发送时,我将表格作为附件。
解决方案
我缺少一些上下文,所以我假设“Dataframe”是指pandas DataFrame,并且您使用的是 Python 的内置smtplib。
以下示例发送一封电子邮件,正文中包含 Pandas 数据框:
import pandas as pd
import html
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
def send_email(msg_body):
# The following block is inspired by Todor Minakov's answer in https://stackoverflow.com/a/33121151/13891613
sender = "someemailaddress@somehost.someprefix"
receiver = "someotheremailaddress@someotherhost.someprefix"
msg = MIMEMultipart('alternative')
msg['Subject'] = "Alert"
msg['From'] = sender
msg['To'] = receiver
msg_body = html.escape(msg_body)
message_html = f'<html><body><pre>{msg_body}</pre></body></html>'
part2 = MIMEText(message_html, 'html')
msg.attach(part2)
# Send the message via gmail's regular server, over SSL - passwords are being sent, afterall
s = smtplib.SMTP_SSL('smtp.gmail.com')
# do the smtp auth; sends ehlo if it hasn't been sent already
s.login(sender, password=input("Type your password:\n"))
s.sendmail(sender, receiver, msg.as_string())
s.quit()
if __name__ == '__main__':
# Create an example pandas dataframe
data = {'Column A': ['Some value', 'Some value2', 'Some value3'],
'Column B': ['Some value', 'Some value2', 'Some value3'],
'Column C': ['Some value', 'Some value2', 'Some value3'],
}
df = pd.DataFrame (data, columns = ['Column A','Column B', 'Column C'])
# Send the dataframe in an email using smtplib
message = f"Dear User, Below are KPI detail:\n\n{df.to_string()}"
send_email(message)
上面的脚本在我的 gmail 帐户中产生了以下消息(在针对 gmail 帐户对我的机器进行身份验证之后):
如果“Dataframe”的意思与 pandas DataFrame 不同,那么您可以简单地将数据框对象序列化为字符串,并将其传递到消息正文中,类似于在脚本中的处理方式。
推荐阅读
- java - 如何使用带有 setResultTransformer 和标量的 Hibernate 存储过程
- haskell - 如何编写一个结合其他 nix-shell 环境的 shell.nix 文件?
- python - 如何使用 python 原始套接字解析 DNS 问题字段?
- android - 如何通过底部导航开始新活动
- python - Pygame - 这个游戏不会加分
- javascript - 我如何将带有数组的 json 文件包含到 javascript 文件中?
- java - AspectJ - 如何记录覆盖的方法名称而不是超类方法名称
- python - 估价时如何选择区域划分?
- mysql - 将 GROUP BY 添加到简单查询使其慢 1000
- c# - 检查电子邮件是否存在,元素未找到功能