javaWeb项目中集成发送邮件的功能

参考

Java 基于JavaMail实现向QQ邮箱发送邮件
java.lang.NoClassDefFoundError: com/sun/mail/util/MailLogger for JUnit test case for Java mail

写在前面

现在很多 Web 项目都集成了发送邮件给用户,以便提醒用户一些信息的功能,或者发送验证码给邮箱,来实现注册功能。那么这样的功能要如何实现呢,其实非常简单。

开启管理员邮箱的 SMTP 功能

拿 QQ 邮箱举例,首先管理员(也就是公司,网站服务端)需要开启一个自己的邮箱中的 SMTP 服务。在计算机网络中,SMTP 服务就是用于发送邮件的。

在 QQ 邮箱,设置-账户中,开启 SMTP 功能。

开启后,QQ 会提供给你一个授权码,相当于一个 API 的 KEY,会在接下来的程序中使用到。

主要代码

具体的代码如下,但是特别注意,不同的邮箱具体的代码会有些许的不同,比如 QQ 邮箱必须提供 SSL 加密操作,jar 使用 maven 管理

    <!-- 发送邮件依赖的 jar 包-->
    <dependency>
      <groupId>javax.mail</groupId>
      <artifactId>javax.mail-api</artifactId>
      <version>1.5.6</version>
    </dependency>

    <!-- MailSSLSocketFactory 加密的 jar 包 -->
    <!-- 注意这里的版本是 1.5.3 如果是低版本,比如我之前用的 1.4.4 ,那么下面的核心代码中有类不能使用 -->
    <dependency>
      <groupId>com.sun.mail</groupId>
      <artifactId>javax.mail</artifactId>
      <version>1.5.3</version>
    </dependency>
package com.www.utils;

import com.sun.mail.util.MailSSLSocketFactory;
import org.junit.Test;

import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.security.GeneralSecurityException;
import java.util.Date;
import java.util.Properties;

public class MailUtil {
    
    

    public  void sendMail() throws GeneralSecurityException, MessagingException {
    
    
        Properties props = new Properties();

        // 开启debug调试
        props.setProperty("mail.debug", "true");
        // 发送服务器需要身份验证
        props.setProperty("mail.smtp.auth", "true");
        // 设置邮件服务器主机名
        props.setProperty("mail.host", "smtp.qq.com");
        // 发送邮件协议名称
        props.setProperty("mail.transport.protocol", "smtp");

        // ssl 加密
        MailSSLSocketFactory sf = new MailSSLSocketFactory();
        sf.setTrustAllHosts(true);
        props.put("mail.smtp.ssl.enable", "true");
        props.put("mail.smtp.ssl.socketFactory", sf);

        Session session = Session.getInstance(props);

        Message msg = new MimeMessage(session);
        msg.setSubject("标题");
        StringBuilder builder = new StringBuilder();
        builder.append("内容");
        builder.append("\n内容");
        msg.setText(builder.toString());
        msg.setFrom(new InternetAddress("发送者邮箱"));

        Transport transport = session.getTransport();
        transport.connect("smtp.qq.com", "发送者邮箱", "授权码");

        transport.sendMessage(msg, new Address[] {
    
     new InternetAddress("接收者邮箱") });
        transport.close();
    }
}

效果

在这里插入图片描述

存在的问题

不知道为什么原因,我发送的信息都被腾讯当作垃圾邮件存放在垃圾箱中了。

猜你喜欢

转载自blog.csdn.net/qq_34902437/article/details/105723092