{"id":1618,"date":"2023-03-25T20:55:54","date_gmt":"2023-03-25T12:55:54","guid":{"rendered":"https:\/\/www.appblog.cn\/?p=1618"},"modified":"2023-04-27T21:18:21","modified_gmt":"2023-04-27T13:18:21","slug":"receiving-emails-using-aws-ses","status":"publish","type":"post","link":"https:\/\/www.appblog.cn\/index.php\/2023\/03\/25\/receiving-emails-using-aws-ses\/","title":{"rendered":"\u4f7f\u7528 AWS SES \u63a5\u6536\u7535\u5b50\u90ae\u4ef6"},"content":{"rendered":"<p>AWS SES: <a target=\"_blank\" rel=\"noopener\" href=\"https:\/\/console.aws.amazon.com\/ses\/home\">https:\/\/console.aws.amazon.com\/ses\/home<\/a><br \/>\n\u53c2\u8003\u6587\u6863\uff1a<a target=\"_blank\" rel=\"noopener\" href=\"https:\/\/docs.aws.amazon.com\/zh_cn\/ses\/latest\/DeveloperGuide\/receiving-email.html\">https:\/\/docs.aws.amazon.com\/zh_cn\/ses\/latest\/DeveloperGuide\/receiving-email.html<\/a><\/p>\n<h2>\u914d\u7f6eSES\u90ae\u4ef6\u4ee3\u6536<\/h2>\n<p><!-- more --><\/p>\n<p><code>Email Receiving<\/code> -&gt; <code>Rule Sets<\/code> -&gt; <code>Create a Receipt Rule<\/code><\/p>\n<ul>\n<li><code>Recipients<\/code>: <code>Add Recipient<\/code><\/li>\n<li><code>Actions<\/code>: <code>Add action<\/code> (S3 &amp; Lambda)<\/li>\n<li><code>Rule details<\/code>: <code>Rule name<\/code> (appblog-ses-receipt-rule-set)<\/li>\n<li><code>Review<\/code><\/li>\n<\/ul>\n<h2>S3\u914d\u7f6e<\/h2>\n<p>\u521b\u5efa<code>S3 bucket<\/code>\uff0c\u540d\u79f0\u4e3a<code>appblog-ses<\/code>\uff0c\u9ed8\u8ba4\u6743\u9650\uff08\u5373\u963b\u6b62\u516c\u5171\u8bbf\u95ee\u6743\u9650\uff09<\/p>\n<p>\u82e5<code>Receipt Rule<\/code>\u7684<code>Review<\/code>\u9636\u6bb5\u62a5\u9519\uff1a<\/p>\n<pre><code>Could not write to bucket: appblog-ses (Request ID: 18fc830c-2a55-4ab0-b646-835466d113e0)<\/code><\/pre>\n<p>\u5219\u914d\u7f6eSES\u8bbf\u95eeS3\u7684\u6743\u9650\uff1a<code>S3 bucket<\/code>\u8be6\u60c5 -&gt; \u6743\u9650 -&gt; \u5b58\u50a8\u6876\u7b56\u7565<\/p>\n<pre><code class=\"language-json\">{\n    &quot;Version&quot;: &quot;2012-10-17&quot;,\n    &quot;Statement&quot;: [\n        {\n            &quot;Sid&quot;: &quot;AllowSESPuts&quot;,\n            &quot;Effect&quot;: &quot;Allow&quot;,\n            &quot;Principal&quot;: {\n                &quot;Service&quot;: &quot;ses.amazonaws.com&quot;\n            },\n            &quot;Action&quot;: &quot;s3:PutObject&quot;,\n            &quot;Resource&quot;: &quot;arn:aws:s3:::BUCKET-NAME\/*&quot;,\n            &quot;Condition&quot;: {\n                &quot;StringEquals&quot;: {\n                    &quot;aws:Referer&quot;: &quot;AWSACCOUNTID&quot;\n                }\n            }\n        }\n    ]\n}<\/code><\/pre>\n<ul>\n<li><code>BUCKET-NAME<\/code>\u4e3aS3 bucket\u540d\u79f0\uff0c\u5373<code>appblog-ses<\/code><\/li>\n<li><code>AWSACCOUNTID<\/code>\u5f53\u524d\u767b\u5f55\u8d26\u53f7ID\uff0c\u5373\u53bb\u6a2a\u6746\u7684\u4e00\u4e32\u6570\u5b57<\/li>\n<\/ul>\n<p>\u53c2\u8003\uff1a<a target=\"_blank\" rel=\"noopener\" href=\"https:\/\/docs.aws.amazon.com\/ses\/latest\/DeveloperGuide\/receiving-email-permissions.html\">https:\/\/docs.aws.amazon.com\/ses\/latest\/DeveloperGuide\/receiving-email-permissions.html<\/a><br \/>\n\u53c2\u8003\uff1a<a target=\"_blank\" rel=\"noopener\" href=\"https:\/\/stackoverflow.com\/questions\/41819286\/how-to-give-amazon-ses-permission-to-write-to-your-amazon-s3-bucket\">https:\/\/stackoverflow.com\/questions\/41819286\/how-to-give-amazon-ses-permission-to-write-to-your-amazon-s3-bucket<\/a><\/p>\n<h2>Lambda\u914d\u7f6e<\/h2>\n<p>AWS Lambda: <a target=\"_blank\" rel=\"noopener\" href=\"https:\/\/console.aws.amazon.com\/lambda\/home\">https:\/\/console.aws.amazon.com\/lambda\/home<\/a><\/p>\n<h3>\u521b\u5efaLambda\u51fd\u6570<\/h3>\n<p>Lambda -&gt; \u521b\u5efa\u51fd\u6570<\/p>\n<ul>\n<li>\u4ece\u5934\u5f00\u59cb\u521b\u4f5c<\/li>\n<li>\u51fd\u6570\u540d\u79f0\uff1aSesForwarder<\/li>\n<li>\u8fd0\u884c\u65f6\uff1aNode.js 8.10 (\u53c2\u8003aws-lambda-ses-forwarder)<\/li>\n<li>\u6743\u9650\uff1a\u521b\u5efa\u5177\u6709\u57fa\u672c Lambda \u6743\u9650\u7684\u65b0\u89d2\u8272<\/li>\n<\/ul>\n<h3>\u7f16\u8f91Lambda\u51fd\u6570\u811a\u672c<\/h3>\n<p><code>AWS Lambda SES Email Forwarder<\/code>: <a target=\"_blank\" rel=\"noopener\" href=\"https:\/\/github.com\/arithmetric\/aws-lambda-ses-forwarder\">https:\/\/github.com\/arithmetric\/aws-lambda-ses-forwarder<\/a><br \/>\n\u811a\u672c\u5185\u5bb9\u53c2\u8003: <a target=\"_blank\" rel=\"noopener\" href=\"https:\/\/github.com\/arithmetric\/aws-lambda-ses-forwarder\/blob\/master\/index.js\">https:\/\/github.com\/arithmetric\/aws-lambda-ses-forwarder\/blob\/master\/index.js<\/a><\/p>\n<p>\u53ea\u9700\u4fee\u6539\u914d\u7f6e\u5185\u5bb9\uff1a<\/p>\n<pre><code class=\"language-javascript\">var defaultConfig = {\n  fromEmail: &quot;forwarder@appblog.cn&quot;,\n  subjectPrefix: &quot;&quot;,\n  emailBucket: &quot;appblog-ses&quot;,\n  emailKeyPrefix: &quot;appblog\/&quot;,\n  forwardMapping: {\n    &quot;support@appblog.cn&quot;: [\n      &quot;joe@appblog.cn&quot;,\n      &quot;admin@appblog.cn&quot;,\n      &quot;test@appblog.cn&quot;\n    ],\n    &quot;develop@appblog.cn&quot;: [\n      &quot;joe@appblog.cn&quot;,\n      &quot;admin@appblog.cn&quot;,\n      &quot;test@appblog.cn&quot;\n    ]\n  }\n};<\/code><\/pre>\n<h3>\u7f16\u8f91Lambda\u51fd\u6570\u811a\u672c<\/h3>\n<p>IAM: <a target=\"_blank\" rel=\"noopener\" href=\"https:\/\/console.aws.amazon.com\/iam\/home\">https:\/\/console.aws.amazon.com\/iam\/home<\/a><\/p>\n<h4>\u521b\u5efa\u7b56\u7565<\/h4>\n<p>\uff081\uff09\u8bbf\u95ee\u7ba1\u7406 -&gt; \u7b56\u7565 -&gt; \u521b\u5efa\u7b56\u7565 -&gt; JSON<\/p>\n<pre><code class=\"language-json\">{\n   &quot;Version&quot;: &quot;2012-10-17&quot;,\n   &quot;Statement&quot;: [\n      {\n         &quot;Effect&quot;: &quot;Allow&quot;,\n         &quot;Action&quot;: [\n            &quot;logs:CreateLogGroup&quot;,\n            &quot;logs:CreateLogStream&quot;,\n            &quot;logs:PutLogEvents&quot;\n         ],\n         &quot;Resource&quot;: &quot;arn:aws:logs:*:*:*&quot;\n      },\n      {\n         &quot;Effect&quot;: &quot;Allow&quot;,\n         &quot;Action&quot;: &quot;ses:SendRawEmail&quot;,\n         &quot;Resource&quot;: &quot;*&quot;\n      },\n      {\n         &quot;Effect&quot;: &quot;Allow&quot;,\n         &quot;Action&quot;: [\n            &quot;s3:GetObject&quot;,\n            &quot;s3:PutObject&quot;\n         ],\n         &quot;Resource&quot;: &quot;arn:aws:s3:::S3-BUCKET-NAME\/*&quot;\n      }\n   ]\n}<\/code><\/pre>\n<p>\uff082\uff09\u67e5\u770b\u7b56\u7565 -&gt; \u8bbe\u7f6e\u540d\u79f0\u4e3a<code>LambdaSesForwarderPolicy<\/code> -&gt; \u521b\u5efa\u7b56\u7565<\/p>\n<h4>\u9644\u52a0\u7b56\u7565<\/h4>\n<p>\uff081\uff09\u8bbf\u95ee\u7ba1\u7406 -&gt; \u89d2\u8272<\/p>\n<p>\u627e\u5230\u524d\u9762\u521b\u5efaLambda\u51fd\u6570\u65f6\u521b\u5efa\u7684\u5177\u6709\u57fa\u672cLambda\u6743\u9650\u7684\u65b0\u89d2\u8272\uff1a<code>SesForwarder-role-xxxxxx<\/code>\uff0c\u5e76\u70b9\u51fb\u8fdb\u5165\u6458\u8981\u9875<\/p>\n<p>\uff082\uff09\u70b9\u51fb<code>\u9644\u52a0\u7b56\u7565<\/code>\uff0c\u9009\u62e9\u521a\u521a\u521b\u5efa\u7684\u7b56\u7565<code>LambdaSesForwarderPolicy<\/code>\u9644\u52a0\u7b56\u7565\u5373\u53ef<\/p>\n","protected":false},"excerpt":{"rendered":"<p>AWS SES: https:\/\/console.aws.amazon.com\/ses\/home \u53c2\u8003\u6587\u6863\uff1ah [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[90],"tags":[400,403],"class_list":["post-1618","post","type-post","status-publish","format-standard","hentry","category-cloud-devops","tag-aws","tag-ses"],"_links":{"self":[{"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/posts\/1618","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/comments?post=1618"}],"version-history":[{"count":0,"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/posts\/1618\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/media?parent=1618"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/categories?post=1618"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/tags?post=1618"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}