JavaMailと電子メール配信の統合

JavaMailを使用して、電子メール配信サービスを介して電子メールを送信します。

JavaMailは、プラットフォーム非依存でプロトコル非依存のフレームワークを提供して、メール・アプリケーションやメッセージング・アプリケーションを作成します。JavaMailを使用する前に、電子メール配信を構成し、SMTP送信情報およびSMTP資格証明をノートにとっておく必要があります。このガイドでは、電子メール配信を介した電子メール送信のための、Eclipse IDEおよびJavaMail APIを使用します。

重要

これらの手順には、便宜上サンプル・コードが含まれており、参照用として使用する必要があります。クライアント・サポートについては、JavaMailカスタマ・サポートに連絡する必要があります。これらのステップは、Oracle Linux Serverリリース7.9のコンピュート・インスタンスとJava 8および11でテストされました。Javaアプリケーション(JavaMailを含む)を最新バージョンに更新して、最新のプロトコル、暗号およびセキュリティ・パッチがOracleでサポートされているセキュリティ・ポリシーおよび暗号に準拠していることを確認する必要があります。

電子メール配信を介した電子メール送信のためのJavaMailの構成

JavaMailで電子メール配信の構成をテストできるようにするには:

  1. 電子メール配信が電子メールを送信するように構成されていることを確認します。開始を参照してください。

    ノート

    電子メール配信を使用するようにJavaMailを構成するには、SMTP資格証明が必要です。SMTP資格証明の生成時には、ユーザー名とパスワードを書き留めてください。

  2. ブラウザを開き、https://github.com/javaee/javamail/releasesに移動します。
  3. 「ダウンロード」で、javax.mail.jarを選択してJavaMailの最新バージョンをダウンロードします。
  4. 次のステップを実行して、Eclipseにプロジェクトを作成します:
    1. Eclipseで、「ファイル」メニューを開きます。「新規」を選択して、「Javaプロジェクト」をクリックします。
    2. 「Javaプロジェクトの作成」ダイアログ・ボックスで、プロジェクト名を入力し、「次へ」をクリックします。
    3. 「Java設定」ダイアログ・ボックスで、「ライブラリ」タブを選択します。
    4. 「外部JARの追加」をクリックします。
    5. 「JAR選択」ダイアログ・ボックスで、JavaMailをダウンロードしたフォルダを参照します。javax.mail.jarファイルを選択し、「開く」をクリックします。
    6. 「Java設定」ダイアログ・ボックスで、「完了」をクリックします。
  5. Eclipseのパッケージ・エクスプローラ・ウィンドウで、プロジェクトを展開します。
  6. プロジェクトでsrcディレクトリを右クリックし、「新規」を選択して「クラス」をクリックします。
  7. 「新規Javaクラス」ダイアログ・ボックスで、「名前」フィールドに「OCIemail」と入力し、「完了」をクリックします。
  8. OCIemail.javaに次のコードを入力して、JavaMailでテスト電子メールを送信します:

    import java.util.Properties;
    import javax.mail.Message;
    import javax.mail.Session;
    import javax.mail.Transport;
    import javax.mail.internet.InternetAddress;
    import javax.mail.internet.MimeMessage;
     
    public class OCIemail {
     
        // Replace FROM with your "From" address.
        // This address must be added to Approved Senders in the console.
        static final String FROM = "<sender email address>";
        static final String FROMNAME = "<sender name>";
     
        // Replace TO with a recipient address.
        static final String TO = "<recipient email address>";
     
        // Replace smtp_username with your Oracle Cloud Infrastructure SMTP username generated in console.
        static final String SMTP_USERNAME = "<username OCID from SMTP credentials>";
     
        // Replace smtp_password with your Oracle Cloud Infrastructure SMTP password generated in console.
        static final String SMTP_PASSWORD = "<SMTP password>";
     
        // Oracle Cloud Infrastructure Email Delivery hostname.
        static final String HOST = "<SMTP endpoint>";
     
        // The port you will connect to on the SMTP endpoint. Port 25 or 587 is allowed.
        static final int PORT = 587;
     
           static final String SUBJECT = "<subject of your email>";
           static final String BODY = String.join(
     
               System.getProperty("line.separator"),
               "<h1>OCI Email Delivery test</h1>",
               "<p>This email was sent with OCI Email Delivery using the ",
               "<a href='Javamail'>https://github.com/javaee/javamail'>Javamail Package</a>",
              " for <a href='Javahttps://www.java.com'>Java</a>."
     
           );
     
        public static void main(String[] args) throws Exception {
     
            // Create a Properties object to contain connection configuration information.
     
           Properties props = System.getProperties();
           props.put("mail.transport.protocol", "smtp");
           props.put("mail.smtp.port", PORT);
     
           //props.put("mail.smtp.ssl.enable", "true"); //the default value is false if not set
           props.put("mail.smtp.auth", "true");
           props.put("mail.smtp.auth.login.disable", "true");  //the default authorization order is "LOGIN PLAIN DIGEST-MD5 NTLM". 'LOGIN' must be disabled since Email Delivery authorizes as 'PLAIN'
           props.put("mail.smtp.starttls.enable", "true");   //TLSv1.2 is required
           props.put("mail.smtp.starttls.required", "true");  //Oracle Cloud Infrastructure required
     
            // Create a Session object to represent a mail session with the specified properties.
           Session session = Session.getDefaultInstance(props);
     
            // Create a message with the specified information.
            MimeMessage msg = new MimeMessage(session);
            msg.setFrom(new InternetAddress(FROM,FROMNAME));
            msg.setRecipient(Message.RecipientType.TO, new InternetAddress(TO));
            msg.setSubject(SUBJECT);
            msg.setContent(BODY,"text/html");
     
            // Create a transport.
            Transport transport = session.getTransport();
               
     
            // Send the message.
     
            try
            {
     
                System.out.println("Sending Email now...standby...");
     
     
                // Connect to OCI Email Delivery using the SMTP credentials specified.
                transport.connect(HOST, SMTP_USERNAME, SMTP_PASSWORD);    
     
                // Send email.
                transport.sendMessage(msg, msg.getAllRecipients());
                System.out.println("Email sent!");
     
            }
     
            catch (Exception ex) {
     
                System.out.println("The email was not sent.");
                System.out.println("Error message: " + ex.getMessage());
     
            }
     
            finally
     
            {
     
                // Close & terminate the connection.
                transport.close();
     
            }
     
        }
     
    }
  9. OCIemail.javaファイルで、次を独自の値に置き換えます:

    ノート

    電子メール・アドレスは大/小文字が区別されます。アドレスが、コンソールの承認済送信者で入力したものと同じであることを確認します。

    • FROM - 送信者の電子メール・アドレスに置き換えます。この電子メール・アドレスは、電子メール配信の承認済送信者リストに最初に追加する必要があります。
    • TO - 受信者の電子メール・アドレスに置き換えます。
    • SMTP資格証明 - smtp_usernameおよびsmtp_passwordを、コンソールで生成されるOracle Cloud Infrastructure SMTPのユーザー名およびパスワードに置き換えます。
    • HOST - 電子メール配信のSMTPエンドポイントに置き換えます。たとえば、smtp.us-ashburn-1.oraclecloud.comです。
  10. 電子メール配信を使用したSMTP接続の構成要件を参照してください。電子メール配信にはTLSv1.2が必要です。Javamailのデフォルト設定の一部を無効にする必要があります。たとえば、JavaMailは特定の順序で認可します。デフォルトの認可順序は「LOGIN PLAIN DIGEST-MD5 NTLM」です。電子メール配信では、「PLAIN」として認可されるため、「LOGIN」を無効にする必要があります。たとえば、OCIemail.javaファイルに次のコードを入力してSMTP接続を構成します:

    props.put("mail.smtp.auth", "true");
    props.put("mail.smtp.auth.login.disable", "true"); 
    props.put("mail.smtp.starttls.enable", "true"); 
    props.put("mail.smtp.starttls.required", "true"); 
  11. 「ファイル」メニューを開き、「保存」をクリックします。
  12. プロジェクトをビルドするには、「プロジェクト」メニューを開き、「プロジェクトのビルド」を選択します。このオプションが無効になっている場合は、自動ビルドが有効になっている可能性があります。
  13. プログラムを起動して電子メールを送信するには、「実行」メニューを開き、「実行」をクリックします。
  14. 出力を確認します。電子メールが正常に送信された場合、コンソールに「電子メールが正常に送信されました。」と表示されますそれ以外の場合は、エラー・メッセージが表示されます。
  15. 受信者の受信ボックスにログインし、電子メールの受信を確認します。