[SPRING] Gmail 용 Spring JavaMailSenderImpl을 구성하는 방법
SPRINGGmail 용 Spring JavaMailSenderImpl을 구성하는 방법
JavaMailSenderImpl 클래스를 사용하여 Gmail SMTP 서버에 연결하는 데 사용할 올바른 속성을 찾으려고합니다.
먼저 여기에있는 접근 방식을 시도했다고 말해 보겠습니다. 이것은 잘 동작했다. 그러나 정확한 인증 정보를 사용하여 해당 게시물 아래의 구성을 시도했을 때 javax.mail.AuthenticationFailedException이 수신되었습니다.
내 현재 구성은 다음과 같습니다.
<bean id="mailSender" class ="org.springframework.mail.javamail.JavaMailSenderImpl" >
<property name="username" value="XXX@gmail.com" />
<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이 발생합니다.
다음은 아래 답변을 기반으로 업데이트 된 코드입니다. 나는 여전히 같은 예외를 받고있다.
<bean id="mailSender" class ="org.springframework.mail.javamail.JavaMailSenderImpl" >
<property name="username" value="XXX@gmail.com" />
<property name="password" value="XXX" />
<property name="javaMailProperties">
<props>
<prop key="mail.smtp.from">XXX@gmail.com</prop>
<prop key="mail.smtp.user">XXX@gmail.com</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>
해결법
-
==============================
1.이것은 나를 위해 일했다 :
이것은 나를 위해 일했다 :
<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"가 아니라는 "smtp"여야한다는 것이 밝혀졌습니다.
-
==============================
2.나는 한 시간 동안 javamailsender를 사용하여 Gmail에서 이메일을 보낼 수있는 올바른 설정을 찾기 위해 고생하고 마침내 해냈습니다. javamailsender와 함께 Gmail을 통해 전송할 수있는 포괄적 인 예제를 찾을 수 없기 때문에이 게시물을 올리므로 같은 일을하고 싶은 사람에게 도움이 될 것입니다.
나는 한 시간 동안 javamailsender를 사용하여 Gmail에서 이메일을 보낼 수있는 올바른 설정을 찾기 위해 고생하고 마침내 해냈습니다. javamailsender와 함께 Gmail을 통해 전송할 수있는 포괄적 인 예제를 찾을 수 없기 때문에이 게시물을 올리므로 같은 일을하고 싶은 사람에게 도움이 될 것입니다.
1 단계:
mail.properties에 다음 설정을 추가하십시오.
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 mail.from=XXX@gmail.com mail.username=XXX@gmail.com 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를 PC에 가지고 있다면 AVAST를 끄십시오. AVAST Mail Shield는 전자 메일을 보내는 것과 충돌합니다. 이 기능을 끄지 않으면 다음 오류가 발생합니다.
-
==============================
3.TLS 또는 SSL에서 Gmail을 사용하려면 다음 단계를 따르세요.
TLS 또는 SSL에서 Gmail을 사용하려면 다음 단계를 따르세요.
둘 다 mandatory paramater가 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>XXXXX@gmail.com</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="XXXX@gmail.com" /> <property name="to" value="yyyyy@gmail.com" /> <property name="subject" value="Testing Subject Line for email senind.." /> <property name="text"> <value> <![CDATA[ Dear %s, Mail Content : %s ]]> </value> </property> </bean> </beans>
매력처럼 일했다! !!
-
==============================
4.언젠가 / 처음으로 Google은 타사 응용 프로그램이나 코드를 사용하여 계정에 로그인하지 못하게합니다. 브라우저에서 계정에 로그인하면 메시지가 나타납니다. "Google에서 의심스러운 계정 로그인 시도 방지"아래 스크린 샷을 참조하십시오.
언젠가 / 처음으로 Google은 타사 응용 프로그램이나 코드를 사용하여 계정에 로그인하지 못하게합니다. 브라우저에서 계정에 로그인하면 메시지가 나타납니다. "Google에서 의심스러운 계정 로그인 시도 방지"아래 스크린 샷을 참조하십시오.
"그랬습니까?"를 클릭하고 로그인을 허용하십시오.
-
==============================
5.GMail에 필요한 유일한 속성은 다음과 같습니다.
GMail에 필요한 유일한 속성은 다음과 같습니다.
<prop key="mail.smtp.starttls.enable">true</prop>
-
==============================
6.아래의 설정 (yaml 형식)은
아래의 설정 (yaml 형식)은
spring.mail: host: smtp.gmail.com port: 465 protocol: smtp username: xyz@gmail.com 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
-
==============================
7.나를 위해 일한 javaConfig는 다음과 같습니다.
나를 위해 일한 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; }
TLS에 포트 587을 사용해야한다고 생각합니다.
-
==============================
8.이것은 나를 위해 일했다 :
이것은 나를 위해 일했다 :
<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="my_email@domain.tld" /> <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=ko&answer=78799
-
==============================
9.이것은 크게 다른 것 같지는 않지만 아마도 시도해보십시오.
이것은 크게 다른 것 같지는 않지만 아마도 시도해보십시오.
<bean id="mailSender" class ="org.springframework.mail.javamail.JavaMailSenderImpl" > <property name="username" value="XXX@gmail.com" /> <property name="password" value="XXX" /> <property name="javaMailProperties"> <props> <prop key="mail.smtp.user" value="XXX@gmail.com" /> <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>
-
==============================
10."출발지"주소는
XXX@gmail.com prop>으로 지정하거나 메시지를 작성할 때 지정해야합니다. "출발지"주소는
XXX@gmail.com prop>으로 지정하거나 메시지를 작성할 때 지정해야합니다. -
==============================
11.나는 당신의 질문을 해결했습니다.
나는 당신의 질문을 해결했습니다.
봄철 비동기 이메일 서비스 구현 방법
참고로, 이것은 스프링 3에서 작동하므로 스프링 2에서는 확실하지 않습니다.
-
==============================
12.나는 또한이 인증 예외에 직면했다. 이것은 gmail 보안 때문이다. 다음 URL을여십시오.
나는 또한이 인증 예외에 직면했다. 이것은 gmail 보안 때문이다. 다음 URL을여십시오.
https://www.google.com/settings/security/lesssecureapps
적은 보안 기능을 가능하게합니다.
from https://stackoverflow.com/questions/2016190/how-to-configure-spring-javamailsenderimpl-for-gmail by cc-by-sa and MIT license