【问题标题】:Sending email using SES in typescript在 typescript 中使用 SES 发送电子邮件
【发布时间】:2020-12-02 09:31:31
【问题描述】:

我正在尝试使用打字稿中的 ses 设置电子邮件服务。我按照这个例子https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/javascript/example_code/ses/ses_sendemail.js 但我得到了

AWS.ses 不是构造函数。

这是我的 emailService 类

const AWS = require("aws-sdk");
const loggerService: LoggerServiceInterface = new LoggerService();

AWS.config.update({region: "us-east-1"});

export class EmailService {

sendEmail(recipient: string): Promise<boolean> {

 const params = {
  Destination: { /* required */
    CcAddresses: [
      "abcd@gmail.com",
      /* more items */
    ],
    ToAddresses: [
      "abcd@gmail.com",
      /* more items */
    ]
  },
  Message: { /* required */
    Body: { /* required */
      Html: {
       Charset: "UTF-8",
       Data: "HTML_FORMAT_BODY"
      },
      Text: {
       Charset: "UTF-8",
       Data: "TEXT_FORMAT_BODY"
      }
     },
     Subject: {
      Charset: "UTF-8",
      Data: "Test email"
     }
    },
  Source: "xyxy@gmail.com",
  ReplyToAddresses: [
     "xyxy@gmail.com",
  ],
};

const sendPromise = new AWS.SES({apiVersion: "2010-12-01"}).sendEmail(params).promise();

sendPromise.then(function(data) {
  console.log(data.MessageId);
}).catch(
  function(err) {
  console.error(err, err.stack);
});

return Promise.resolve(true);
}
}

我在一个 sanbox 环境中,并且这两封电子邮件都经过验证。我错过了什么吗?

【问题讨论】:

  • 您尝试过使用import {AWS} from 'aws-sdk' 吗?
  • 我有const AWS = require("aws-sdk");
  • 是的,但是由于您使用的是打字稿,因此我不确定这是否可以正常工作。
  • 我试过import {AWS} from 'aws-sdk',但这是一个语法错误。它在 aws-sdk 中找不到 AWS,但需要 const AWS = require("aws-sdk");

标签: typescript amazon-ses


【解决方案1】:

这对我有用

import { SES, AWSError } from 'aws-sdk';
import { SendEmailRequest, SendEmailResponse } from 'aws-sdk/clients/ses';

const ses = new SES();

const params: SendEmailRequest = {
    Source: sender,
    Destination: {
        ToAddresses: [
            recipient
        ]
    },
    Message: {
        Subject: {
            Data: subject,
            Charset: charset
        },
        Body: {
            Text: {
                Data: body,
                Charset: charset
            },
            Html: {
                Data: html,
                Charset: charset
            }
        }
    }
}

ses.sendEmail(params, (err: AWSError, data: SendEmailResponse) => {
  if (err) console.log(err, err.stack);
    else console.log(data);
});

【讨论】:

    【解决方案2】:

    使用异步 lambda 函数和AWS-SDK SES with promises:

    import { Handler } from 'aws-lambda';
    import { SES } from 'aws-sdk';
    
    type Event = {
      ...
    };
    
    export const handler: Handler<Event> = async (event: Event) => {
      try {
        const params: SendEmailRequest = {
          ...
        }
        var result = await ses.sendEmail(params).promise();
      } catch (exception) { ...
      }
    };
    
    

    【讨论】:

      猜你喜欢
      • 2017-10-09
      • 1970-01-01
      • 2020-01-06
      • 1970-01-01
      • 2011-08-07
      • 2020-10-20
      • 2017-11-11
      • 1970-01-01
      • 2022-05-23
      相关资源
      最近更新 更多