m_shige1979のときどきITブログ

プログラムの勉強をしながら学習したことや経験したことをぼそぼそと書いていきます

Github(変なおっさんの顔でるので気をつけてね)

https://github.com/mshige1979

AWSのSESで送信者名を指定する

メール送信で日本語を使用したい

文字化け起こりましたのでネットを使用して調べました

以下の対応でなんとかなりました。m(_ _)m

実装

import java.io.UnsupportedEncodingException;

import javax.mail.internet.InternetAddress;

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;

public class Sample01 {
	
	private static final String ACCESS_KEY = "アクセスキー";
	private static final String SECRET_ACCESS_KEY = "シークレットアクセスキー";
	
	public static void main(String[] args) {
		
		String TO = "送信先のメールアドレス";
		String FROM = "送信元のメールアドレス";
		String SUBJECT = "テストメール";
		String BODY = "テストメールです。";
		
		// 宛先
		Destination destination = new Destination().withToAddresses(new String[]{TO});
	    // 件名
	    Content subject = new Content().withData(SUBJECT);
		// 本文
	    Body body = new Body().withText(new Content().withData(BODY));
	    
	    // メッセージ
	    Message message = new Message()
	        .withSubject(subject)
	        .withBody(body);
	    
	    // リクエストを作成
	    SendEmailRequest request = new SendEmailRequest()
	        .withSource(senderAddressBuilder(FROM,"送信者です"))
	        .withDestination(destination)
	        .withMessage(message);

	    // 認証
	    AmazonSimpleEmailServiceClient client = new AmazonSimpleEmailServiceClient(
	    		new  BasicAWSCredentials(ACCESS_KEY, SECRET_ACCESS_KEY));
	    
	    // リージョンを設定
	    client.setRegion(Region.getRegion(Regions.US_WEST_2));
	    
	    // メール送信
	    client.sendEmail(request);
		
	}
	
	private static String senderAddressBuilder(String fromAddress, String senderName) {
	    try {
	        InternetAddress address = new InternetAddress(fromAddress,
	                senderName, "ISO-2022-JP");
	        return address.toString();
	    } catch (UnsupportedEncodingException e) {
	    	System.out.println("Internet Address Constructor throws UnsupportedEncoding");
	    }
	    return fromAddress;
	}

}

文字コードは任意で設定すればいいかも
別に必須ではないかもしれません。
address.toString()である程度はいい感じに対応してくれそうです。