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

如何通过AWS SNS服务实现邮件中每行显示一条字符串

解决SNS邮件消息不换行的问题

这个问题很常见——SNS发送邮件时默认采用HTML格式渲染内容,普通的换行符\n在HTML里只会被当作空格处理,所以所有内容都挤在了一行。下面给你两种可行的解决方案:

方法1:使用HTML换行标签<br>

直接把消息里的换行符替换成HTML的<br>标签,同时告诉SNS发送HTML格式的消息:

修改后的代码如下:

import boto3
region_src = 'us-east-1'
sns_arn = "arn:aws:sns:us-east-1:000000000099:AWS_LAMBDA_NOTIFICATIONS"

def copy_snapshot_src_to_dst(snapshot_id):
    message = ("Started copying.. snapshot_id: " + str(snapshot_id) + " from: " + "region_src" + " to: " + "region_dst" + " with new snapshot_id: " + "new_snapshot_id")
    return message

def lambda_handler():
    snapshots_id = [('snap-000000aeaada0000', [{'Key': 'Backup_Type', 'Value': 'Demo'}, {'Key': 'Backup Initiator Rule', 'Value': 'Daily-6d-retention'}, {'Key': 'Disaster_Recovery', 'Value': 'Full'}, {'Key': 'aws:backup:source-resource', 'Value': 'FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF'}, {'Key': 'Name', 'Value': 'HOSTNAME'}]), ('snap-000000aeaada0001', [{'Key': 'Name', 'Value': 'HOSTNAME'}, {'Key': 'Backup Initiator Rule', 'Value': 'Daily-6d-retention'}, {'Key': 'Backup_Type', 'Value': 'Demo'}, {'Key': 'Disaster_Recovery', 'Value': 'Full'}, {'Key': 'aws:backup:source-resource', 'Value': 'FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF'}])]
    message = ""
    for i in snapshots_id:
        snapshot_id = i[0]
        # 把换行符替换成HTML换行标签
        message += copy_snapshot_src_to_dst(snapshot_id) + '<br>'
    print(message)
    send_sns(message)

def send_sns(message):
    if sns_arn:
        print("Sending SNS alert")
        sns = boto3.client("sns", region_name=region_src)
        response = sns.publish(
            TargetArn=sns_arn,
            Subject=("AWS LAMBDA NOTIFICATION"),
            # 包裹成HTML结构并指定消息格式
            Message=f"<html><body>{message}</body></html>",
            MessageStructure='html'
        )

lambda_handler()

方法2:强制发送纯文本格式消息

如果你更倾向于纯文本格式,不需要HTML样式,可以通过JSON消息结构明确指定纯文本内容:

修改send_sns函数如下:

def send_sns(message):
    if sns_arn:
        print("Sending SNS alert")
        sns = boto3.client("sns", region_name=region_src)
        # 转义换行符,确保JSON解析后保留换行
        escaped_message = message.replace('\n', '\\n')
        response = sns.publish(
            TargetArn=sns_arn,
            Subject=("AWS LAMBDA NOTIFICATION"),
            Message=f'{{"default": "{escaped_message}"}}',
            MessageStructure='json'
        )

这种方式下,邮件客户端会以纯文本模式渲染内容,原本的\n就能正常显示为换行。

两种方法都能解决你的问题:如果后续需要添加HTML样式(比如加粗、高亮),选方法1;如果只是单纯需要换行,方法2更简洁。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:21:10