要在 lambda 中使用 MIMEMultipart 和 SES 服务发送的动态文本

Dynamic text to be sent using MIMEMultipart and SES service in lambda

我正在使用 lambda 从 SES 发送原始消息。

def send_email_method(p1, p2):
    msg = MIMEMultipart()
    msg["Subject"] = "Test123"
    msg["From"] = "abc@gmail.com"
    msg["To"] = "xyz@gmail.com"

    
    body = MIMEText("Find list of activity. Part 1="+ p1 +"Part 2=" + p2, "html") /** Here according to 3 conditions below data should be sent**/
    msg.attach(body)
        
    ses_client = boto3.client("ses", region_name="us-west-1")
    response = ses_client.send_raw_email(
        Source="abc@gmail.com",
        Destinations=["xyz@gmail.com"],
        RawMessage={"Data": msg.as_string()}
    )
    return

def lambda_handler(event, context):
    p1=os.environ['p1']
    p2=os.environ['p2']
    send_email_method(p1, p2)

p1 和 p2 环境变量可以有以下值:-

  1. p1='sketch', p2='draw'---- 在这种情况下 p1 & p2 应该在邮件中提及
  2. p1='', p2='draw'----本例仅 p2 应在邮件中提及,因为 p1 为空
  3. p1='sketch',p2=''----本例仅 p1 应在邮件中提及,因为 p2 为空

如何在上面的代码中实现上述 3 个条件,同时记住这些 p1 和 p2 也可以扩展到 p3、p4 和 p5?

最简单的方法是使用一些 if 语句来构造您的消息。

但是,由于将来变量的数量可能会增加,我建议将程序更改为 将字典 传递给 send_email_method() 函数,这将允许任意数量的输入。然后该函数可以遍历字典并构造字符串,例如:

values = {1: "sketch", 2: "draw", 3:"erase", 4:"rotate"}

message = ""

for value in values:
  message += f" Part {value}={values[value]}"