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

AWS Lambda使用boto3发送邮件时换行失效问题求助

解决AWS Lambda中SES邮件正文换行无效的问题

你当前的代码是通过HTML格式发送邮件,而纯文本的换行符\n在HTML中不会被识别为换行,邮件客户端会自动忽略这些字符,所以看不到换行效果。以下是两种可行的解决方案:


方案1:切换为纯文本邮件格式

如果不需要HTML格式的排版,直接将邮件体改为纯文本格式,\n就能正常生效。修改send_email方法中的Message.Body部分:

response = ses.send_email(
    Destination={
        "ToAddresses": [
            receiver_email,
        ],
    },
    Message={
        "Body": {
            "Text": {  # 把Html替换为Text
                "Charset": CHARSET,
                "Data": body,  # 直接使用原body内容,\n会生效
            }
        },
        "Subject": {
            "Charset": CHARSET,
            "Data": "Daily FX rates",
        },
    },
    Source=sent_from,
)

方案2:保留HTML格式,使用HTML换行标签

如果需要HTML的排版能力,把原代码中的\n替换为HTML的换行标签<br>,或者用<p>标签包裹每个段落,让邮件客户端正确渲染换行。修改后的send_email方法代码如下:

def send_email(self):
    ses = boto3.client("ses", region_name="eu-west-2")
    sent_from = "SENDER EMAIL ADDRESS"
    receiver_email = "RECEIVER EMAIL ADDRESS"
    # 用<p>标签拆分段落,实现清晰的换行效果
    body = f'<p>Current FX rates: EUR to USD {self.rounded_FX["eur_usd"]}, GBP to USD {self.rounded_FX["gbp_usd"]}, GBP to EUR {self.rounded_FX["gbp_eur"]}, GBP to AUD {self.rounded_FX["gbp_aud"]}.</p>' \
           f'<p>Daily changes: EUR to USD {self.to_f_statement(self.Dailys["eur_usd"])}, GBP to USD {self.to_f_statement(self.Dailys["gbp_usd"])}, GBP to EUR {self.to_f_statement(self.Dailys["gbp_eur"])}, GBP to AUD {self.to_f_statement(self.Dailys["gbp_aud"])}</p>' \
           f'<p>Weekly changes: EUR to USD {self.to_f_statement(self.Weeklys["eur_usd"])}, GBP to USD {self.to_f_statement(self.Weeklys["gbp_usd"])}, GBP to EUR {self.to_f_statement(self.Weeklys["gbp_eur"])}, GBP to AUD {self.to_f_statement(self.Weeklys["gbp_aud"])}</p>' \
           f'<p>Monthly changes: EUR to USD {self.to_f_statement(self.Monthlys["eur_usd"])}, GBP to USD {self.to_f_statement(self.Monthlys["gbp_usd"])}, GBP to EUR {self.to_f_statement(self.Monthlys["gbp_eur"])}, GBP to AUD {self.to_f_statement(self.Monthlys["gbp_aud"])}</p>'
    CHARSET = "UTF-8"

    html = body  # 直接使用拼接好的HTML内容

    response = ses.send_email(
        Destination={
            "ToAddresses": [
                receiver_email,
            ],
        },
        Message={
            "Body": {
                "Html": {
                    "Charset": CHARSET,
                    "Data": html,
                }
            },
            "Subject": {
                "Charset": CHARSET,
                "Data": "Daily FX rates",
            },
        },
        Source=sent_from,
    )

    return {
        'statusCode': 200,
        'body': json.dumps('Ready to go!')
    }

额外提示

你原代码中rounded_FX的取值存在逻辑问题:self.FX_rates['eur_usd'][0]取的是30天数据中最早日期的汇率,而计算涨跌幅时用的是fx_data[-1](最新日期),建议统一改成self.FX_rates['eur_usd'][-1]来获取最新汇率,避免数据不一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 13:15:24