繁体   English   中英

获取电子邮件内容AWS SES

[英]Get email content AWS SES

我正在尝试获取使用SES收到的电子邮件的内容。 但是我得到的回应是疯狂的

{
    "notificationType": "Received",
    "receipt": {
        "timestamp": "2015-09-11T20:32:33.936Z",
        "processingTimeMillis": 222,
        "recipients": [
            "recipient@example.com"
        ],
        "spamVerdict": {
            "status": "PASS"
        },
        "virusVerdict": {
            "status": "PASS"
        },
        "spfVerdict": {
            "status": "PASS"
        },
        "dkimVerdict": {
            "status": "PASS"
        },
        "action": {
            "type": "SNS",
            "topicArn": "arn:aws:sns:us-east-1:012345678912:example-topic"
        }
    },
    "mail": {
        "timestamp": "2015-09-11T20:32:33.936Z",
        "source": "61967230-7A45-4A9D-BEC9-87CBCF2211C9@example.com",
        "messageId": "d6iitobk75ur44p8kdnnp7g2n800",
        "destination": [
            "recipient@example.com"
        ],
        "headersTruncated": false,
        "headers": [
            {
                "name": "Return-Path",
                "value": "<0000014fbe1c09cf-7cb9f704-7531-4e53-89a1-5fa9744f5eb6-000000@amazonses.com>"
            },
            {
                "name": "Received",
                "value": "from a9-183.smtp-out.amazonses.com (a9-183.smtp-out.amazonses.com [54.240.9.183]) by inbound-smtp.us-east-1.amazonaws.com with SMTP id d6iitobk75ur44p8kdnnp7g2n800 for recipient@example.com; Fri, 11 Sep 2015 20:32:33 +0000 (UTC)"
            },
            {
                "name": "DKIM-Signature",
                "value": "v=1; a=rsa-sha256; q=dns/txt; c=relaxed/simple; s=ug7nbtf4gccmlpwj322ax3p6ow6yfsug; d=amazonses.com; t=1442003552; h=From:To:Subject:MIME-Version:Content-Type:Content-Transfer-Encoding:Date:Message-ID:Feedback-ID; bh=DWr3IOmYWoXCA9ARqGC/UaODfghffiwFNRIb2Mckyt4=; b=p4ukUDSFqhqiub+zPR0DW1kp7oJZakrzupr6LBe6sUuvqpBkig56UzUwc29rFbJF hlX3Ov7DeYVNoN38stqwsF8ivcajXpQsXRC1cW9z8x875J041rClAjV7EGbLmudVpPX 4hHst1XPyX5wmgdHIhmUuh8oZKpVqGi6bHGzzf7g="
            },
            {
                "name": "From",
                "value": "sender@example.com"
            },
            {
                "name": "To",
                "value": "recipient@example.com"
            },
            {
                "name": "Subject",
                "value": "Example subject"
            },
            {
                "name": "MIME-Version",
                "value": "1.0"
            },
            {
                "name": "Content-Type",
                "value": "text/plain; charset=UTF-8"
            },
            {
                "name": "Content-Transfer-Encoding",
                "value": "7bit"
            },
            {
                "name": "Date",
                "value": "Fri, 11 Sep 2015 20:32:32 +0000"
            },
            {
                "name": "Message-ID",
                "value": "<61967230-7A45-4A9D-BEC9-87CBCF2211C9@example.com>"
            },
            {
                "name": "X-SES-Outgoing",
                "value": "2015.09.11-54.240.9.183"
            },
            {
                "name": "Feedback-ID",
                "value": "1.us-east-1.Krv2FKpFdWV+KUYw3Qd6wcpPJ4Sv/pOPpEPSHn2u2o4=:AmazonSES"
            }
        ],
        "commonHeaders": {
            "returnPath": "0000014fbe1c09cf-7cb9f704-7531-4e53-89a1-5fa9744f5eb6-000000@amazonses.com",
            "from": [
                "sender@example.com"
            ],
            "date": "Fri, 11 Sep 2015 20:32:32 +0000",
            "to": [
                "recipient@example.com"
            ],
            "messageId": "<61967230-7A45-4A9D-BEC9-87CBCF2211C9@example.com>",
            "subject": "Example subject"
        }
    },
    "content": "Return-Path: <61967230-7A45-4A9D-BEC9-87CBCF2211C9@example.com>\r\nReceived: from a9-183.smtp-out.amazonses.com (a9-183.smtp-out.amazonses.com [54.240.9.183])\r\n by inbound-smtp.us-east-1.amazonaws.com with SMTP id d6iitobk75ur44p8kdnnp7g2n800\r\n for recipient@example.com;\r\n Fri, 11 Sep 2015 20:32:33 +0000 (UTC)\r\nDKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/simple;\r\n\ts=ug7nbtf4gccmlpwj322ax3p6ow6yfsug; d=amazonses.com; t=1442003552;\r\n\th=From:To:Subject:MIME-Version:Content-Type:Content-Transfer-Encoding:Date:Message-ID:Feedback-ID;\r\n\tbh=DWr3IOmYWoXCA9ARqGC/UaODfghffiwFNRIb2Mckyt4=;\r\n\tb=p4ukUDSFqhqiub+zPR0DW1kp7oJZakrzupr6LBe6sUuvqpBkig56UzUwc29rFbJF\r\n\thlX3Ov7DeYVNoN38stqwsF8ivcajXpQsXRC1cW9z8x875J041rClAjV7EGbLmudVpPX\r\n\t4hHst1XPyX5wmgdHIhmUuh8oZKpVqGi6bHGzzf7g=\r\nFrom: sender@example.com\r\nTo: recipient@example.com\r\nSubject: Example subject\r\nMIME-Version: 1.0\r\nContent-Type: text/plain; charset=UTF-8\r\nContent-Transfer-Encoding: 7bit\r\nDate: Fri, 11 Sep 2015 20:32:32 +0000\r\nMessage-ID: <61967230-7A45-4A9D-BEC9-87CBCF2211C9@example.com>\r\nX-SES-Outgoing: 2015.09.11-54.240.9.183\r\nFeedback-ID: 1.us-east-1.Krv2FKpFdWV+KUYw3Qd6wcpPJ4Sv/pOPpEPSHn2u2o4=:AmazonSES\r\n\r\nExample content\r\n"
}

我可以轻松地获得主题,但我不敢相信消息内容很难提取,内容是Example content ,唯一可以找到的地方是content键,但是很难解析

是的 !

例如,如果您使用gmail或其他电子邮件客户端,请查看原始数据或邮件来源,您会看到相同的内容(此处与JSON表示有所不同),但是电子邮件的内容基于RFC2045

Amazon SES电子邮件接收的通知内容已记录,并来自顶级JSON对象

content :包含未经修改的原始电子邮件的字符串,通常为多用途Internet邮件扩展(MIME)格式。 有关MIME格式的更多信息,请参见RFC 2045。

注意仅当通知由SNS操作触发时,此字段才存在。 由所有其他操作触发的通知不包含此字段。

该POJO可能会帮助:

public class SESMessageData {

public SESMessageData() {
}

private String notificationType;

private Receipt receipt;

private Mail mail;

public String getNotificationType() {
    return notificationType;
}

public void setNotificationType(String notificationType) {
    this.notificationType = notificationType;
}

public Receipt getReceipt() {
    return receipt;
}

public void setReceipt(Receipt receipt) {
    this.receipt = receipt;
}

public Mail getMail() {
    return mail;
}

public void setMail(Mail mail) {
    this.mail = mail;
}

public static class Receipt {

    private Action action;

    private Verdict dkimVerdict;

    private String processingTimeMillis;

    private Verdict spamVerdict;

    private Verdict spfVerdict;

    private String timestamp;

    private Verdict virusVerdict;

    private List<String> recipients;

    /**
     * @return A list of the recipient addresses for this delivery.
     */
    public List<String> getRecipients() {
        return recipients;
    }

    public void setRecipients(List<String> recipients) {
        this.recipients = recipients;
    }

    /**
     * @return Object that encapsulates information about the action that was executed.
     */
    public Action getAction() {
        return action;
    }

    public void setAction(Action action) {
        this.action = action;
    }

    /**
     * @return Object that indicates whether the DomainKeys Identified Mail (DKIM) check passed.
     */
    public Verdict getDkimVerdict() {
        return dkimVerdict;
    }

    public void setDkimVerdict(Verdict dkimVerdict) {
        this.dkimVerdict = dkimVerdict;
    }

    /**
     * @return String that specifies the period, in milliseconds, from the time Amazon SES received the message to the time it triggered the action.
     */
    public String getProcessingTimeMillis() {
        return processingTimeMillis;
    }

    public void setProcessingTimeMillis(String processingTimeMillis) {
        this.processingTimeMillis = processingTimeMillis;
    }

    /**
     * @return Object that indicates whether the message is spam.
     */
    public Verdict getSpamVerdict() {
        return spamVerdict;
    }

    public void setSpamVerdict(Verdict spamVerdict) {
        this.spamVerdict = spamVerdict;
    }

    /**
     * @return Object that indicates whether the Sender Policy Framework (SPF) check passed.
     */
    public Verdict getSpfVerdict() {
        return spfVerdict;
    }

    public void setSpfVerdict(Verdict spfVerdict) {
        this.spfVerdict = spfVerdict;
    }

    /**
     * @return String that specifies when the action was triggered, in ISO8601 format.
     */
    public String getTimestamp() {
        return timestamp;
    }

    public void setTimestamp(String timestamp) {
        this.timestamp = timestamp;
    }

    /**
     * @return Object that indicates whether the message contains a virus.
     */
    public Verdict getVirusVerdict() {
        return virusVerdict;
    }

    public void setVirusVerdict(Verdict virusVerdict) {
        this.virusVerdict = virusVerdict;
    }

    /**
     * Object that encapsulates information about the action that was executed.
     */
    public class Action {
        private String type;
        private String topicArn;
        private String bucketName;
        private String objectKey;
        private String smtpReplyCode;
        private String statusCode;
        private String message;
        private String sender;
        private String functionArn;
        private String invocationType;
        private String organizationArn;

        /**
         * @return String that indicates the type of action that was executed. Possible values are S3, SNS, Bounce, Lambda, Stop, and WorkMail.
         */
        public String getType() {
            return type;
        }

        public void setType(String type) {
            this.type = type;
        }

        /**
         * @return String that contains the Amazon Resource Name (ARN) of the Amazon SNS topic to which the notification was published.
         */
        public String getTopicArn() {
            return topicArn;
        }

        public void setTopicArn(String topicArn) {
            this.topicArn = topicArn;
        }

        /**
         * @return String that contains the name of the Amazon S3 bucket to which the message was published. Present only for the S3 action type.
         */
        public String getBucketName() {
            return bucketName;
        }

        public void setBucketName(String bucketName) {
            this.bucketName = bucketName;
        }

        /**
         * @return String that contains a name that uniquely identifies the email in the Amazon S3 bucket. This is the same as the messageId in the mail object. Present only for the S3 action type.
         */
        public String getObjectKey() {
            return objectKey;
        }

        public void setObjectKey(String objectKey) {
            this.objectKey = objectKey;
        }

        /**
         * @return String that contains the SMTP reply code, as defined by RFC 5321. Present only for the bounce action type.
         */
        public String getSmtpReplyCode() {
            return smtpReplyCode;
        }

        public void setSmtpReplyCode(String smtpReplyCode) {
            this.smtpReplyCode = smtpReplyCode;
        }

        /**
         * @return String that contains the SMTP enhanced status code, as defined by RFC 3463. Present only for the bounce action type.
         */
        public String getStatusCode() {
            return statusCode;
        }

        public void setStatusCode(String statusCode) {
            this.statusCode = statusCode;
        }

        public String getMessage() {
            return message;
        }

        public void setMessage(String message) {
            this.message = message;
        }

        public String getSender() {
            return sender;
        }

        public void setSender(String sender) {
            this.sender = sender;
        }

        public String getFunctionArn() {
            return functionArn;
        }

        public void setFunctionArn(String functionArn) {
            this.functionArn = functionArn;
        }

        public String getInvocationType() {
            return invocationType;
        }

        public void setInvocationType(String invocationType) {
            this.invocationType = invocationType;
        }

        public String getOrganizationArn() {
            return organizationArn;
        }

        public void setOrganizationArn(String organizationArn) {
            this.organizationArn = organizationArn;
        }

        @Override
        public String toString() {
            return "Action{" +
                   "type='" + type + '\'' +
                   ", topicArn='" + topicArn + '\'' +
                   ", bucketName='" + bucketName + '\'' +
                   ", objectKey='" + objectKey + '\'' +
                   ", smtpReplyCode='" + smtpReplyCode + '\'' +
                   ", statusCode='" + statusCode + '\'' +
                   ", message='" + message + '\'' +
                   ", sender='" + sender + '\'' +
                   ", functionArn='" + functionArn + '\'' +
                   ", invocationType='" + invocationType + '\'' +
                   ", organizationArn='" + organizationArn + '\'' +
                   '}';
        }
    }

    public class Verdict {
        private String status;

        public String getStatus() {
            return status;
        }

        public void setStatus(String status) {
            this.status = status;
        }

        @Override
        public String toString() {
            return "Verdict{" +
                   "status='" + status + '\'' +
                   '}';
        }
    }

    @Override
    public String toString() {
        return "Receipt{" +
               "action=" + action +
               ", dkimVerdict=" + dkimVerdict +
               ", processingTimeMillis='" + processingTimeMillis + '\'' +
               ", spamVerdict=" + spamVerdict +
               ", spfVerdict=" + spfVerdict +
               ", timestamp='" + timestamp + '\'' +
               ", virusVerdict=" + virusVerdict +
               ", recipients=" + recipients +
               '}';
    }
}

public static class Mail {

    private List<String> destination;

    private String messageId;

    private String source;

    private String timestamp;

    private List<Header> headers;

    private CommonHeader commonHeaders;

    private String headersTruncated;

    /**
     * @return A list of email addresses that are recipients of the email.
     */
    public List<String> getDestination() {
        return destination;
    }

    public void setDestination(List<String> destination) {
        this.destination = destination;
    }

    public String getMessageId() {
        return messageId;
    }

    public void setMessageId(String messageId) {
        this.messageId = messageId;
    }

    public String getSource() {
        return source;
    }

    public void setSource(String source) {
        this.source = source;
    }

    public String getTimestamp() {
        return timestamp;
    }

    public void setTimestamp(String timestamp) {
        this.timestamp = timestamp;
    }

    public List<Header> getHeaders() {
        return headers;
    }

    public void setHeaders(List<Header> headers) {
        this.headers = headers;
    }

    public CommonHeader getCommonHeaders() {
        return commonHeaders;
    }

    public void setCommonHeaders(CommonHeader commonHeaders) {
        this.commonHeaders = commonHeaders;
    }

    public String getHeadersTruncated() {
        return headersTruncated;
    }

    public void setHeadersTruncated(String headersTruncated) {
        this.headersTruncated = headersTruncated;
    }

    public class Header {

        private String name;
        private String value;

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public String getValue() {
            return value;
        }

        public void setValue(String value) {
            this.value = value;
        }

        @Override
        public String toString() {
            return "Header{" +
                   "name='" + name + '\'' +
                   ", value='" + value + '\'' +
                   '}';
        }
    }

    public class CommonHeader {

        private String returnPath;

        private List<String> from;

        private List<String> to;

        private String messageId;

        private String subject;

        public String getReturnPath() {
            return returnPath;
        }

        public void setReturnPath(String returnPath) {
            this.returnPath = returnPath;
        }

        public List<String> getFrom() {
            return from;
        }

        public void setFrom(List<String> from) {
            this.from = from;
        }

        public List<String> getTo() {
            return to;
        }

        public void setTo(List<String> to) {
            this.to = to;
        }

        public String getMessageId() {
            return messageId;
        }

        public void setMessageId(String messageId) {
            this.messageId = messageId;
        }

        public String getSubject() {
            return subject;
        }

        public void setSubject(String subject) {
            this.subject = subject;
        }

        @Override
        public String toString() {
            return "CommonHeader{" +
                   "returnPath='" + returnPath + '\'' +
                   ", from=" + from +
                   ", to=" + to +
                   ", messageId='" + messageId + '\'' +
                   ", subject='" + subject + '\'' +
                   '}';
        }
    }

    @Override
    public String toString() {
        return "Mail{" +
               "destination=" + destination +
               ", messageId='" + messageId + '\'' +
               ", source='" + source + '\'' +
               ", timestamp='" + timestamp + '\'' +
               ", headers=" + headers +
               ", commonHeaders=" + commonHeaders +
               ", headersTruncated='" + headersTruncated + '\'' +
               '}';
    }
}

@Override
public String toString() {
    return "SESMessageData{" +
           "notificationType='" + notificationType + '\'' +
           ", receipt=" + receipt +
           ", mail=" + mail +
           '}';
}

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM