【Java】如何通过JavaMail发送邮件

以qq邮箱为例,如果要用qq邮箱向qq邮箱发送邮件,首先要开通SMTP服务并获取授权码,此处不做详细解释。授权码是即时性的,在使用期间要一直开着授权码的网页页面。

第一步是在pom文件中加入maven依赖

<dependency>
 <groupId>javax.mail</groupId>
 <artifactId>mail</artifactId>
 <version>1.4</version>
</dependency>

下面是固定代码用法,邮箱地址、授权码和邮件内容可以按个人修改

import java.security.Security;
import java.util.Properties;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

public class MailClient {
  public static void main(String[] args) {
    try {
      final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory";

      //配置邮箱信息
      Properties props = System.getProperties();
      //邮件服务器
      props.setProperty("mail.smtp.host", "smtp.qq.com");
      props.setProperty("mail.smtp.socketFactory.class", SSL_FACTORY);
      props.setProperty("mail.smtp.socketFactory.fallback", "false");
      //邮件服务器端口
      props.setProperty("mail.smtp.port", "465");
      props.setProperty("mail.smtp.socketFactory.port", "465");
      //鉴权信息
      props.setProperty("mail.smtp.auth", "true");
      //建立邮件会话
      Session session = Session.getDefaultInstance(props, new Authenticator() {
        //身份认证
        protected PasswordAuthentication getPasswordAuthentication() {
          //1.账户 授权码
          return new PasswordAuthentication("xxxxxxx@qq.com", "xxxx");
        }
      });
      //建立邮件对象
      MimeMessage message = new MimeMessage(session);
      //设置邮件的发件人
      message.setFrom(new InternetAddress("xxxxxxx@qq.com"));
      //2.设置邮件的收件人
      message.setRecipients(Message.RecipientType.TO, "xxxxxxx@qq.com");
      //设置邮件的主题
      message.setSubject("通过javamail发出!!!");
      //设置内容
      message.setContent("文本邮件测试", "text/html;charset=UTF-8");
      //保存对邮件的所有修改
      message.saveChanges();
      //发送邮件
      Transport.send(message);
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
}

这段代码定义了一个名为MailClient的类,其中的main方法用于发送邮件。在main方法中,通过配置Properties对象来设置SMTP服务器和端口、身份认证等信息。

然后,创建一个Session对象,该对象用于建立与SMTP服务器的连接,并通过Authenticator类实现身份认证。在示例代码中,Authenticator的getPasswordAuthentication方法被重写,需填入发件人的邮箱地址和授权码。

接下来,创建一个MimeMessage对象,用于构建邮件内容。设置发件人、收件人、主题和邮件正文等信息。

最后,调用Transport的send方法发送邮件。


下面对个别代码进行着重解释:

//邮件服务器
      props.setProperty("mail.smtp.host", "smtp.qq.com");
      props.setProperty("mail.smtp.socketFactory.class", SSL_FACTORY);
      props.setProperty("mail.smtp.socketFactory.fallback", "false");
      //邮件服务器端口
      props.setProperty("mail.smtp.port", "465");
      props.setProperty("mail.smtp.socketFactory.port", "465");
      //鉴权信息
      props.setProperty("mail.smtp.auth", "true");

这几行代码用于配置JavaMail的SMTP传输相关属性信息:

  • 邮件服务器:设置SMTP服务器地址为"smtp.qq.com"。
  • SSL加密:设置SMTP传输使用的加密方式为SSL,即通过SSLSocketFactory实现SSL加密传输。
  • 端口号:设置SMTP服务器使用的端口为465。
  • 鉴权信息:设置SMTP服务器需要进行身份认证。

其中,"mail.smtp.host"属性用于设置SMTP服务器地址,"mail.smtp.port"属性用于设置SMTP服务器使用的端口,"mail.smtp.auth"属性用于告诉JavaMail要进行身份认证,而"mail.smtp.socketFactory.class"和"mail.smtp.socketFactory.port"属性用于设置使用SSL加密连接时的相关信息。


 Session session = Session.getDefaultInstance(props, new Authenticator() {
        //身份认证
        protected PasswordAuthentication getPasswordAuthentication() {
          //1.账户 授权码
          return new PasswordAuthentication("xxxxxxx@qq.com", "xxxx");
        }
      });

这段代码创建了一个JavaMail的Session对象,并通过身份验证器(Authenticator)提供了账户和授权码进行SMTP身份认证。

具体解释如下:

  1. 通过Session.getDefaultInstance(props, new Authenticator() {...}) 创建了一个默认的JavaMail Session实例。这里的props是之前设置的属性集合,用于指定SMTP服务器的配置信息。
  2. 在Authenticator的匿名内部类中,重写了getPasswordAuthentication方法,用于提供身份验证所需的用户名和密码。在这个例子中,"xxxxxxx@qq.com" 是邮箱账户名,"xxxx" 是授权码(或密码)。
  3. 通过返回一个PasswordAuthentication对象,将账户名和密码传递给Authenticator,用于进行SMTP身份认证。

这样,创建的Session对象就拥有了进行SMTP身份验证的能力,可以用于后续的邮件发送操作。

Session 是 JavaMail API 中的一个关键类,它代表了一个邮件会话。

在邮件发送过程中,需要创建一个 Session 对象来提供用于发送邮件的各种配置信息,例如 SMTP 服务器的主机名、端口号、身份认证等。

Session 类可以使用 Session.getDefaultInstance(Properties properties, Authenticator authenticator) 方法来创建。其中,properties 参数是一个属性集合,用于指定邮件配置的各种参数,而 authenticator 参数是一个可选的身份验证器,用于进行 SMTP 身份认证(如果需要)。

通过 Session 对象,可以创建 Message 对象并设置邮件的相关内容,如收件人、发件人、主题、正文等。然后,可以使用 Transport.send(Message message) 方法来发送邮件。

需要注意的是,在使用 Session 创建邮件会话时,需要确保为邮件服务提供商提供正确的配置信息,并遵守相关的邮件协议和规范。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值