如何通过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
相关产品推荐
相关产品推荐

