[ses-builder] Amazon SESのリクエストパラメーターを作るだけのライブラリを作った話

システムからSES経由でメールを出すことがちょいちょいあるのですが、毎回大きなオブジェクトを作るのが嫌になってきたので、ビルダー作りました。 これをif分岐とかしながら作るのはさすがにつらい。 使い方 AWS SDKを使 […]

広告ここから
広告ここまで

目次

    システムからSES経由でメールを出すことがちょいちょいあるのですが、毎回大きなオブジェクトを作るのが嫌になってきたので、ビルダー作りました。

    var params = {
      Destination: {
       BccAddresses: [
       ], 
       CcAddresses: [
          "[email protected]"
       ], 
       ToAddresses: [
          "[email protected]", 
          "[email protected]"
       ]
      }, 
      Message: {
       Body: {
        Html: {
         Charset: "UTF-8", 
         Data: "This message body contains HTML formatting. It can, for example, contain links like this one: <a class=\"ulink\" href=\"https://docs.aws.amazon.com/ses/latest/DeveloperGuide\" target=\"_blank\">Amazon SES Developer Guide</a>."
        }, 
        Text: {
         Charset: "UTF-8", 
         Data: "This is the message body in text format."
        }
       }, 
       Subject: {
        Charset: "UTF-8", 
        Data: "Test email"
       }
      }, 
      ReplyToAddresses: [
      ], 
      ReturnPath: "", 
      ReturnPathArn: "", 
      Source: "[email protected]", 
      SourceArn: ""
     };

    これをif分岐とかしながら作るのはさすがにつらい。

    使い方

    AWS SDKを使うためのライブラリなので、一緒に入れてください。

    $ npm i -S ses-builder aws-sdk

    TypeScript(というかECMAScript)的な書き方ですが、こんな感じで書けます。

    import { SES } from 'aws-sdk'
    import {SendMailBuilder, MailDestinationHelper, MailMessageHelper} from 'ses-builder'
    
    // set source
    SendMailBuilder.setSource('[email protected]')
    
    // Set destination
    MailDestinationHelper.putToAddresses('[email protected]')
    SendMailBuilder.setDestination(MailDestinationHelper.getDestination())
    
    // set message
    MailMessageHelper.putBody({
        text: 'hello'
    })
    SendMailBuilder.setMessage(MailMessageHelper.getMessage())
    
    // set reply address
    SendMailBuilder.setReplyToAddresses(['[email protected]'])
    
    const ses = new SES()
    ses.sendEmail(SendMailBuilder.getParams()).promise()

    メソッドチェーンも対応してます。

    import { SES } from 'aws-sdk'
    import {SendMailBuilder, MailDestinationHelper, MailMessageHelper} from 'ses-builder'
    
    // Set destination
    MailDestinationHelper.putToAddresses('[email protected]')
    
    // set message
    MailMessageHelper.putBody({
        text: 'hello'
    })
    
    // set source
    SendMailBuilder.setSource('[email protected]')
      .setDestination(MailDestinationHelper.getDestination())
      .setMessage(MailMessageHelper.getMessage())
      .setReplyToAddresses(['[email protected]'])
    
    const ses = new SES()
    ses.sendEmail(SendMailBuilder.getParams()).promise()

    状況によって送る相手が複数になったりするケースや、HTMLかTextかとかいろいろ分岐がおきますが、ビルダーにしておけばだいたいなんとかなります。(たぶん)

    他のAWSサービスのビルダーとかも作り出したらそのうちまとめるかもです。

    ses-builder on GitHub

    広告ここから
    広告ここまで
    Home
    Search
    Bookmark