2016-01-11 29 views
5

Tôi đang làm việc trên một hệ thống email xuất bản dựa trên AWS SES. Đối với tất cả các email đến, tôi đã thiết lập định tuyến để lưu các thư trong một thùng S3 để tôi có thể xử lý chúng một cách không đồng bộ. Vấn đề tôi có là các tin nhắn được lưu trong thùng S3 ở định dạng thô: tiêu đề, nội dung email, vv + tệp đính kèm được mã hóa (chuỗi lớn) - tất cả trong một tệp.Quá trình AWS SES S3 email đến

Có cách nào để tách thông điệp email ra khỏi tệp đính kèm và lưu cả hai trong các tệp riêng biệt ở cấp SES AWS không? Tôi đang cố gắng để có được các dữ liệu ở định dạng tôi cần trực tiếp từ AWS và tránh thêm một bước xử lý cho quá trình này.

Nếu AWS SES không cung cấp tính năng như vậy, thì cách nào đúng để xử lý các thông báo này để có được kết quả được mô tả ở trên?

+0

công việc của bạn là gì để tải về và xem các email thô? Tôi chỉ mới bắt đầu với AWS SES. – johnborges

Trả lời

7

Có vẻ như không thể SES tự động chia email cho bạn. Theo các tài liệu here:

Amazon SES cung cấp cho bạn những liệu, email chưa sửa đổi, thường là trong Multipurpose Internet Mail Extensions định dạng (MIME).

Tôi sẽ sử dụng S3 hoặc SNS để kích hoạt hàm Lambda mỗi khi SES đặt một tệp email mới lên S3. Chức năng Lambda có thể chia nhỏ tệp theo ý bạn, sau đó viết các tệp mới đó vào một thùng S3 khác.

+4

Có tài liệu nào mà bạn biết có thể mô tả cách tạo hàm Lambda không? Tôi có email gửi đến SES nơi tôi chỉ cần sao chép các tập tin đính kèm vào S3. – greener

+0

Đánh dấu sẽ có ý nghĩa hơn khi phân tích các tiêu đề và nội dung cần thiết từ đối tượng ses được lưu trữ trong s3 và sau đó lưu chúng cục bộ hoặc theo tệp hoặc bản ghi db để không cần thêm các yêu cầu kéo nữa cho S3? Một trường hợp sử dụng là trong phần phụ trợ, Ví dụ, chúng ta có thể xem/admin/email và mỗi email được lặp lại để hiển thị thông tin (Giống như ứng dụng email trực tuyến) và mỗi lần tải trang sẽ cần thực hiện yêu cầu s3 làm tư thế cho thư mục cục bộ hoặc yêu cầu db cục bộ, Bạn sẽ khuyên gì về điều đó? Ở lại với S3 hoặc sử dụng môi trường địa phương? – Birdy

0

Về câu hỏi về cách viết Lambda. Đây là một phần của Lambda của chúng tôi. Điều chính để loại bỏ nó là hàm parseEvent. và data.event.Records [0] sẽ cung cấp cho bạn thông tin chi tiết

exports.handler = function(event, context, callback) { 

    var AWS = require('aws-sdk'); 

    // Validate characteristics of a SES event record. 
    if (!event || 
     !event.hasOwnProperty('Records') || 
     event.Records.length !== 1 || 
     event.Records[0].hasOwnProperty('eventSource') || 
     event.Records[0].eventSource !== 'aws:ses' || 
     event.Records[0].eventVersion !== '1.0') { 
     callback(null, {'disposition':'STOP_RULE_SET'});  
    } 

    email = data.event.Records[0].ses.mail; 
    subjectLine = event.Records[0].ses.mail.commonHeaders.subject; 
} 

Chìa khóa là sự kiện.Record [0] .ses.mail. Thật không may, tôi không thể tìm thấy cấu trúc của nó thông qua một tìm kiếm của Google, tôi chắc chắn tôi đã nhìn thấy nó trước đây.

5

Đối với bất kỳ ai quay lại sau này cho câu hỏi này, đây là liên kết đến cấu trúc JSON mà bạn nhận được khi bạn gọi hàm Lambda từ SES.

http://docs.aws.amazon.com/ses/latest/DeveloperGuide/receiving-email-notifications-examples.html

Phải mất một số tìm kiếm để đi đến trang đó ;-)

Từ liên kết, một thông báo Lambda sẽ trông như thế này,

{ 
"notificationType": "Received", 
"receipt": { 
    "timestamp": "2015-09-11T20:32:33.936Z", 
    "processingTimeMillis": 406, 
    "recipients": [ 
     "[email protected]" 
    ], 
    "spamVerdict": { 
     "status": "PASS" 
    }, 
    "virusVerdict": { 
     "status": "PASS" 
    }, 
    "spfVerdict": { 
     "status": "PASS" 
    }, 
    "dkimVerdict": { 
     "status": "PASS" 
    }, 
    "action": { 
     "type": "S3", 
     "topicArn": "arn:aws:sns:us-east-1::example-topic", 
     "bucketName": "my-S3-bucket", 
     "objectKey": "\email" 
    } 
}, 
"mail": { 
    "timestamp": "2015-09-11T20:32:33.936Z", 
    "source": "[email protected]zonses.com", 
    "messageId": "d6iitobk75ur44p8kdnnp7g2n800", 
    "destination": [ 
     "[email protected]" 
    ], 
    "headersTruncated": false, 
    "headers": [ 
     { 
      "name": "Return-Path", 
      "value": "<[email protected]zonses.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 [email protected]; 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": "[email protected]" 
     }, 
     { 
      "name": "To", 
      "value": "[email protected]" 
     }, 
     { 
      "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": "<[email protected]>" 
     }, 
     { 
      "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": "[email protected]zonses.com", 
     "from": [ 
      "[email protected]" 
     ], 
     "date": "Fri, 11 Sep 2015 20:32:32 +0000", 
     "to": [ 
      "[email protected]" 
     ], 
     "messageId": "<[email protected]>", 
     "subject": "Example subject" 
    } 
} 
} 
Các vấn đề liên quan