私は今日数時間これと戦っています。 http://cloud.spring.io/spring-cloud-aws/spring-cloud-aws.html#_sending_mails のドキュメントから始めましたが、特定の手順についてはあまり説明されていません。 。開発者がBeanXMLを含めてから、MailSender
を自動配線できると言っているだけです。私はそれと多くのバリアントを試しましたが、spring-cloud-awsを使用して動作させることができませんでした。最終的に、aws-Java-sdk-sesを直接含めて、クラスを手動で構成することにしました。
これが私が試したことを示す簡単なプロジェクトです: https://github.com/deinspanjer/aws-ses-test
このプロジェクトはコンパイルされますが、実行すると次のようになります。
_Parameter 0 of constructor in com.example.awssestest.AwsSesTestApplication required a bean of type 'org.springframework.mail.MailSender' that could not be found.
- Bean method 'mailSender' not loaded because @ConditionalOnClass did not find required class 'javax.mail.internet.MimeMessage'
- Bean method 'simpleMailSender' not loaded because @ConditionalOnClass did not find required class 'com.amazonaws.services.simpleemail.AmazonSimpleEmailService'
- Bean method 'javaMailSender' not loaded because @ConditionalOnClass did not find required class 'com.amazonaws.services.simpleemail.AmazonSimpleEmailService'
_
Javax-mail( https://github.com/deinspanjer/aws-ses-test/tree/try-with-javax-mail-api )を追加しようとすると、エラーは次のように変わります。
_Parameter 0 of constructor in com.example.awssestest.AwsSesTestApplication required a bean of type 'org.springframework.mail.MailSender' that could not be found.
- Bean method 'mailSender' not loaded because AnyNestedCondition 0 matched 2 did not; NestedCondition on MailSenderAutoConfiguration.MailSenderCondition.JndiNameProperty @ConditionalOnProperty (spring.mail.jndi-name) did not find property 'jndi-name'; NestedCondition on MailSenderAutoConfiguration.MailSenderCondition.HostProperty @ConditionalOnProperty (spring.mail.Host) did not find property 'Host'
- Bean method 'simpleMailSender' not loaded because @ConditionalOnClass did not find required class 'com.amazonaws.services.simpleemail.AmazonSimpleEmailService'
- Bean method 'javaMailSender' not loaded because @ConditionalOnClass did not find required class 'com.amazonaws.services.simpleemail.AmazonSimpleEmailService'
_
代わりに、aws-Java-sdk-ses( https://github.com/deinspanjer/aws-ses-test/tree/try-with-aws-Java-sdk-)への依存関係を明示的に追加してみますses )、代わりにこのエラーが発生します:
_Parameter 0 of constructor in com.example.awssestest.AwsSesTestApplication required a bean of type 'org.springframework.mail.MailSender' that could not be found.
- Bean method 'mailSender' not loaded because @ConditionalOnClass did not find required class 'javax.mail.internet.MimeMessage'
- Bean method 'javaMailSender' in 'MailSenderAutoConfiguration' not loaded because @ConditionalOnClass did not find required class 'javax.mail.Session'
- Bean method 'simpleMailSender' in 'MailSenderAutoConfiguration' not loaded because @ConditionalOnMissingClass found unwanted class 'org.springframework.cloud.aws.mail.simplemail.SimpleEmailServiceJavaMailSender'
_
このエラーのために、@Qualifier("simpleMailSender")
アノテーションを_@Autowired
_に追加しようとしましたが、役に立ちませんでした。
誰かが私を正しい方向に導くことができるかもしれないことを願っています。
以下の手順を試して、問題を解決してください。 forked repo でこれらの変更を試してみましたが、うまくいきました。
pom.xml
ファイルに依存関係「com.amazonaws:aws-Java-sdk-ses」を追加します。AWSCredentialsProvider
は、すぐに使用できるspring-cloud-starter-aws
によって構成および提供されます。。
@Configuration
public class SimpleMailAutoConfig {
@Bean
public AmazonSimpleEmailService amazonSimpleEmailService(AWSCredentialsProvider credentialsProvider) {
return AmazonSimpleEmailServiceClientBuilder.standard()
.withCredentials(credentialsProvider)
// Replace US_WEST_2 with the AWS Region you're using for
// Amazon SES.
.withRegion(Regions.US_WEST_2).build();
}
@Bean
public MailSender mailSender(AmazonSimpleEmailService ses) {
return new SimpleEmailServiceMailSender(ses);
}
}
3. Spring APIを使用して、構成されたメール送信者を使用してメールを送信します。
それが役に立てば幸い。
編集:
JavaMailSender
の代わりにMailSender
を使用する必要がある場合(たとえば、添付ファイルを送信する場合)、SimpleEmailServiceJavaMailSender
の代わりにSimpleEmailServiceMailSender
を構成するだけです。
このような:
@Bean
public JavaMailSender mailSender(AmazonSimpleEmailService ses) {
return new SimpleEmailServiceJavaMailSender(ses);
}
しばらく前にSpringBootWebプロジェクトでAWSSESを使用しましたが、アプリケーションをメールサービスと統合するためにSpring CloudAWSを使用したことはありません。
代わりに、プロジェクトの依存関係(pom.xml)にspring-boot-starter-mail
を含めただけです。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
次に、application.properties
にSMTPサーバーパラメータを設定します。私の場合、次のプロパティを使用しました。
spring.mail.Host=email-smtp.eu-west-1.amazonaws.com
spring.mail.port=465
spring.mail.protocol=smtps
spring.mail.smtps.auth=true
spring.mail.smtp.ssl.enable=true
spring.mail.username=<my-user>
spring.mail.password=<my-password>
注:サーバーのホストとポートは異なる場合があります。
Spring Bootは、デフォルトのJavaMailSender
インスタンスを作成し、以前のパラメーターで構成します。このオブジェクトを使用してメールを送信できます...
おそらくこれは、AWSSESをSpringBootアプリケーションと統合するための最良のアプローチではありませんが、私にとっては問題なく機能します。
application.propertiesからも実行できます。 AWSSESのサンドボックスにいないことを確認してください。
3.次に、application.propertiesにキーを配置します。以下に示すように
`spring.mail.Host=email-smtp.us-east-1.amazonaws.com(Your Hosting region)
spring.mail.username=<Access Key Id>
spring.mail.password=<Secret access key>`
MimeMessageを使用している場合は、送信メールIDを次のように設定します。
MimeMessageHelper helper = new MimeMessageHelper(message);
helper.setFrom("[email protected]");
それが役に立てば幸い。
p.s.ここではJavaMailは必要ありません。 Springで任意の方法でBeanにラップできます。