java - 使用 spring mail 将邮件发送到 gmail 帐户的问题

标签 java spring jakarta-mail

我在使用 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/

相关文章:

tomcat - javax.mail 不再适用于 java 11 和 tomcat 8.5

java - 更改启动图标

java - Java中的链表,如何将字符串数组转换为列表?

java - 即使启用所有属性后,Hibernate 也不记录触发的 SQL 查询

java - 如何使用HttpSecurity(Spring Security)应用角色?

spring - 无法在 spring 工具套件 4.2.1 中创建动态 Web 项目

java - 为什么我的电子邮件方法总是发送电子邮件并将电子邮件本身作为附件?

java - 在Java中以编程方式设置gmail中不太安全的应用程序

java - 将方法的泛型传递为泛型类泛型

java - 多文件读取循环并区分 .pdf 和 .doc 文件