Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
AWS SES中python中的反弹电子邮件Json解析_Python_Json_Parsing_Amazon Sns - Fatal编程技术网

AWS SES中python中的反弹电子邮件Json解析

AWS SES中python中的反弹电子邮件Json解析,python,json,parsing,amazon-sns,Python,Json,Parsing,Amazon Sns,我正在尝试为AWS SNS编写一个lambda函数来捕获被退回的电子邮件。我可以成功捕获通知类型“Delivery”的详细信息,但无法捕获类型“bounce”的详细信息。python中的一些语法问题,我不知道python,但SES中没有其他选项。我的代码如下 def lambda_handler(event, context): message = event.get("Records")[0].get("Sns").get("Message") parsed_message = json.l

我正在尝试为AWS SNS编写一个lambda函数来捕获被退回的电子邮件。我可以成功捕获通知类型“Delivery”的详细信息,但无法捕获类型“bounce”的详细信息。python中的一些语法问题,我不知道python,但SES中没有其他选项。我的代码如下

def lambda_handler(event, context):

message = event.get("Records")[0].get("Sns").get("Message")
parsed_message = json.loads(message)
status = parsed_message.get("notificationType")
event_date = parsed_message.get("mail").get("timestamp")
recipients = []

if (status == "Bounce"):
    for r in parsed_message.get("bounce").get("bouncedRecipients"):
        parsed_r = json.loads(r)
        recipients.append(parsed_r[0].get("emailAddress"))
elif (status == "Complaint"):
    for r in parsed_message.get("complaint").get("complainedRecipients"):
        recipients.append(r)
elif (status == "Delivery"):
    for r in parsed_message.get("delivery").get("recipients"):
        recipients.append(r)

conn = make_conn()
cur = conn.cursor()
cur.execute("insert into email_event (email_status, event_date, email_address, event_json) values (%s, %s, %s, %s)", (status, event_date, ";".join(recipients), json.dumps(event)))
conn.commit()
cur.close()
conn.close()
下面是解析的_消息的Json

 {
   "notificationType": "Bounce",
   "bounce": {
      "bounceType": "Permanent",
      "bounceSubType": "Suppressed",
      "bouncedRecipients": [
         {
            "emailAddress": "email@email.com",
            "action": "failed",
            "status": "5.1.1",
            "diagnosticCode": "Amazon SES has suppressed sending to this address because it has a recent history of bouncing as an invalid address. "
         }
      ],

   },
我得到了这样的错误 JSON对象必须是str、bytes或bytearray,而不是“dict”:TypeError

我试着像下面一样

for r in parsed_message.get("bounce").get("bouncedRecipients")[0].get("emailAddress")
recipients.append(r)
但这会作为e保存在数据库中;MA.我l、 @;EMA.我LCo;m

“bouncedRecipients”指向一个DICT列表,每个被拒绝的收件人对应一个DICT

要遍历该列表,然后获取电子邮件地址,应如下所示:

for r in parsed_message.get("bounce").get("bouncedRecipients"):
    recipients.append(r.get("emailAddress"))
或者,不太像Java,而更像Python:

for r in parsed_message["bounce"]["bouncedRecipients"]:
    recipients.append(r["emailAddress"])
也可以写为以下列表:

recipients = [r["emailAddress"] for r in parsed_message["bounce"]["bouncedRecipients"]]