기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
Lambda 함수 예제
이 주제는 메일 흐름을 제어하는 Lambda 함수의 예시를 소개합니다.
예제 1: 스팸 거부
이 예제는 스팸 지표를 하나 이상 가진 메시지에 대한 처리를 중단합니다.
exports.handler = function(event, context, callback) { console.log('Spam filter'); var sesNotification = event.Records[0].ses; console.log("SES Notification:\n", JSON.stringify(sesNotification, null, 2)); // Check if any spam check failed if (sesNotification.receipt.spfVerdict.status === 'FAIL' || sesNotification.receipt.dkimVerdict.status === 'FAIL' || sesNotification.receipt.spamVerdict.status === 'FAIL' || sesNotification.receipt.virusVerdict.status === 'FAIL') { console.log('Dropping spam'); // Stop processing rule set, dropping message callback(null, {'disposition':'STOP_RULE_SET'}); } else { callback(null, null); } };
예제 2: 특정 헤더가 발견되면 계속
이 예제는 이메일이 특정 헤더 값을 포함하는 경우에만 현재 규칙을 계속 처리합니다.
exports.handler = function(event, context, callback) { console.log('Header matcher'); var sesNotification = event.Records[0].ses; console.log("SES Notification:\n", JSON.stringify(sesNotification, null, 2)); // Iterate over the headers for (var index in sesNotification.mail.headers) { var header = sesNotification.mail.headers[index]; // Examine the header values if (header.name === 'X-Header' && header.value === 'X-Value') { console.log('Found header with value.'); callback(null, null); return; } } // Stop processing the rule if the header value wasn't found callback(null, {'disposition':'STOP_RULE'}); };
예제 3: Amazon S3에서 이메일 검색
이 예제는 Amazon S3에서 이메일 원본을 가져와서 처리합니다.
참고
그러려면 우선 S3 작업을 사용하는 Amazon S3에 이메일을 써야 합니다.
var AWS = require('aws-sdk'); var s3 = new AWS.S3(); var bucketName = '<YOUR BUCKET GOES HERE>'; exports.handler = function(event, context, callback) { console.log('Process email'); var sesNotification = event.Records[0].ses; console.log("SES Notification:\n", JSON.stringify(sesNotification, null, 2)); // Retrieve the email from your bucket s3.getObject({ Bucket: bucketName, Key: sesNotification.mail.messageId }, function(err, data) { if (err) { console.log(err, err.stack); callback(err); } else { console.log("Raw email:\n" + data.Body); // Custom email processing goes here callback(null, null); } }); };
예제 4: DMARC 인증에 실패한 반송 메일 메시지
이 예제에서는 수신 이메일이 DMARC 인증에 실패한 경우 반송 메일 메시지를 보냅니다.
참고
이 예제를 사용하는 경우 emailDomain
환경 변수의 값을 이메일 수신 도메인으로 설정합니다.
'use strict'; const AWS = require('aws-sdk'); // Assign the emailDomain environment variable to a constant. const emailDomain = process.env.emailDomain; exports.handler = (event, context, callback) => { console.log('Spam filter starting'); const sesNotification = event.Records[0].ses; const messageId = sesNotification.mail.messageId; const receipt = sesNotification.receipt; console.log('Processing message:', messageId); // If DMARC verdict is FAIL and the sending domain's policy is REJECT // (p=reject), bounce the email. if (receipt.dmarcVerdict.status === 'FAIL' && receipt.dmarcPolicy.status === 'REJECT') { // The values that make up the body of the bounce message. const sendBounceParams = { BounceSender: `mailer-daemon@${emailDomain}`, OriginalMessageId: messageId, MessageDsn: { ReportingMta: `dns; ${emailDomain}`, ArrivalDate: new Date(), ExtensionFields: [], }, // Include custom text explaining why the email was bounced. Explanation: "Unauthenticated email is not accepted due to the sending domain's DMARC policy.", BouncedRecipientInfoList: receipt.recipients.map((recipient) => ({ Recipient: recipient, // Bounce with 550 5.6.1 Message content rejected BounceType: 'ContentRejected', })), }; console.log('Bouncing message with parameters:'); console.log(JSON.stringify(sendBounceParams, null, 2)); // Try to send the bounce. new AWS.SES().sendBounce(sendBounceParams, (err, data) => { // If something goes wrong, log the issue. if (err) { console.log(`An error occurred while sending bounce for message: ${messageId}`, err); callback(err); // Otherwise, log the message ID for the bounce email. } else { console.log(`Bounce for message ${messageId} sent, bounce message ID: ${data.MessageId}`); // Stop processing additional receipt rules in the rule set. callback(null, { disposition: 'stop_rule_set', }); } }); // If the DMARC verdict is anything else (PASS, QUARANTINE or GRAY), accept // the message and process remaining receipt rules in the rule set. } else { console.log('Accepting message:', messageId); callback(); } };