プログラミングで Amazon SES の SMTP インターフェイスを介して E メールを送信する - Amazon Simple Email Service

プログラミングで Amazon SES の SMTP インターフェイスを介して E メールを送信する

Amazon SES の SMTP インターフェイスで E メールを送信するには、SMTP 対応のプログラミング言語、E メールサーバー、またはアプリケーションを使用できます。開始する前に、Amazon Simple Email Service を設定するのタスクを完了します。また、以下の詳細を取得する必要があります。

  • Amazon SES SMTP エンドポイントに接続するようにできる Amazon SES SMTP のユーザーネームとパスワード。Amazon SES SMTP のユーザー名とパスワードを取得するには、Amazon SES SMTP 認証情報を取得を参照ください。

    重要

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

  • SMTP エンドポイントアドレス。Amazon SES における SMTP エンドポイントのリストについては、Amazon SES SMTP エンドポイントへの接続 を参照ください。

  • Amazon SES SMTP インターフェイ接続端子番号。これは接続方法によって異なります。詳細については、Amazon SES SMTP エンドポイントへの接続を参照ください。

コード例

SMTP 対応のプログラミング言語を使用して、Amazon SES の SMTP インターフェイスにアクセスできます。SMTP 認証情報と Amazon SES SMTP ホスト名およびポート番号を使用して、プログラミング言語の 一般的なSMTP 機能によって E メールを送信します。

Amazon Elastic Compute Cloud (Amazon EC2) では、デフォルトでポート 25 経由での E メールトラフィックを制限しています。Amazon EC2 から SMTP エンドポイントを介して E メールを送信する際のタイムアウトを回避するには、これらの制限を解除するようリクエストすることができます。詳細については、AWSナレッジセンターの「Amazon EC2 インスタンスまたはAWS Lambda関数からポート 25 の制限を解除する方法」を参照してください。

C#、Java、PHPのこのセクションのコード例で、この問題を回避するためにポート 587 を使用します。

注記

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

プログラミング言語を選択して、その言語の例を表示します。

C#

次の手順は、Microsoft Visual Studioを使用して、Amazon SES から E メールを送信する C# コンソールアプリケーションを作成する方法を示しています。このセクションの手順は Visual Studio 2017 に適用されますが、C# コンソールアプリケーションを作成するプロセスはすべての Microsoft Visual Studio エディションで似ています。

以下の手順を実行する前に、Amazon Simple Email Service を設定するに記載されている作業を完了します。

C# で Amazon SES の SMTP インターフェイスから E メールを送信するには

  1. 次のステップを実行し、Visual Studio でコンソールプロジェクトを作成します。

    1. Microsoft Visual Studio を開きます。

    2. ファイル メニューで NewProjectを選択します。

    3. New Projectウィンドウの左ペインで、InstalledTemplatesVisual C# の順に展開します。

    4. Visual C#で、Windows Classic Desktop を選択します。

    5. 次のイメージに示すように、ウィンドウ上部のメニューで .NET Framework 4.5を選択します。

      
                                            New Projectウィンドウの .NET Framework 選択メニュー。
      注記

      必要に応じて、より新しいバージョンの .NET Framework を選択できます。

    6. Console App (.NET Framework)を選択します。

    7. Name (名前)フィールドに、AmazonSESSampleと入力します。

    8. [OK] を選択します。

  2. Visual Studio プロジェクトで、Program.csのすべてのコンテンツを次のコードに置き換えます。

    using System; using System.Net; using System.Net.Mail; namespace AmazonSESSample { class Program { static void Main(string[] args) { // Replace sender@example.com with your "From" address. // This address must be verified with Amazon SES. String FROM = "sender@example.com"; 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. String TO = "recipient@amazon.com"; // Replace smtp_username with your Amazon SES SMTP user name. String SMTP_USERNAME = "smtp_username"; // Replace smtp_password with your Amazon SES SMTP password. String SMTP_PASSWORD = "smtp_password"; // (Optional) the name of a configuration set to use for this message. // If you comment out this line, you also need to remove or comment out // the "X-SES-CONFIGURATION-SET" header below. String CONFIGSET = "ConfigSet"; // If you're using Amazon SES in a region other than US West (Oregon), // replace email-smtp.us-west-2.amazonaws.com with the Amazon SES SMTP // endpoint in the appropriate AWS Region. String HOST = "email-smtp.us-west-2.amazonaws.com"; // The port you will connect to on the Amazon SES SMTP endpoint. We // are choosing port 587 because we will use STARTTLS to encrypt // the connection. int PORT = 587; // The subject line of the email String SUBJECT = "Amazon SES test (SMTP interface accessed using C#)"; // The body of the email String BODY = "<h1>Amazon SES Test</h1>" + "<p>This email was sent through the " + "<a href='https://aws.amazon.com/ses'>Amazon SES</a> SMTP interface " + "using the .NET System.Net.Mail library.</p>"; // Create and build a new MailMessage object MailMessage message = new MailMessage(); message.IsBodyHtml = true; message.From = new MailAddress(FROM, FROMNAME); message.To.Add(new MailAddress(TO)); message.Subject = SUBJECT; message.Body = BODY; // Comment or delete the next line if you are not using a configuration set message.Headers.Add("X-SES-CONFIGURATION-SET", CONFIGSET); using (var client = new System.Net.Mail.SmtpClient(HOST, PORT)) { // Pass SMTP credentials client.Credentials = new NetworkCredential(SMTP_USERNAME, SMTP_PASSWORD); // Enable SSL encryption client.EnableSsl = true; // Try to send the message. Show status in console. try { Console.WriteLine("Attempting to send email..."); client.Send(message); Console.WriteLine("Email sent!"); } catch (Exception ex) { Console.WriteLine("The email was not sent."); Console.WriteLine("Error message: " + ex.Message); } } } } }
  3. Program.csで、以下の E メールアドレスを独自の値に置き換えます。

    重要

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

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

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

  4. Program.csで、以下の SMTP 認証情報をAmazon SES SMTP 認証情報を取得で取得した値に置き換えます。

    重要

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

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

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

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

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

  7. Program.cs を保存します。

  8. プロジェクトを構築するためには、BuildBuild Solutionの順に選択します。

  9. プログラムを実行するためには、DebugStart Debuggingの順に選択します。

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

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

Java

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

以下の手順を実行する前に、Amazon Simple Email Service を設定するに記載されている作業を完了します。

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

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

    重要

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

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

    1. Eclipse を起動します。

    2. Eclipse で、Fileを選択し、NewJava 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ディレクトリを右クリックし、NewClassの順に選択します。

  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. プロジェクトを構築するため、ProjectBuild Project の順に選択します。(このオプションが無効の場合、自動構築が有効になっている可能性があります。)

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

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

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

PHP

この例では PHPMailer クラスを使用し、SMTP インターフェイスで Amazon SES を介して E メールを送信します。

以下の手順を実行する前に、Amazon Simple Email Service を設定するのタスクを完了する必要があります。Amazon SES のセットアップに加えて、PHP で E メールを送信するには、次の前提条件を満たしている必要があります。

前提条件:

  • PHP をインストールする — PHP は、http://php.net/downloads.phpで利用可能です。PHP をインストールした後、コマンドプロンプトから PHP を実行できるように環境変数に PHP のパスを追加します。

  • Composer dependency manager をインストールする - Composer dependency manager をインストールすると、PHPMailer クラスとそのdependenciesをダウンロードしてインストールできます。Composer をインストールするには、https://getcomposer.org/download のインストール手順を参照してください。

  • PHPMailer クラスをインストール - Composer をインストールしたら、以下のコマンドを実行して PHPMailer をインストールします。

    path/to/composer require phpmailer/phpmailer

    前のコマンドで、path/to/を、Composer をインストールしたパスに置き換えます。

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

  1. amazon-ses-smtp-sample.phpという名前のファイルを作成します。テキストエディターでファイルを開き、次のコードを貼り付けます。

    <?php // Import PHPMailer classes into the global namespace // These must be at the top of your script, not inside a function use PHPMailer\PHPMailer\PHPMailer; use PHPMailer\PHPMailer\Exception; // If necessary, modify the path in the require statement below to refer to the // location of your Composer autoload.php file. require 'vendor/autoload.php'; // Replace sender@example.com with your "From" address. // This address must be verified with Amazon SES. $sender = 'sender@example.com'; $senderName = 'Sender Name'; // Replace recipient@example.com with a "To" address. If your account // is still in the sandbox, this address must be verified. $recipient = 'recipient@example.com'; // Replace smtp_username with your Amazon SES SMTP user name. $usernameSmtp = 'smtp_username'; // Replace smtp_password with your Amazon SES SMTP password. $passwordSmtp = 'smtp_password'; // Specify a configuration set. If you do not want to use a configuration // set, comment or remove the next line. $configurationSet = 'ConfigSet'; // If you're using Amazon SES in a region other than US West (Oregon), // replace email-smtp.us-west-2.amazonaws.com with the Amazon SES SMTP // endpoint in the appropriate region. $host = 'email-smtp.us-west-2.amazonaws.com'; $port = 587; // The subject line of the email $subject = 'Amazon SES test (SMTP interface accessed using PHP)'; // The plain-text body of the email $bodyText = "Email Test\r\nThis email was sent through the Amazon SES SMTP interface using the PHPMailer class."; // The HTML-formatted body of the email $bodyHtml = '<h1>Email Test</h1> <p>This email was sent through the <a href="https://aws.amazon.com/ses">Amazon SES</a> SMTP interface using the <a href="https://github.com/PHPMailer/PHPMailer"> PHPMailer</a> class.</p>'; $mail = new PHPMailer(true); try { // Specify the SMTP settings. $mail->isSMTP(); $mail->setFrom($sender, $senderName); $mail->Username = $usernameSmtp; $mail->Password = $passwordSmtp; $mail->Host = $host; $mail->Port = $port; $mail->SMTPAuth = true; $mail->SMTPSecure = 'tls'; $mail->addCustomHeader('X-SES-CONFIGURATION-SET', $configurationSet); // Specify the message recipients. $mail->addAddress($recipient); // You can also add CC, BCC, and additional To recipients here. // Specify the content of the message. $mail->isHTML(true); $mail->Subject = $subject; $mail->Body = $bodyHtml; $mail->AltBody = $bodyText; $mail->Send(); echo "Email sent!" , PHP_EOL; } catch (phpmailerException $e) { echo "An error occurred. {$e->errorMessage()}", PHP_EOL; //Catch errors from PHPMailer. } catch (Exception $e) { echo "Email not sent. {$mail->ErrorInfo}", PHP_EOL; //Catch errors from Amazon SES. } ?>
  2. amazon-ses-smtp-sample.phpで、以下を独自の値に置き換えます。

    • sender@example.com— Amazon SES で検証した E メールアドレスに置き換えます。詳細については、「検証済みID」を参照してください。Amazon SES では、E メールアドレスの大文字と小文字が区別されます。検証したアドレスと完全に一致するアドレスを入力してください。

    • recipient@example.com— 受信者のアドレスに置き換えます。アカウントがサンドボックスにまだある場合は、このアドレスを使用前に確認する必要があります。詳細については、「Amazon SES サンドボックス外への移動」を参照してください。検証したアドレスと完全に一致するアドレスを入力してください。

    • smtp_username - SMTP ユーザー名の認証情報に置き換えます。これは、Amazon SES コンソールの SMTP の設定ページで取得できます。これはAWSアクセスキー ID とは異なります。SMTP ユーザー名の認証情報は 20 文字の文字と数字の並びであり、意味のある名前ではありません。

    • smtp_password - SMTP パスワードに置き換えます。このパスワードは、Amazon SES コンソールの SMTP の設定ページで取得できます。これは AWSシークレットアクセスキーとは異なります。

    • (オプション) ConfigSet— この E メールを送信する際に設定セットを使用する場合、この値を設定セットの名前で置き換えます。設定セットの詳細については、Amazon SESの設定セットの使用を参照ください。

    • (オプション)email-smtp.us-west-2.amazonaws.com — 米国西部(オレゴン)以外の地域で Amazon SES SMTP エンドポイントを使用する場合は、この値を使用する地域のAmazon SES SMTP エンドポイントで置き換えます。Amazon SES が使用可能なAWS リージョンの SMTP エンドポイント URL のリストについては、AWS全般のリファレンスの「Amazon Simple Email Service (Amazon SES)」を参照してください。

  3. amazon-ses-smtp-sample.php を保存します。

  4. プログラムを実行するには、amazon-ses-smtp-sample.php と同じディレクトリでコマンドプロンプトを開き、php amazon-ses-smtp-sample.php と入力します。

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

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