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

Python调用win32com发送Outlook邮件时如何去除自动插入的多余段落缩进

问题原因

格式错乱的核心原因是Python三引号字符串的特性:三引号包裹的内容会原封不动保留你写在代码里的所有缩进、换行、空行。

  • 你在代码里为了对齐for循环、赋值语句的层级,给正文第二、第三行加的4个前导空格,会直接出现在邮件正文里,造成多余缩进
  • 你写的连续空行会被Outlook识别为段落分隔,产生你说的意外新段落
  • 之前调用.lstrip()没生效,一是因为该方法只能移除字符串最开头的空白,处理不了每行行首的缩进;二是大概率你调用的位置不对,没有把处理后的结果赋值回email.Body。另外你贴的代码里f字符串末尾缺少闭合的三引号,本身也存在语法问题。
解决方案

方案1:手动对齐正文内容(零依赖)

写三引号包裹的正文时,不要跟着代码块的缩进层级走,所有正文行顶格书写,去掉不需要的前导空格和多余空行即可,示例写法:

email.Body = f"""Dear {owner},

Our records indicate that your payment have not been received so far.

The total due is ${amount:.2f}.
"""

注意Dear {owner},前面不要留多余空格,行与行之间只留你实际需要的单空行即可,不要多打空行。

方案2:用textwrap自动清除缩进(不破坏代码排版)

如果你不想把字符串顶格写打乱代码的缩进结构,可以用Python标准库textwrap的dedent方法,自动移除所有正文行共有的前导缩进,不需要手动调整字符串位置。
首先在代码开头加导入语句:

import textwrap

正文部分按正常代码缩进层级写即可,最后用dedent处理:

email.Body = textwrap.dedent(f"""\
    Dear {owner},

    Our records indicate that your payment have not been received so far.

    The total due is ${amount:.2f}.
""")

这里开头的反斜杠\是为了跳过三引号后紧跟的第一个空行,dedent会自动识别所有行共同的前导空格(也就是你为了代码对齐加的4个空格)并统一移除,最终输出的正文格式完全符合预期。

额外提示

如果需要更复杂的排版(比如加粗、表格、自定义段落间距),可以改用HTML格式写邮件内容,把内容赋值给email.HTMLBody属性而不是email.Body,通过HTML标签控制格式,不会出现纯文本的缩进错乱问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 21:48:19