And*_*rew 38 java gmail spring
我正在尝试使用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>
Run Code Online (Sandbox Code Playgroud)
如果我知道我的凭据是正确的,为什么我仍然会收到此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>
Run Code Online (Sandbox Code Playgroud)
小智 33
这对我有用:
<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>
Run Code Online (Sandbox Code Playgroud)
对我来说真正的诀窍原来是"协议"值必须是"smtp"(而不是"smtps").
Sim*_*mon 14
我挣扎了一个小时,找到了正确的设置,使用javamailsender从Gmail发送电子邮件,最后做到了.我发布这个,因为我找不到一个全面的例子来通过gmail发送javamailsender所以希望这会帮助那些想要做同样事情的人:
步骤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
Run Code Online (Sandbox Code Playgroud)
然后在你的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;
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,我的春节,服务器已启用SSL所以这就是为什么我使用端口465用于SSL端口465如果您正在使用487,你必须使用TLS.
第2步:
点击此链接并选择开启对安全性较低的应用的访问权限.
https://www.google.com/settings/security/lesssecureapps
第3步:
如果您的PC上有AVAST,请将其关闭.AVAST Mail Shield与发送电子邮件冲突.如果您不关闭它,您将收到以下错误:
servlet [dispatcherServlet]的Servlet.service()与path []的上下文引发了异常[请求处理失败; 嵌套异常是org.springframework.mail.MailSendException:邮件服务器连接失败; 嵌套异常是javax.mail.MessagingException:异常读取响应; 嵌套异常是:javax.net.ssl.SSLHandshakeException:sun.security.validator.ValidatorException:PKIX路径构建失败:sun.security.provider.certpath.SunCertPathBuilderException:无法找到请求目标的有效证书路径.
GMail 所需的唯一属性是
<prop key="mail.smtp.starttls.enable">true</prop>
Run Code Online (Sandbox Code Playgroud)
小智 5
要使Gmail使用TLS或SSL:
TLS/STARTTLS的
端口:用于SSL的587 端口:465
两者都是强制性的参数javax.net.ssl.SSLSocketFactory,mail.smtp.socketFactory.fallback并且mail.smtp.starttls.enable是假的.
<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>
Run Code Online (Sandbox Code Playgroud)
像魅力一样工作!
下面的配置(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
Run Code Online (Sandbox Code Playgroud)
这似乎没有显着不同,但也许可以尝试:
<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>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
85016 次 |
| 最近记录: |