2017-09-15 56 views
5

Walczę z tym od kilku godzin dzisiaj. Zacząłem od dokumentacji pod numerem http://cloud.spring.io/spring-cloud-aws/spring-cloud-aws.html#_sending_mails, która tak naprawdę nie mówi wiele o konkretnych krokach. Po prostu mówi, że programista może dołączyć kod XML Bean, a następnie dokonać autouire MailSender. Próbowałem tego, tak samo jak wiele wariantów, i nie udało mi się go uruchomić przy użyciu wiosennych chmur-aws. W końcu uciekłem się do bezpośredniego włączania aws-java-sdk-ses i ręcznego konfigurowania klasy.Jakie są wymagane kroki konfiguracyjne, aby aplikacja Spring Boot wysyłała proste wiadomości e-mail za pośrednictwem AWS SES?

Oto prosty projekt wykazując co próbowałem: https://github.com/deinspanjer/aws-ses-test

Ten projekt kompiluje, ale gdy uruchomię go uzyskać:

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' 

Gdy próbuję dodać javax-mail (https://github.com/deinspanjer/aws-ses-test/tree/try-with-javax-mail-api), a następnie zmienia się na błędach:

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' 

jeśli zamiast staram wyraźnie dodając zależność od AWS-java-SDK-SES (https://github.com/deinspanjer/aws-ses-test/tree/try-with-aws-java-sdk-ses), otrzymuję ten błąd zamiast:

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' 

tego błędu, próbowałem dodawanie adnotacji do @Qualifier("simpleMailSender")@Autowired, ale to nie pomogło.

Mam nadzieję, że ktoś będzie mógł mnie skierować we właściwym kierunku.

+0

Wygląda na to, że brakuje importu @ImportResource ("/ aws-mail.xml") do klasy AwsSesTestApplication. – skadya

+0

Po prostu próbowałem dodać tę adnotację do klasy aplikacji, ale nie zmienia to komunikatu o błędzie. – deinspanjer

Odpowiedz

2

Możesz spróbować poniższych kroków, aby rozwiązać problem.Wypróbowałem te zmiany w forked repo od ciebie i to działa dla mnie.

  1. Dodaj zależnościami "com.amazonaws AWS-java-SDK-ses" w pom.xml pliku.
  2. Utwórz klasę autokonfiguracji, aby skonfigurować komponent bean wysyłania wiadomości e-mail. Poniżej znajduje się przykład. Model AWSCredentialsProvider jest skonfigurowany i dostarczany przez firmę spring-cloud-starter-aws natychmiast po zainstalowaniu.

.

3. Użyj interfejsu API wiosennego do wysyłania wiadomości e-mail przy użyciu skonfigurowanego nadawcy poczty.

Mam nadzieję, że to pomaga.

+0

Czy możesz pomóc w definiowaniu komponentu bean mailsender za pomocą 'JavaMailSender' zamiast' MailSender' ?. Próbuję wysyłać wiadomości HTML z SES. Ale 'MailSender' zezwala tylko na wiadomości tekstowe. Jak określić tę konfigurację SES do 'JavaMailSender'? –

0

Użyłem AWS SES w projekcie sieciowym Spring Boot jakiś czas temu, ale nie użyłem Spring Cloud AWS do zintegrowania mojej aplikacji z usługą pocztową.

Zamiast po prostu wliczone spring-boot-starter-mail między zależnościami projektu (pom.xml):

<dependency> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-mail</artifactId> 
</dependency> 

Potem ustawić parametry serwera SMTP w moim application.properties. W moim przypadku użyłem tych właściwości:

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> 

Note: host i port serwera może się różnić.

Spring Boot utworzy domyślną instancję JavaMailSender, konfigurując ją za pomocą wcześniejszych parametrów. Możesz użyć tego obiektu do wysyłania e-maili ...

Prawdopodobnie nie jest to najlepsze podejście do integracji AWS SES z aplikacją Spring Boot, ale działa dobrze dla mnie.

+0

Myślałem o tym samym, ale chciałem uniknąć używania interfejsu smtp dla SES. Dzięki za wejście, bardzo prawdopodobne, że może pomóc komuś innemu. – deinspanjer

+0

@deinspanjer Dlaczego nie chcesz używać SMTP? (tylko dla informacji ...) – davioooh

+0

Ponieważ Amazon zaleca używanie interfejsu API SES, gdy jest to możliwe, głównie ze względu na względy wydajności. Zobacz notatkę na początku tej sekcji dokumentu: http://cloud.spring.io/spring-cloud-static/spring-cloud-aws/1.2.1.RELEASE/#_sending_mails – deinspanjer

0
  1. Dodaj AWS-java-SDK do projektu
  2. Konfiguracja AWS poświadczenia (klucze) na komputerze
  3. Załóż SendEmailRequest
  4. SendEmailRequest # .sendEmail (request)

PS: Nie potrzebujesz tutaj żadnej JavaMail. Możesz zawinąć go do fasoli na wiosnę w dowolny pożądany sposób.

+0

Dziękuję, myślę, że powinienem był być nieco bardziej oczywisty, że szukałem konkretnie pomocy w działaniu wiosennych chmur-aws, jak pokazano w moim przykładowym projekcie. – deinspanjer