Skip to content

Javaによるメール送信

JavaMail(javax.mail)は、Javaでメールアプリケーションを作成するためのライブラリです。Customers Mail Cloudは、DNSラウンドロビンによるシステム冗長化に対応したJavaライブラリを提供します。

SMTPホスト名

以下のSMTPホスト名を、JavaMailのプロパティ "mail.smtp.host" に指定します。

サービスプラン SMTPホスト名
無料トライアル sandbox.smtps.jp
Standard te.smtps.jp
Pro SUBDOMAIN.smtps.jp (SUBDOMAINは各ユーザに割り当てたドメイン)

ライブラリ

JavaMail標準のTransportクラスの代わりに使用することができるCMCTransportクラスを提供します。

CMCTransportはDNSラウンドロビンに対応しており、メールトラフィックを2台以上のリレーサーバに負荷分散するとともに、障害発生時は正常に動作しているメールサーバにSMTP接続を自動的にリトライする制御を行っています。

ライブラリは、以下をダウンロードして使用してください。本ライブラリは、Apache License Version 2.0 で提供します。

サンプルコード

JavaMailとCMCTransportクラスを使用したサンプルコードです。

package jp.co.hde.mail.smtp;

import java.util.Date;
import java.util.Properties;

import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.SendFailedException;
import javax.mail.Session;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMessage.RecipientType;

import junit.framework.TestCase;

public class CMCTransportTest extends TestCase {

    /**
    * SMTP認証を使ってメールを送信する
    * username, password にはAPIユーザ設定にて作成した
    * APIユーザ名とAPIキーを指定します。
    */
    public void testSendMessageWithAuth() throws MessagingException {
        try {
            // メッセージを生成する
            Message message = setup();
            // SMTP認証を使ってメールを送信する
            CMCTransport.send(message, "username", "password");
        } catch (SendFailedException e) {
            fail(e.getMessage());
        }
    }

    /**
    * SMTP認証を使わずにメールを送信する
    * サービスプラン Pro でIPアクセス認証を設定した場合、
    * SMTP認証無しでメールを送信することができます。
    */
    public void testSendMessage() {
        try {
            // メッセージを生成する
            Message message = setup();
            // メールを送信する
            CMCTransport.send(message));
        } catch (SendFailedException e) {
            fail(e.getMessage());
        }
    }

    private Message setup() {

        // Properties を作成して、SMTPホスト名を設定する。
        Properties prop = new Properties();
        prop.put("mail.smtp.host", "SUBDOMAIN.smtps.jp");

        // Session を作成する
        // getDefaultInstance はシングルトンのSessionオブジェクトを
        // 返却するため、CMCTransportが正常に動作しません。
        // 必ず getInstance メソッドを使用して Session オブジェクトを
        // 作成してください。
        Session session = Session.getInstance(prop);

        // Message を作成する
        MimeMessage message = new MimeMessage(session);

        try {

            // 宛先(To)アドレスを設定
            message.setRecipient(RecipientType.TO,
                    new InternetAddress("sample@smtps.jp"));

            // 差出人(From)アドレスを設定
            message.setFrom(
                    new InternetAddress("sample@smtps.jp"));

            // 送信日時(Date)を設定
            message.setSentDate(new Date());

            // メールの件名を設定
            message.setSubject("【自動返信】お問い合わせについて", "ISO-2022-JP");

            // メール本文を設定
            message.setText(
                "HENNGE株式会社\r\n" +
                "山田太郎様\r\n" +
                "\r\n" +
                "この度は当社サービスへのお問い合わせ誠にありがとうございます。\r\n" +
                "お問い合わせにつきまして折り返しご連絡いたします。\r\n" +
                "いましばらくお時間頂けますよう宜しくお願いいたします。\r\n",
                "ISO-2022-JP");

            // Content-Transfer-Encoding を 7bit に設定
            message.setHeader("Content-Transfer-Encoding", "7bit");

        } catch (AddressException e) {
            fail(e.getMessage());
        } catch (MessagingException e) {
            fail(e.getMessage());
        }

    // 作成したメッセージを返却
        return message;
    }
}