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が利用できない環境でも高速、大量のメール送信を安定して実行できます。