JavaMailと電子メール配信の統合
JavaMailを使用して、電子メール配信サービスを介して電子メールを送信します。
JavaMailは、プラットフォーム非依存でプロトコル非依存のフレームワークを提供して、メール・アプリケーションやメッセージング・アプリケーションを作成します。JavaMailを使用する前に、電子メール配信を構成し、SMTP送信情報およびSMTP資格証明をノートにとっておく必要があります。このガイドでは、電子メール配信を介した電子メール送信のための、Eclipse IDEおよびJavaMail APIを使用します。
これらの手順には、便宜上サンプル・コードが含まれており、参照用として使用する必要があります。クライアント・サポートについては、JavaMailカスタマ・サポートに連絡する必要があります。これらのステップは、Oracle Linux Serverリリース7.9のコンピュート・インスタンスとJava 8および11でテストされました。Javaアプリケーション(JavaMailを含む)を最新バージョンに更新して、最新のプロトコル、暗号およびセキュリティ・パッチがOracleでサポートされているセキュリティ・ポリシーおよび暗号に準拠していることを確認する必要があります。
電子メール配信を介した電子メール送信のためのJavaMailの構成
JavaMailで電子メール配信の構成をテストできるようにするには:
-
電子メール配信が電子メールを送信するように構成されていることを確認します。開始を参照してください。
ノート
電子メール配信を使用するようにJavaMailを構成するには、SMTP資格証明が必要です。SMTP資格証明の生成時には、ユーザー名とパスワードを書き留めてください。
- ブラウザを開き、https://github.com/javaee/javamail/releasesに移動します。
- 「ダウンロード」で、javax.mail.jarを選択してJavaMailの最新バージョンをダウンロードします。
- 次のステップを実行して、Eclipseにプロジェクトを作成します:
- Eclipseで、「ファイル」メニューを開きます。「新規」を選択して、「Javaプロジェクト」をクリックします。
- 「Javaプロジェクトの作成」ダイアログ・ボックスで、プロジェクト名を入力し、「次へ」をクリックします。
- 「Java設定」ダイアログ・ボックスで、「ライブラリ」タブを選択します。
- 「外部JARの追加」をクリックします。
- 「JAR選択」ダイアログ・ボックスで、JavaMailをダウンロードしたフォルダを参照します。javax.mail.jarファイルを選択し、「開く」をクリックします。
- 「Java設定」ダイアログ・ボックスで、「完了」をクリックします。
- Eclipseのパッケージ・エクスプローラ・ウィンドウで、プロジェクトを展開します。
- プロジェクトでsrcディレクトリを右クリックし、「新規」を選択して「クラス」をクリックします。
- 「新規Javaクラス」ダイアログ・ボックスで、「名前」フィールドに「OCIemail」と入力し、「完了」をクリックします。
-
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(); } } }
-
OCIemail.javaファイルで、次を独自の値に置き換えます:
ノート
電子メール・アドレスは大/小文字が区別されます。アドレスが、コンソールの承認済送信者で入力したものと同じであることを確認します。
- FROM - 送信者の電子メール・アドレスに置き換えます。この電子メール・アドレスは、電子メール配信の承認済送信者リストに最初に追加する必要があります。
- TO - 受信者の電子メール・アドレスに置き換えます。
- SMTP資格証明 - smtp_usernameおよびsmtp_passwordを、コンソールで生成されるOracle Cloud Infrastructure SMTPのユーザー名およびパスワードに置き換えます。
- HOST - 電子メール配信のSMTPエンドポイントに置き換えます。たとえば、smtp.us-ashburn-1.oraclecloud.comです。
-
電子メール配信を使用した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");
- 「ファイル」メニューを開き、「保存」をクリックします。
- プロジェクトをビルドするには、「プロジェクト」メニューを開き、「プロジェクトのビルド」を選択します。このオプションが無効になっている場合は、自動ビルドが有効になっている可能性があります。
- プログラムを起動して電子メールを送信するには、「実行」メニューを開き、「実行」をクリックします。
- 出力を確認します。電子メールが正常に送信された場合、コンソールに「電子メールが正常に送信されました。」と表示されますそれ以外の場合は、エラー・メッセージが表示されます。
- 受信者の受信ボックスにログインし、電子メールの受信を確認します。
詳細情報
- 詳細は、JavaMailのドキュメントを参照してください。
- エラーの原因となる可能性がある既知の問題があります。JavaMailの問題は、1つの電子メールで多くの受信者が設定され、1つ以上の電子メール・アドレスが抑制されている場合に発生しますを参照してください。