我在使用 spring mail 向 gmail 帐户发送邮件时遇到了问题。 我引用了 stackoverflow 中的大部分帖子并尝试了这些帖子。但没有运气。仍然坚持下去。请建议我的代码中还缺少什么。
Windows -8: Java 7
EmailServiceImpl.java:
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import com.test.mail.data.EmailData;
public class EmailServiceImpl {
private JavaMailSender mailSender;
public JavaMailSender getMailSender() {
return mailSender;
}
public void setMailSender(JavaMailSender mailSender) {
this.mailSender = mailSender;
}
public void sendMail(EmailData emailData) {
MimeMessage message = mailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(message);
try {
helper.setFrom(emailData.getFrom());
helper.setTo(emailData.getTo());
helper.setSubject(emailData.getSubject());
helper.setText(emailData.getBody());
} catch (MessagingException e) {
e.printStackTrace();
}
mailSender.send(message);
}
}
应用程序上下文.xml
<bean id="emailSvcImpl"
class="com.test.mail.services.impl.EmailServiceImpl">
<property name="mailSender" ref="mailSender" />
</bean>
<!-- via TLS -->
<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
<property name="host" value="smtp.gmail.com" />
<!-- <property name="port" value="25" /> --> <!-- Also checked with port number : 25 -->
<property name="port" value="587" />
<property name="protocol" value="smtp" />
<property name="username" value="fromaccount@gmail.com" />
<property name="password" value="fromaccountpwd" />
<property name="javaMailProperties">
<props>
<prop key="mail.smtp.auth">true</prop>
<prop key="mail.smtp.starttls.enable">true</prop>
<prop key="mail.smtp.debug">true</prop>
<prop key="mail.smtp.timeout">8500</prop>
</props>
</property>
</bean>
<!-- Also Tried to send gmail via SSL -->
<!--
<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="fromaccount@gmail.com" />
<property name="password" value="fromaccountpwd" />
<property name="javaMailProperties">
<props>
<prop key="mail.smtps.auth">true</prop>
<prop key="mail.smtps.starttls.enable">true</prop>
<prop key="mail.smtps.debug">true</prop>
<prop key="mail.smtps.timeout">8500</prop>
</props>
</property>
</bean> -->
Maven 依赖项:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>3.2.11.RELEASE</version>
</dependency>
<dependency>
<groupId>com.sun.mail</groupId>
<artifactId>javax.mail</artifactId>
<version>1.5.2</version>
</dependency>
cmd提示:用'ping smtp.gmail.com'命令ping ,能得到回复,没有数据丢失。
异常:
org.apache.cxf.interceptor.Fault: Mail server connection failed; nested exception is com.sun.mail.util.MailConnectException: Couldn't connect to host, port: smtp.gmail.com, 465; timeout -1;
nested exception is:
java.net.ConnectException: Connection refused: connect. Failed messages: com.sun.mail.util.MailConnectException: Couldn't connect to host, port: smtp.gmail.com, 465; timeout -1;
nested exception is:
java.net.ConnectException: Connection refused: connect
尝试使用 SSL 和 TLS 发送邮件,但端口号不同但同样异常
最佳答案
Google 已更改政策,您需要允许应用程序访问您的帐户。
我昨天遇到了一个问题,并通过 google.com 收到了这封电子邮件
您可以切换到 Gmail 等 Google 开发的应用程序来访问您的帐户(推荐)或在 https://www.google.com/settings/security/lesssecureapps 更改您的设置这样您的帐户就不再受现代安全标准的保护。
完成所有操作后,您可以验证属性,这就是我使用的并且它在我这边工作得很好
Properties props = new Properties();
props.put("mail.smtp.host", "smtp.gmail.com"); //SMTP Host
props.put("mail.smtp.socketFactory.port", "465"); //SSL Port
props.put("mail.smtp.socketFactory.class",
"javax.net.ssl.SSLSocketFactory"); //SSL Factory Class
props.put("mail.smtp.auth", "true"); //Enabling SMTP Authentication
props.put("mail.smtp.port", "465"); //SMTP Port
希望您使用的是正确的值。
关于java - 使用 spring mail 将邮件发送到 gmail 帐户的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28273799/