質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.92%

AWSのSESでメールを送信したい

受付中

回答 1

投稿

  • 評価
  • クリップ 1
  • VIEW 2,084

Sfidante

score 98

webアプリを開発しており、
その中で、AWSのSESを用いて
メールを送信できるプログラムを書いております。

現状、メール自体は送れるようにはなっていますが、
最初に送ったメールアドレス以外に送れないようになってしまっています。

アドレスを変更したらその人に送れるようなコードを書きたいと思っています。

そのコードを下記に示します。
package mail;

import java.util.ArrayList;

import com.amazonaws.auth.AWSCredentials;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.regions.Region;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.simpleemail.AmazonSimpleEmailServiceClient;
import com.amazonaws.services.simpleemail.model.Body;
import com.amazonaws.services.simpleemail.model.Content;
import com.amazonaws.services.simpleemail.model.Destination;
import com.amazonaws.services.simpleemail.model.Message;
import com.amazonaws.services.simpleemail.model.SendEmailRequest;
import com.amazonaws.services.simpleemail.model.SendEmailResult;
import com.amazonaws.services.simpleemail.model.VerifyEmailAddressRequest;
 
public class MailSample {
 
    public static final String SOURCE_ADDRESS  = "このアドレスから送信";
 
    public static final String TO_ADDRESS = "このアドレスに送りたいです";
 
 public static void main(String[] args) {
 
        //Security Credentialの設定
        AWSCredentials credentials = new BasicAWSCredentials("アクセスキー","シークレットキー");
 
        //AmazonSimpleEmailService 操作用のオブジェクト作成
        AmazonSimpleEmailServiceClient client = new AmazonSimpleEmailServiceClient(credentials);
 
        //リージョンを設定
        client.setRegion(Region.getRegion(Regions.US_EAST_1));
 
        //メール送信用リクエスト
        SendEmailRequest request = new SendEmailRequest();
 
        //宛先格納用のCollection
        ArrayList<String> toAddresses = new ArrayList<String>();
 
        //宛先メールアドレスを追加
        toAddresses.add(TO_ADDRESS);
 
        //宛先メールアドレスをリクエストに設定
        Destination destination = new Destination();
        destination.setToAddresses(toAddresses);
        request.setDestination(destination);
 
        //送信元メールアドレスをリクエストに設定
        request.setSource(SOURCE_ADDRESS);
 
        //リクエストに認証情報を設定→無くても動いた
        request.setRequestCredentials(credentials);
 
        //返信先メールアドレスを設定
        request.setReturnPath(SOURCE_ADDRESS);
 
        //メールの内容を作成
        Message message = createMessage("件名","本文");
 
        //メールの内容をリクエストに設定
        request.setMessage(message);
 
        //メール送信処理
        SendEmailResult result = client.sendEmail(request);
 
        //送信結果をコンソールに表示
        System.out.println(result);
 
    }
 
    /**
     * メッセージ作成用のメソッド
     *
     * @param subject 件名
     * @param body 本文
     * @return メッセージ用オブジェクト
     */
    public static Message createMessage(String subject,String body) {
 
        //メッセージ本文のオブジェクト
        Message message = new Message();
 
        //件名と本文を設定
        message.setSubject(new Content(subject));
        message.setBody(new Body(new Content(body)));
 
        return message;
    }
 
    /**
     * メールアドレス検証用メソッド
     *
     * @param client SES操作用クライアント
     * @param mailAddress 検証メールアドレス
     */
    public static void verifyEmailAddress(AmazonSimpleEmailServiceClient client,String mailAddress) {
 
        VerifyEmailAddressRequest verify = new VerifyEmailAddressRequest();
        verify.setEmailAddress(SOURCE_ADDRESS);
 
        client.verifyEmailAddress(verify);
    }
} 

同じアドレスに対して違う本文を送ってもその前の文章と同じ文章しか送れない状況です。

SESでの設定に関しては、ポリシードキュメントは下記のようにしています。
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ses:SendEmail",
                "ses:SendRawEmail"
            ],
            "Resource": "*"
        }
    ]
}
Verified Sender: Emailはその他のアドレスも設定しています。
また、上記のコードでVerified Sender: Emailが設定できるようにしているつもりです。

他に記載すべき情報がある場合にはおっしゃってください。

何卒よろしくお願い致します。
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

0

なんとなくですが、AWSではなくJavaの使い方に問題があるような気がします。
アドレス変更、本文変更をしても変わらないとのことですが、記載されたソースではどちらも定数を使っています。
もしソースをそのまま使っているのであれば、コンパイルをしていないなどではないでしょうか。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.92%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る