使用 python 从文件发送 HTMLbody

2024-01-02

我可以发送纯文本,但无法发送 html 格式的 html 文本。

import email, smtplib, ssl
import os
from email import encoders
from email.mime.base import MIMEBase
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText

body = """
this is first mail by using python
"""
port_email = 587
smtp_server = "smtp.gmail.com"
password = "your password"


subject = "An email with attachment from Python"
sender_email = "[email protected] /cdn-cgi/l/email-protection"
receiver_email = "[email protected] /cdn-cgi/l/email-protection"

# Create a multipart message and set headers
message = MIMEMultipart()
message["From"] = sender_email
message["To"] = receiver_email
message["Subject"] = subject
message["Bcc"] = receiver_email  # Recommended for mass emails

# Add body to email
message.attach(MIMEText(body, "plain"))
filename = "file name"  # In same directory as script

with open(filename.html, 'r', encoding="utf-8") as attachment:
    part1 = attachment.read()

part2 = MIMEText(part1, "html")
message.attach(part2)
text = message.as_string()

context = ssl.create_default_context()
with smtplib.SMTP_SSL(smtp_server, 465 , context=context) as server:
    server.login(sender_email, password)
    server.sendmail(sender_email, receiver_email, text)

这将发送附件,但我想查看电子邮件正文中的 html 文本。 文件名是内容 html 表,因此代码应该发送 html 文本,该文本将自动在带有 html 表的 html 正文中可用。


如果这不是你想要的,你为什么要传递一个假尸体?

您的代码似乎是为 Python 3.5 或更早版本编写的。这email库在 3.6 中进行了彻底修改,现在更加通用和逻辑化。可能会扔掉你拥有的并重新开始的例子来自email文档。 https://docs.python.org/3/library/email.examples.html

这是一个简短的尝试。

from email.message import EmailMessage

... 
message = EmailMessage()
message["From"] = sender_email
message["To"] = receiver_email
message["Subject"] = subject
# No point in using Bcc if the recipient is already in To:

with open(filename) as fp:
    message.set_content(fp.read(), 'html')

# no need for a context if you are just using the default SSL
with smtplib.SMTP_SSL(smtp_server, 465) as server:
    server.login(sender_email, password)
    # Prefer the modern send_message method
    server.send_message(message)

如果您想以纯文本和 HTML 形式发送消息,链接的示例将向您展示如何调整代码来实现这一点,但实际上,text/plain正文部分实际上应该包含有用的消息,而不仅仅是占位符。

正如代码中注释的那样,没有理由使用Bcc:如果您已经在邮件中指定了收件人To:标头。如果你想使用Bcc:你必须在其中放入其他东西To:标头,通常是您自己的地址或地址列表,例如:undisclosed-recipients;

顺便说一句,打开文件时,Python(或者实际上是操作系统)会检查用户当前的工作目录,而不是加载 Python 脚本的目录。也许还可以看到当前工作目录到底是什么? https://stackoverflow.com/questions/45591428/what-exactly-is-current-working-directory

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 python 从文件发送 HTMLbody 的相关文章

  • 应用程序可能在其主线程上做了太多工作 - Android

    您好 我正在开发一个 Android 应用程序 当我尝试从我的应用程序发送电子邮件时遇到此错误 我在后台发送邮件而不使用基于意图这个链接 http www oodlestechnologies com blogs Send Mail in
  • Django 营业时间

    我想添加诊所的营业时间 我已经对此进行了调查在 Django 中实现 开放时间 的任何现有解决方案 https stackoverflow com questions 8128143 any existing solution to imp
  • 使用 pyppeteer 与 asyncio 关联来抓取内容

    我用 python 结合编写了一个脚本pyppeteer随着asyncio从其登陆页面抓取不同帖子的链接 并最终通过跟踪通向其内页的 url 来获取每个帖子的标题 我这里解析的内容不是动态的 但是 我利用了pyppeteer and asy
  • 如何使用 tkinter 使用网格功能显示不同的图像?

    我想使用显示文件夹中的图像grid 但是当我尝试使用以下代码时 我得到了迭代单个图像的输出 My code def messageWindow win Toplevel path C Users HP Desktop dataset for
  • Laravel - 动态更改电子邮件设置不起作用

    我的应用程序的所有电子邮件设置都存储在数据库中 用户可以选择更改这些设置 而且一切都很好 但我正在尝试设置 发送测试电子邮件 功能 以允许用户在保存设置之前测试其设置 当他们提交发送测试电子邮件的表单时 电子邮件将通过原始设置而不是新设置发
  • 导入 SciPy 或 scikit-image,“from scipy.linalg import _fblas:导入错误:DLL 失败”

    我正在导入 from scipy import misc io 但我收到这些错误 Traceback most recent call last File C work asaaki code generateProposals py li
  • 在 ubuntu 中卸载 python 模块

    我必须删除一个名为 django 的 python 模块 一种流行的模块 因为我安装了错误的版本 1 3 py 2 6 中的 beta 如何卸载这个模块 请解释一下 因为我只在 Windows 中使用过 python 而从未在 Ubuntu
  • 如何检查给定的数字是否是2的幂?

    下面的代码不适用于某些输入 a i set 1 while i lt 10000 a add i i lt lt 1 N int input if N in a print True else print False 我最初的想法是检查每个
  • 清理 MongoDB 的输入

    我正在为 MongoDB 数据库程序编写 REST 接口 并尝试实现搜索功能 我想公开整个 MongoDB 接口 我确实有两个问题 但它们是相关的 所以我将它们放在一篇文章中 使用 Python json 模块解码不受信任的 JSON 是否
  • 在Python中,如何通过去掉括号和大括号来打印Json

    我想以一种很好的方式打印 Json 我想去掉方括号 引号和大括号 只使用缩进和行尾来显示 json 的结构 例如 如果我有一个像这样的 Json A A1 1 A2 2 B B1 B11 B111 1 B112 2 B12 B121 1
  • Python正则表达式替换引号中的文本(引号本身除外)

    例如 我有一个测试字符串 content I opened my mouth Good morning I said cheerfully 我想使用正则表达式删除双语音标记之间的文本 但不删除语音标记本身 所以它会返回 I opened m
  • 如何使用 Python 在表单中选择选项?

    我想知道如何以格式如下的形式选择选项 td align left td
  • Flask 和 Reactjs 抛出 JSX 转换错误

    我已经开始将 ReactJS 与 Python Flask 后端结合使用 通过 Flask 渲染模板时 我在 Chrome 控制台中收到以下客户端错误 错误 找不到模块 jstransform visitors es6 templates
  • 使用 Popen 打开进程并获取 PID

    我正在开发一个漂亮的小功能 def startProcess name path Starts a process in the background and writes a PID file returns integer pid Ch
  • 哈希 freezeset 与排序元组

    在 Python 中 给定一组可比较的 可散列的元素s 散列是否更好frozenset s or tuple sorted s 这取决于你在做什么 创建一个更快frozenset 比排序tuple but frozenset占用的内存比tu
  • 如何读取多个文件并将它们合并到一个 pandas 数据框中?

    我想读取位于同一目录中的多个文件 然后将它们合并到一个 pandas 数据框中 如果我这样做的话它会起作用 import pandas as pd df1 pd read csv data 12015 csv df2 pd read csv
  • 数据类和属性装饰器

    我一直在阅读 Python 3 7 的数据类 作为命名元组的替代品 我通常在必须将数据分组到结构中时使用它 我想知道数据类是否与属性装饰器兼容 以便为数据类的数据元素定义 getter 和 setter 函数 如果是这样 是否在某处进行了描
  • 为什么我的 Python 散点图不起作用?

    我使用 pylab 创建了一个非常简单的散点图 pylab scatter engineSize fuelMile pylab show 该程序的其余部分不值得发布 因为正是该行给我带来了问题 当我将 散点 更改为 绘图 时 它会绘制数据图
  • 如何使用 Matplotlib 可视化标量二维数据?

    所以我有一个网格网格 矩阵 X 和 Y 以及标量数据 矩阵 Z 我需要将其可视化 最好是一些 2D 图像 在各点处带有颜色 显示 Z 值 我做了一些研究 但没有找到任何能完全满足我想要的效果的东西 pyplot imshow Z 看起来不错
  • Python 中的可逆 STFT 和 ISTFT

    有没有通用的形式短时傅立叶变换 https en wikipedia org wiki Short time Fourier transform与内置于 SciPy 或 NumPy 或其他什么中的相应逆变换 这是pyplotspecgram

随机推荐