利用Spring框架封装的JavaMail现实邮件发送

本文详细介绍了如何通过整合Spring框架的JavaMailSender实现邮件发送功能,特别关注了配置QQ邮箱服务器、解决授权验证失败及发件人账号一致性问题的过程。通过调整邮件服务配置,确保邮件能够成功发送,适用于需要使用第三方邮件服务进行邮件发送的场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    最近发现使用自己的POP3服务器给用户发送邮件总是有不同类型的邮件收不到,比如我的邮件是地址是123456@qq.com  发送给126邮箱可以,发送给qq邮箱就不行。经过半天的研究和考证最终确定了方案使用qq的POP3/SMTP邮件服务器,具体设置和配置如下:

 

1.JAVA框架spring整合Email邮件服务代码配置

<!--①邮件服务器-->

<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">

        <property name="protocol" value="smtp"/>

        <property name="host" value="smtp.qq.com"/>

        <property name="port" value="465" /><!--不同的邮件提供商提供的端口不同-->

        <property name="username" value=”123456@qq.com“/>

        <property name="password" value="123456"/>

        <property name="javaMailProperties">
           <props>

                       <prop key="mail.smtp.auth">true</prop>

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

                       <prop key="mail.smtp.socketFactory.class">javax.net.ssl.SSLSocketFactory</prop>                   

     <!--QQ要求的ssl连接邮件服务器开启SSL连接验证- ->

               </props>

        </property>

</bean>

 

会员中心,用户用邮箱找回密码配置

<!-- 会员中心Action -->
 <bean id="web.member.IndexAction" class="com.tch.action.member.IndexAction" scope="prototype">
  <property name="tchMemberService" ref="tchMemberService"></property>
  <property name="mailSender" ref="mailSender"></property>
 </bean>

 

2.JAVA发送邮件类

import java.util.Date;

 

import javax.mail.internet.MimeMessage;

 

import org.springframework.mail.javamail.JavaMailSender;

import org.springframework.mail.javamail.MimeMessageHelper;

 

public class SpringMail {

    /**

     * 发送html邮件

     * @param sender 邮件发送人实体

     * @param toEmail 接收人的邮件地址

     * @param fromEmail   发送人的邮件地址

     * @param titleEmail 发送邮件的标题

     * @param contentEmail   发送邮件的内容

     * @throws Exception

     */

    public void sendHTMLMail(JavaMailSender sender,String toEmail,String fromEmail,String titleEmail,String contentEmail)throws Exception {

      MimeMessage msg = sender.createMimeMessage();

      MimeMessageHelper helper = new MimeMessageHelper(msg,true, "UTF-8");

     // MimeMessageHelper helper = new MimeMessageHelper(msg);

      helper.setTo(toEmail);

      System.out.println(fromEmail+" >> "+toEmail);

      helper.setFrom(fromEmail);

      helper.setSubject(titleEmail);

      helper.setSentDate(new Date());

      helper.setText(contentEmail,true);

          sender.send(msg);

          System.out.println("成功发送邮件!");

    }

}

3.开始测试,不成功,控制台报错,错误信息如下:

 org.springframework.mail.MailAuthenticationException: Authentication failed; nested exception is javax.mail.AuthenticationFailedException
[15:24:47.678] {http--8080-2$13326029} org.springframework.mail.MailAuthenticationException: Authentication failed; nested exception is javax.mail.AuthenticationFailedException

权限验证失败?

解决办法:(我这里建议使用QQ邮箱)

如果遇到该异常,应该先考虑一下你所配的发送邮箱,有没有对外开放POP3/SMTP服务,据我所知,现在网易已不对外开放了,QQ邮箱就有,但是QQ邮 箱在默认状态下,也是没有开启这个服务的,得自己到“邮箱设置》账户”手动设置开启POP3/SMTP服务,其它的邮箱服务器,就只有尝试下在说了。

 

4.继续测试  还是不成功,错误信息如下:

 

501 mail from address must be same as authorization user

原因:

主要原因是发送类中 helper.setFrom(fromEmail);

setFrom的邮箱账号必须和验证服务器的邮箱账号相同。比如以上事例中的必须是helper.setFrom(123456@qq.com”);

 

解决办法:设置网站发送邮件的邮箱地址为123456@qq.com

 

 

5.结论

以上配置主要还是取决于开放平台的POP3/SMTP提供的服务,这一点很重要。

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值