Java发送电子邮件示例

时间:2020-02-23 14:37:14  来源:igfitidea点击:

JavaMailAPI“pp”独立(平台和协议)框架,其目的是帮助构建消息传递和邮件应用程序。它是一个可选的软件包,可用于JavaSE平台,也包含在JavaEE平台中。

JavaMail在许多场合都很有用。例如,可以在用户点击“忘记密码”(通过向用户设置的相应电子邮件发送电子邮件)、在中注册某个活动(通过电子邮件发送有关该活动的更多详细信息)时使用。

JavaMail API使用的主要协议

SMTP

POP

IMAP

如果你有计算机网络的经验,你可能听说过一些(如果不是全部的话)。但是如果你没有计算机网络方面的经验,让我为你分解这些协议。

应用层

在开始具体解释电子邮件协议之前,让我先向我们介绍一个简单的计算机网络层图。

网络层

你可以看到SMTP,POP,IMAP和基本上所有的电子邮件协议都在应用层之下。

传输层的协议为应用程序提供主机到主机的通信服务。

因特网层是一组方法、协议和规范,用于在必要时通过网络将网络包从始发主机传输到由IP地址指定的目的主机。

网络接入层中的协议为系统提供了将数据传送到直接连接网络上的其他设备的方法。

现在我们已经知道了每一层的用途,我们可以更深入地了解SMTP、POP、IMAP是什么。

SMTP

SMTP代表简单邮件传输协议。它是一个标准的因特网协议,用于通过因特网协议网络传输电子邮件。还有一种本身不是协议的SMTPS。SMTPS本质上是由SSL保护的SMTP连接。

POP

POP代表邮局协议,是本地电子邮件客户端通过TCP/IP连接从远程服务器检索电子邮件的应用层Internet标准协议。POP支持下载和删除访问远程邮箱的要求。

IMAP

IMAP是Internet消息访问协议的缩写。它是一种Internet标准协议,电子邮件客户端使用它通过TCP/IP连接从邮件服务器检索电子邮件。它还允许电子邮件客户端访问远程邮件服务器上的电子邮件。传入的电子邮件将发送到电子邮件服务器,该服务器将邮件存储在收件人的电子邮件框中。

JavaMail架构

现在是时候介绍java邮件体系结构了。

使用JavaMail API的Java应用程序工作流

从图中可以看到,JavaMail API是客户端层。它直接与SPI(服务器/协议层)相关,然后在SMTP、IMAP或者POP之间进行选择,并在选择了协议之后发送消息。

使用JavaMail API发送邮件示例

在开始之前,请确保我们已经安装了必要的.jar文件。他们也可以在甲骨文上找到。去那里下载最新版本。另外,我们可能需要下载fakeSTMP。fakeSTMP用于测试目的。对于本例,我们需要在计算机上安装SMTP。

为了能够通过你的gmail账户发送邮件信息,你应该在google账户安全设置中允许不安全的应用程序(从gmail的角度来看,你的应用程序是这样的)。

电子邮件发送者.java

要导入所有必需的库,我们需要导入4件事。

import java.util.*;  
import javax.mail.*;  
import javax.mail.internet.*;  
import javax.activation.*;

之后,我只需创建一个main方法,将变量放入其中。将要接收电子邮件的电子邮件、发件人电子邮件和主机。

public class EmailSender {
  public static void main(String[] args) {
      String destinationEmail = "[email protected]";
      String senderEmail      = "[email protected]";
      String host             = "localhost";
  }
}

接下来的几行将负责获取会话对象。

Properties properties = System.getProperties():
properties.setProperty("mail.smtp.host", host);
Session session = Session.getDefaultInstance(properties);

创建会话对象的目的是什么?

会话是我们将如何与邮件主机交互的上下文。这可能包括调试来自邮件主机的输出、超时和身份验证机制。

最后,我们发出了真正的信息。

try {
          MimeMessage message = new MimeMessage(session);
          message.setFrom(new InternetAddress(senderEmail));
          message.addRecipient(Message.RecipientType.TO, new InternetAddress(destinationEmail));
          message.setSubject("Hello");
          message.setText("Hey, ignore this email, this is just an example");
          Transport.send(message);
          System.out.println("Sent Successfully");
      } 
      catch (MessagingException mex) {
          mex.printStackTrace();
      }

我们在这里创建一条消息,然后设置谁发送电子邮件(在本例中是“senderEmail”)。之后,我们只需使用邮件.addRecipient()方法。然后我们设置了邮件的主题(你可以随心所欲),然后我们设置了文本(同样,你可以随心所欲)。在所有这些之后,我们只是简单地发送信息。

完整代码片段:

import java.util.*;  
import javax.mail.*;  
import javax.mail.internet.*;  
import javax.activation.*; 

public class EmailSender {
  public static void main(String[] args) {
      String destinationEmail = "[email protected]";
      String senderEmail      = "[email protected]";
      String host             = "localhost";
      Properties properties = System.getProperties();
      properties.setProperty("mail.smtp.host", host);
      Session session = Session.getDefaultInstance(properties);

      try {
          MimeMessage message = new MimeMessage(session);
          message.setFrom(new InternetAddress(senderEmail));
          message.addRecipient(Message.RecipientType.TO, new InternetAddress(destinationEmail));
          message.setSubject("Hello");
          message.setText("Hey, ignore this email, this is just an example");
          Transport.send(message);
          System.out.println("Sent Successfully");
      } 
      catch (MessagingException mex) {
          mex.printStackTrace();
      }
  }
}