2010-01-06 3 views
29

Я пытаюсь найти правильные свойства для подключения к SMTP-серверу Gmail с использованием класса JavaMailSenderImpl.Как настроить Spring JavaMailSenderImpl для Gmail

Позвольте мне сначала сказать, что я пробовал подход, найденный here. Это отлично работает. Но когда я попробовал конфигурацию ниже этого сообщения с той же самой информацией аутентификации, я получил javax.mail.AuthenticationFailedException.

Моя конфигурация в настоящее время выглядит так.

<bean id="mailSender" class ="org.springframework.mail.javamail.JavaMailSenderImpl" > 
    <property name="username" value="[email protected]" /> 
    <property name="password" value="XXX" /> 
    <property name="javaMailProperties"> 
    <props> 
     <prop key="mail.smtp.host">smtp.gmail.com</prop> 
     <prop key="mail.smtp.port">587</prop> 
     <prop key="mail.smtp.auth">true</prop> 
     <prop key="mail.smtp.starttls.enable">true</prop> 
    </props> 
    </property> 
</bean> 

Почему я до сих пор получаю эту javax.mail.AuthenticationFailedException, если я знаю, что мои полномочия являются правильными.

Update

Вот мой обновленный код, основанный на ответах ниже. Я все еще получаю такое же исключение.

<bean id="mailSender" class ="org.springframework.mail.javamail.JavaMailSenderImpl" > 
    <property name="username" value="[email protected]" /> 
    <property name="password" value="XXX" /> 
    <property name="javaMailProperties"> 
    <props> 
     <prop key="mail.smtp.from">[email protected]</prop> 
     <prop key="mail.smtp.user">[email protected]</prop> 
     <prop key="mail.smtp.password">XXX</prop> 
     <prop key="mail.smtp.host">smtp.gmail.com</prop> 
     <prop key="mail.smtp.port">587</prop> 
     <prop key="mail.smtp.auth">true</prop> 
     <prop key="mail.smtp.starttls.enable">true</prop> 
    </props> 
    </property> 
</bean> 
+2

Существует рабочий пример: http://www.mkyong.com/spring/spring-sending-e-mail-via-gmail-smtp-server-with-mailsender/ –

+0

Я разрешил ваш вопрос. http: // stackoverflow.com/questions/17786132/how-to-implementation-an-async-email-service-in-spring –

ответ

0

Это не кажется значительно отличается, но, возможно, попробовать:

<bean id="mailSender" class ="org.springframework.mail.javamail.JavaMailSenderImpl" > 
    <property name="username" value="[email protected]" /> 
    <property name="password" value="XXX" /> 
    <property name="javaMailProperties"> 
    <props> 
     <prop key="mail.smtp.user" value="[email protected]" /> 
     <prop key="mail.smtp.password" value="XXX" /> 
     <prop key="mail.smtp.host">smtp.gmail.com</prop> 
     <prop key="mail.smtp.port">587</prop> 
     <prop key="mail.smtp.auth">true</prop> 
     <prop key="mail.smtp.starttls.enable">true</prop> 
    </props> 
    </property> 
</bean> 
+0

Я пробовал это раньше, не повезло. Я также попробовал свойство mail.smtp.passwd, а также только для ударов. – Andrew

0

Вы должны указать свой «от» адрес, либо как <prop key="mail.smtp.from">[email protected]</prop>, или при создании сообщения.

+0

Я настраивал его при создании сообщения, но я также добавил свойство в своем обновленном сообщении. – Andrew

27

Это работает для меня:

 <property name="host"><value>smtp.gmail.com</value></property> 
     <property name="port"><value>587</value></property> 
     <property name="protocol"><value>smtp</value></property> 
     <property name="username"><value>${mail.username}</value></property> 
     <property name="password"><value>${mail.password}</value></property> 
     <property name="javaMailProperties"> 
      <props> 
       <prop key="mail.smtp.auth">true</prop> 
       <prop key="mail.smtp.starttls.enable">true</prop> 
       <prop key="mail.smtp.quitwait">false</prop> 
      </props> 
     </property> 

Реальный трюк для меня оказалось, что значение «протокол» должен быть «Smtp» (не «SMTPS»).

+0

tnx man, это полезно –

+0

@ Ken работал для меня, спасибо. – MikeNereson

+0

, так как я на третьем месте, тройная благодарность! –

4

Единственное свойство, необходимое для GMail является

<prop key="mail.smtp.starttls.enable">true</prop> 
0

Это работало для меня:

поддержки
<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl"> 
    <property name="host" value="smtp.gmail.com" /> 
    <property name="port" value="465" /> 
    <property name="protocol" value="smtps" /> 
    <property name="username" value="[email protected]" /> 
    <property name="password" value="my_password" /> 
    <property name="javaMailProperties"> 
    <props> 
     <prop key="mail.smtps.auth">true</prop> 
    </props> 
    </property> 
</bean> 

См Google для получения дополнительной информации: http://support.google.com/mail/bin/answer.py?hl=en&answer=78799

+0

mail.smtps.auth неверен. см. комментарий Кенса. – vvursT

+0

@vvursT Как я сказал в сообщении: это сработало ** для меня **. Я утверждаю. Решение Кена (т. Е. Использование 'smtp' вместо' smtps') не было. –

4

Когда-нибудь/первый раз Google предотвратить войдите в свою учетную запись любым сторонним приложением или используя свой код. когда вы войдете в свою учетную запись в браузере, вы получите сообщение «Google предотвращает подозрительную попытку входа в вашу учетную запись», см. скриншот ниже. . enter image description here

нажмите на "Это ты" и позволить войти

5

Для Gmail для работы с TLS или SSL:

Port for TLS/STARTTLS: 587
Port for SSL: 465

Оба manditory В параметре являются javax.net.ssl.SSLSocketFactory, mail.smtp.socketFactory.fallback и сделать mail.smtp.starttls.enable - false.

<beans> 
    <bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl"> 
     <property name="host"><value>smtp.gmail.com</value></property> 
     <property name="port"><value>465</value></property> 
     <property name="protocol"><value>smtp</value></property> 
     <property name="username"><value>[email protected]</value></property> 
     <property name="password"><value>XXXX</value></property> 
     <property name="javaMailProperties"> 
      <props> 
       <prop key="mail.smtp.auth">true</prop> 
       <prop key="mail.smtp.starttls.enable">false</prop> 
       <prop key="mail.smtp.quitwait">false</prop> 
       <prop key="mail.smtp.socketFactory.class">javax.net.ssl.SSLSocketFactory</prop> 
       <prop key="mail.smtp.socketFactory.fallback">false</prop> 
       <prop key="mail.debug">true</prop> 
      </props> 
     </property> 
    </bean> 
    <bean id="mailMail" class="com.embitel.service.email.EmailService"> 
     <property name="mailSender" ref="mailSender" /> 
     <property name="simpleMailMessage" ref="customeMailMessage" /> 
    </bean> 
    <bean id="customeMailMessage" class="org.springframework.mail.SimpleMailMessage"> 
     <property name="from" value="[email protected]" /> 
     <property name="to" value="[email protected]" /> 
     <property name="subject" value="Testing Subject Line for email senind.." /> 
     <property name="text"> 
      <value> 
     <![CDATA[ 
      Dear %s, 
      Mail Content : %s 
     ]]> 
      </value> 
     </property> 
    </bean> 
</beans> 

работал как шарм !!!

0

Я также облицовочный это исключение аутентификации и это из-за безопасности Gmail. Откройте следующий URL

https://www.google.com/settings/security/lesssecureapps

и включить меньше функцию безопасности.

2

Вот javaConfig, который работал на меня:

public JavaMailSender getJavaMailSender() 
    { 
     JavaMailSenderImpl sender = new JavaMailSenderImpl(); 
     sender.setProtocol("smtp"); 
     sender.setHost("smtp.gmail.com"); 
     sender.setPort(587); 
     sender.setUsername("username"); 
     sender.setPassword("password"); 

     Properties mailProps = new Properties(); 
     mailProps.put("mail.smtps.auth", "true"); 
     mailProps.put("mail.smtp.starttls.enable", "true"); 
     mailProps.put("mail.smtp.debug", "true"); 

     sender.setJavaMailProperties(mailProps); 

     return sender; 
    } 

Я думаю, вам нужно использовать порт 587 для TLS работать.

8

Я боролся в течение часа, чтобы найти правильные настройки для отправки электронной почты из Gmail с помощью javamailsender и, наконец, сделал это. Я отправляю это, как я не могу найти исчерпывающий пример для отправки через Gmail с javamailsender так что надеюсь, это поможет кому-то, кто хочет сделать то же самое:

ШАГ 1:

Добавить следующие настройки по почте. свойства:

mail.protocol=smtp 
mail.host=smtp.gmail.com 
mail.port=465 
mail.smtp.socketFactory.port=465 
mail.smtp.auth=true 
mail.smtp.starttls.enable=true 
mail.smtp.debug=true 
mail.smtp.starttls.required=true 
mail.smtp.socketFactory.fallback=false 
[email protected] 
[email protected] 
mail.password=my_password 

А потом в классе mailConfiguration, @value них:

@Configuration 
@PropertySource("classpath:mail.properties") 
public class MailConfiguration { 

    @Value("${mail.protocol}") 
    private String protocol; 
    @Value("${mail.host}") 
    private String host; 
    @Value("${mail.port}") 
    private int port; 
    @Value("${mail.smtp.socketFactory.port}") 
    private int socketPort; 
    @Value("${mail.smtp.auth}") 
    private boolean auth; 
    @Value("${mail.smtp.starttls.enable}") 
    private boolean starttls; 
    @Value("${mail.smtp.starttls.required}") 
    private boolean startlls_required; 
    @Value("${mail.smtp.debug}") 
    private boolean debug; 
    @Value("${mail.smtp.socketFactory.fallback}") 
    private boolean fallback; 
    @Value("${mail.from}") 
    private String from; 
    @Value("${mail.username}") 
    private String username; 
    @Value("${mail.password}") 
    private String password; 

    @Bean 
    public JavaMailSender javaMailSender() { 
     JavaMailSenderImpl mailSender = new JavaMailSenderImpl(); 

     Properties mailProperties = new Properties(); 
     mailProperties.put("mail.smtp.auth", auth); 
     mailProperties.put("mail.smtp.starttls.enable", starttls); 
     mailProperties.put("mail.smtp.starttls.required", startlls_required); 
     mailProperties.put("mail.smtp.socketFactory.port", socketPort); 
     mailProperties.put("mail.smtp.debug", debug); 
     mailProperties.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); 
     mailProperties.put("mail.smtp.socketFactory.fallback", fallback); 

     mailSender.setJavaMailProperties(mailProperties); 
     mailSender.setHost(host); 
     mailSender.setPort(port); 
     mailSender.setProtocol(protocol); 
     mailSender.setUsername(username); 
     mailSender.setPassword(password); 
     return mailSender; 
    } 
} 

Пожалуйста, обратите внимание, что мой Spring сервер SSL поэтому я использую порт 465. Для использования SSL-порта 465. Если вы используете 487, вы должны использовать TLS.

ШАГ 2:

После этой ссылке и выбрать очередь на доступ к менее защищенным приложениям.

https://www.google.com/settings/security/lesssecureapps

ШАГ 3:

Выключите AVAST, если у вас есть на вашем компьютере. AVAST Mail Shield конфликтует с отправкой сообщений электронной почты. Если вы не выключите его, вы получите следующее сообщение об ошибке:

Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.mail.MailSendException: Mail server connection failed; nested exception is javax.mail.MessagingException: Exception reading response; nested exception is: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target.

+0

Ваша реализация динамична, и это то, что мне нужно. Лучший ответ – SAM

+0

одна небольшая коррекция, кстати, tls-порт - 587 – SAM

0

Конфигурационный ниже (формат YAML) работал для меня после


spring.mail: 
    host: smtp.gmail.com 
    port: 465 
    protocol: smtp 
    username: [email protected] 
    password: abc 
    test-connection: true 
    properties: 
    "mail.smtp.auth": true 
    "mail.smtp.starttls.enable": true 
    "mail.smtp.starttls.required": true 
    "mail.smtp.socketFactory.class": javax.net.ssl.SSLSocketFactory 
    "mail.debug": true 
Смежные вопросы