Java で SMTP を使用して E メールを送信する - Amazon Simple Email Service Classic

Amazon SES Classic のユーザーガイドです。更新プログラムや新機能は、推奨している新しい Amazon SES デベロッパーガイドに記述されています。

Java で SMTP を使用して E メールを送信する

この例では、Eclipse IDEJavaMail API を使用して、SMTP インターフェイスで Amazon SES から E メールを送信します。

以下の手順を実行する前に、「Amazon SES を開始する前に」と「SMTP を使用して Amazon SES から E メールを送信する」に記載されているセットアップ作業を完了します。

重要

この入門用チュートリアルでは、受信されたかどうかを確認できるように自分宛に E メールを送信します。さらに詳しい実験や負荷テストには、Amazon SES メールボックスシミュレーターを使用してください。メールボックスシミュレーターに送信される E メールは、送信クォータに加算されず、バウンス率や苦情率の計算にも含まれません。詳細については、「Amazon SES での E メール送信のテスト」を参照してください。

Java で Amazon SES SMTP インターフェイスを使用して E メールを送信するには

  1. ウェブブラウザで、JavaMail Github ページに移動します。[Downloads] で、[javax.mail.jar] を選択して最新バージョンの JavaMail をダウンロードします。

    重要

    このチュートリアルには、JavaMail バージョン 1.5 以降が必要です。これらの手順は、JavaMail バージョン 1.6.1 を使用してテスト済みです。

  2. 次のステップを実行し、Eclipse でプロジェクトを作成します。

    1. Eclipse を起動します。

    2. Eclipse で、[File] を選択し、[New]、[Java Project] の順に選択します。

    3. [Create a Java Project] ダイアログボックスで、プロジェクト名を入力し、[Next] を選択します。

    4. [Java Settings] ダイアログボックスの [Libraries] タブを選択します。

    5. [Add External JARs] を選択します。

    6. JavaMail をダウンロードした先のフォルダを参照します。javax.mail.jar ファイルを選択し、[Open] を選択します。

    7. [Java Settings] ダイアログボックスの [Finish] を選択します。

  3. Eclipse で、[Package Explorer] ウィンドウのプロジェクトを展開します。

  4. プロジェクトの下の [src] ディレクトリを右クリックし、[New]、[Class] の順に選択します。

  5. [New Java Class] ダイアログボックスの [Name] フィールドに AmazonSESSample と入力し、[Finish] を選択します。

  6. AmazonSESSample.java の内容全体を次のコードに置き換えます。

    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 AmazonSESSample { // Replace sender@example.com with your "From" address. // This address must be verified. static final String FROM = "sender@example.com"; static final String FROMNAME = "Sender Name"; // Replace recipient@example.com with a "To" address. If your account // is still in the sandbox, this address must be verified. static final String TO = "recipient@example.com"; // Replace smtp_username with your Amazon SES SMTP user name. static final String SMTP_USERNAME = "smtp_username"; // Replace smtp_password with your Amazon SES SMTP password. static final String SMTP_PASSWORD = "smtp_password"; // The name of the Configuration Set to use for this message. // If you comment out or remove this variable, you will also need to // comment out or remove the header below. static final String CONFIGSET = "ConfigSet"; // Amazon SES SMTP host name. This example uses the US West (Oregon) region. // See https://docs.aws.amazon.com/ses/latest/DeveloperGuide/regions.html#region-endpoints // for more information. static final String HOST = "email-smtp.us-west-2.amazonaws.com"; // The port you will connect to on the Amazon SES SMTP endpoint. static final int PORT = 587; static final String SUBJECT = "Amazon SES test (SMTP interface accessed using Java)"; static final String BODY = String.join( System.getProperty("line.separator"), "<h1>Amazon SES SMTP Email Test</h1>", "<p>This email was sent with Amazon SES using the ", "<a href='https://github.com/javaee/javamail'>Javamail Package</a>", " for <a href='https://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.starttls.enable", "true"); props.put("mail.smtp.auth", "true"); // 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"); // Add a configuration set header. Comment or delete the // next line if you are not using a configuration set msg.setHeader("X-SES-CONFIGURATION-SET", CONFIGSET); // Create a transport. Transport transport = session.getTransport(); // Send the message. try { System.out.println("Sending..."); // Connect to Amazon SES using the SMTP username and password you specified above. transport.connect(HOST, SMTP_USERNAME, SMTP_PASSWORD); // Send the 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 and terminate the connection. transport.close(); } } }
  7. AmazonSESSample.java で、以下の E メールアドレスを独自の値に置き換えます。

    重要

    E メールアドレスでは、大文字と小文字は区別されます。確認したアドレスと完全に一致することを確認してください。

    • SENDER@EXAMPLE.COM - 「From」E メールアドレスに置き換えます。このアドレスを確認してから、プログラムを実行してください。詳細については、「Amazon SES の ID の検証」を参照してください。

    • RECIPIENT@EXAMPLE.COM - 「To」E メールアドレスに置き換えます。アカウントがサンドボックスにまだある場合は、このアドレスを使用前に確認する必要があります。詳細については、「Amazon SES サンドボックス外への移動」を参照してください。

  8. AmazonSESSample.java で、以下の SMTP 認証情報を「Amazon SES SMTP 認証情報を取得」で取得した値に置き換えます。

    重要

    SMTP 認証情報は、AWS の認証情報とは異なります。認証情報の詳細については、「Amazon SES 認証情報の種類」を参照してください。

    • YOUR_SMTP_USERNAME - SMTP ユーザー名の認証情報に置き換えます。SMTP ユーザー名の認証情報は 20 文字の文字と数字の並びであり、意味のある名前ではありません。

    • YOUR_SMTP_PASSWORD - 自分の SMTP パスワードに置き換えます。

  9. (オプション) 米国西部 (オレゴン) 以外の AWS リージョンで Amazon SES SMTP エンドポイントを使用する場合は、変数 HOST の値を実際に使用するエンドポイントに変更します。Amazon SES を使用できるリージョンのリストについては、AWS 全般のリファレンスの「Amazon Simple Email Service (Amazon SES)」を参照してください。

  10. (オプション) この E メール送信時に設定セットを使用する場合は、変数 CONFIGSET の値を設定セットの名前に変更します。設定セットの詳細については、「Amazon SES 設定セットの使用」を参照してください。

  11. AmazonSESSample.java を保存します。

  12. プロジェクトを構築します。[Project]、[Build Project] の順に選択します。(このオプションが無効の場合、自動構築が有効になっている可能性があります。)

  13. プログラムを開始して E メールを送信します。[Run] を選択した後、もう一度 [Run] を選択します。

  14. 出力を確認します。E メールが正常に送信されると、コンソールに "Email sent!" が表示されます。送信に失敗すると、エラーメッセージが表示されます。

  15. 受信者のアドレスの E メールクライアントにサインインします。送信した E メールメッセージを確認します。