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

Python实现:将邮件正文作为变量传入SendEmail功能的问题

问题描述

我在用Alteryx做工作流自动化,它自带的「Send Email」工具限制附件大小10MB,但我日常的每日/每周报告很多都超了这个限制。于是我自己做了个示例工作流,接收包含邮件各部分内容的变量数组,现在除了邮件正文,其他部分都正常。我想把任意内容作为正文字符串变量传进去,但字符串里的单引号、双引号和斜杠会导致变量失效,邮件发出去后正文是空的。

想问下有没有办法对整个变量编码,让Python忽略输入字符串里的所有转义字符?或者是不是得在Python步骤前做预处理,把'替换成'''这类操作?

当前使用的Python代码
# List all non-standard packages to be imported by your 
# script here (only missing packages will be installed)
from ayx import Package
#Package.installPackages(['pandas','numpy'])

from ayx import Alteryx

import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase
from email import encoders

pyArray = Alteryx.read("#1")
body = pyArray["pymailBody"][0]

msg = MIMEMultipart()
msg['From'] = pyArray["pymailFrom"][0]
msg['To'] = pyArray["pymailTo"][0]
msg['CC'] = pyArray["pymailCC"][0]
msg['BCC'] = pyArray["pymailBCC"][0]
msg['Subject'] = pyArray["pymailSubject"][0]
msg['Body'] = body.encode('unicode_escape')
attachmentName = pyArray["pymailAttachmentName"][0]
attachmentPath = pyArray["pymailAttachmentPath"][0]

part = MIMEBase('application', "octet-stream")
part.set_payload(open(attachmentPath, "rb").read())
encoders.encode_base64(part)

part.add_header('Content-Disposition', 'attachment', filename=attachmentName)

msg.attach(part)

with smtplib.SMTP("mail.company.com", 25) as server:
    server.ehlo()
    server.starttls()
    server.ehlo()
    server.send_message(msg)
解决方法
  • 修正正文设置逻辑
    你当前设置邮件正文的方式错误,MIMEMultipart不能直接通过msg['Body']赋值,需要用MIMEText创建正文部件并附加到邮件对象中,同时不需要用unicode_escape编码,直接使用原始字符串即可。修改后的代码片段:

    # 导入MIMEText模块
    from email.mime.text import MIMEText
    
    # 替换原msg['Body']那一行
    body_part = MIMEText(body, 'plain', 'utf-8')
    msg.attach(body_part)
    
  • 特殊字符处理(可选)
    如果Alteryx传入的字符串存在转义异常(比如单引号被转义成\'),可以在Python中做还原处理:

    # 还原被转义的单引号、双引号和斜杠
    body = body.replace("\\'", "'").replace('\\"', '"').replace('\\\\', '\\')
    
  • Alteryx端注意事项
    在Alteryx中传递正文变量时,确保输入的是原始内容,不要手动添加转义字符,比如在「Text Input」工具中直接输入带特殊字符的文本即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 18:32:49