AWS LambdaとJava SDK(非公式)でCustomers Mail Cloudからメール送信を行う

AWS Lambdaは多数のプログラミング言語を実行できます。多くの場合PythonやNode.jsのようですが、Javaも実行可能な言語の一つです。エンタープライズ系のシステムで利用されることの多いJavaもAWS Lambdaであればマイクロサービス化して利用できます。

今回はこのAWS LambdaとCustomers Mail CloudのJava SDK(非公式です、ご注意ください)を使ってメール送信を行ってみます。

Java SDKについて

コードはgoofmint/Customers-Mail-Cloud-Java: Customers Mail CloudのJava用SDKですにて公開しています。ライセンスはMIT Licenseで、自由に利用、改変可能です。

ファイル構成

ファイルは次のように配置しています。customersmailcloudフォルダ以下はJava SDKをそのまま配置しています。

$ tree .
.
├── build.gradle
└── src
    └── main
        └── java
            ├── customersmailcloud
            │   ├── CustomersMailCloud.java
            │   ├── CustomersMailCloudException.java
            │   ├── CustomersMailCloudMail.java
            │   ├── CustomersMailCloudMailAddress.java
            │   └── CustomersMailCloudRequest.java
            └── example
                └── Hello.java

5 directories, 7 files

build.gradleについて

今回はGradleを利用しています。内容は次の通りです。ローカルファイルもクラスパスに追加しています。

apply plugin: 'java'
apply plugin: 'application'

repositories {
    mavenCentral()
}

test {
    useJUnitPlatform {
        includeEngines 'junit-jupiter'
    }
}

task buildZip(type: Zip) {
    from compileJava
    from processResources
    into('lib') {
        from configurations.runtimeClasspath
    }
}

sourceCompatibility = 1.8
targetCompatibility = 1.8

dependencies {
  compile fileTree(dir: 'src/main/java')
  compile group: 'org.json', name: 'json', version: '20090211'
  compile group: 'org.apache.httpcomponents', name: 'httpclient', version: '4.5.12'
  compile "org.apache.httpcomponents:httpcore:4.2.4"
  compile "org.apache.httpcomponents:httpmime:4.3"
  compile "com.fasterxml.jackson.core:jackson-databind:2.3.4"
  implementation 'com.amazonaws:aws-lambda-java-core:1.2.1'
  implementation 'com.amazonaws:aws-lambda-java-events:3.1.0'
  runtimeOnly 'com.amazonaws:aws-lambda-java-log4j2:1.2.0'
  testCompile group: 'org.junit.jupiter', name: 'junit-jupiter-api', version: '5.1.0'
  testRuntime group: 'org.junit.jupiter', name: 'junit-jupiter-engine', version: '5.1.0'
}

Hello.javaについて

ではAWS Lambdaへのリクエストを処理するHello.javaについてです。まず必要なライブラリをインポートします。

package example;

import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestHandler;
import com.amazonaws.services.lambda.runtime.LambdaLogger;

import java.util.Map;

import customersmailcloud.CustomersMailCloud;
import customersmailcloud.CustomersMailCloudMail;
import customersmailcloud.CustomersMailCloudMailAddress;
import customersmailcloud.CustomersMailCloudException;

処理は handleRequest の中に記述します。

// Handler value: example.Handler
public class Hello implements RequestHandler<Map<String,String>, String>{
  @Override
  public String handleRequest(Map<String,String> event, Context context)
  {
    // 後述
  }
}

まずSDKの初期化をします。APIユーザ、APIキーはCustomers Mail Cloudで作成するものですが、AWS Lambdaの環境設定に追加してあります。

String apiKey = System.getenv("API_KEY");;
String apiUser = System.getenv("API_USER");;
CustomersMailCloud client =  new CustomersMailCloud(apiUser, apiKey);

契約内容の設定

契約状態によってメソッドが異なります。

  • トライアル client.trial();
  • スタンダード client.standard();
  • プロ client.pro(subdomain);
client.trial();

メールの設定

初期化されたらメールの情報を設定していきます。メールオブジェクトは client.getMail() で取得します。

CustomersMailCloudMail mail = client.getMail();

メールアドレスは CustomersMailCloudMailAddress を利用して作成します。これは送信元、送信先両方に使います。

CustomersMailCloudMailAddress toAddress = new CustomersMailCloudMailAddress();
toAddress.name = event.get("name");
toAddress.address = event.get("email");
mail.to = new CustomersMailCloudMailAddress[1];
mail.to[0] = toAddress;
CustomersMailCloudMailAddress fromAddress = new CustomersMailCloudMailAddress();
fromAddress.name = "Admin";
fromAddress.address = "info@dxlabo.com";
mail.from = fromAddress;

後は件名、本文を指定します。

mail.subject = "Test mail";
mail.text = "Mail body";

メールの送信

メール送信は client.send(mail) を実行してください。

try {
  String response = client.send(mail);
  return response;
} catch (CustomersMailCloudException e) {
  return e.getMessage();
}

結果はIDが返ってきます。

<f23ec790-403f-11eb-a4d7-9ca3ba311822@mta03.sandbox.smtps.jp>

エラーの場合

エラーの場合は CustomersMailCloudException が返ってきます。

try {
  // 略
} catch (CustomersMailCloudException e) {
  System.err.println(e.getMessage());
}

この中にエラーメッセージが返ってきます。

まとめ

Javaを使ってシステム開発を行っている場合のメール送信にぜひCustomers Mail Cloudを利用してみてください。SMTPが利用できない環境でも高速、大量のメール送信を安定して実行できます。

クラウドからのメール送信を簡単に。確実に。| Customers Mail Cloud