在java中怎么用TLS发送邮件?如何用SSL发送?

BSO 2020-09-01 14:43:05 java常见问答 3274

由于java编程语言本身的强大性与使用的简明性,使得越来越多的人开始在日常工作中广泛应用它。今天主要为大家介绍一下,在java中用TLS发邮件的方法,以及如何用SSL发送邮件。

首先,我们可以知道的是常用的邮件发送方式主要有TLS, SSL和default这几种。他们的主要差别在于TLS和SSL都是通过加密的方式进行数据通信,而default的则是没有加密的。所以默认的方式在大多数情况下都被禁用了。那么我们今天就主要来看一下TLS和SSL这两种方式。

先给大家看一个简单示例,以gmail账户为例。假设我们有一个gmail的帐号,希望使用程序通过它发送邮件到一个指定的目的邮件地址。我们首先需要看一下gmail邮件服务器的相关设置信息:

java中如何使用TLS发送邮件

在前面这些配置信息的基础上,我们可以通过它们来和gmail邮件服务器通信。首先前面的这些内容将作为一个配置项传入给gmail smtp server。在我们的具体实现里可以将这部分写到一个配置文件里,然后读取出来,也可以手动的设置。

手动设置的代码如下所示:

Properties props = new Properties();
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.starttls.enable", "true");
props.put("mail.smtp.host", "smtp.gmail.com");
props.put("mail.smtp.port", "587");

设置完成后下一步就是建立一个和邮件服务器连接的session了。采用这种方式需要提供用户名和密码信息。假设我们已经有的gmail帐号为user@gmail.com, 密码为password。

那么建立session连接的代码如下:

Session session = Session.getInstance(props
    , new javax.mail.Authenticator()
    {
        protected PasswordAuthentication getPasswordAuthentication()
        {
            return new PasswordAuthentication(username, password);
        }
    });

设置好session之后的下一步就是设置我们需要发送的邮件内容等信息:

Message message = new MimeMessage(session);
message.setFrom(new InternetAddress(username));
message.setRecipients(Message.RecipientType.TO
    , InternetAddress.parse("newuser@gmail.com"));
message.setSubject("Testing Subject");
message.setText("Dear user," +
    "\n\n No spam to my email, please!");
Transport.send(message);

我们设定收件人的邮件地址为newuser@gmail.com,邮件的主题为Testing Subject。真正实现发送邮件的这部分代码是Transport.send(),它将最后组装成的邮件字符串发送出去。

然后我们再来看一下SSL的操作流程。它的发送方式其实和TLS大致相同,首先也是设置邮件发送的配置项,只是因为采用的协议和端口不一样,具体认证的方式也有差别。这里session的创建方式如下:

Session session = Session.getDefaultInstance(props
    , new javax.mail.Authenticator()
    {
        protected PasswordAuthentication getPasswordAuthentication()
        {
            return new PasswordAuthentication("abc@163.com", "abc");
        }
    });

其他的代码基本上都是一样的。除了上述的两种方式,还有一种默认的邮件发送方式,因为它不是采用的通信加密,在一些本地局域网的测试环境里可能会用到。和前面的代码里主要的区别就在于它的创建session的方式很简单,一般不需要做任何身份验证,典型的代码实现如下:

Session session = Session.getDefaultInstance(props);

这里的props就是环境的基本配置项,典型的如下:

mail.smtp.auth = false
mail.smtp.starttls.enable = false
mail.smtp.port = 25
mail.smtp.host = localhost
username =
    password =

以上就是关于在java中怎么用TLS和 SSL中发送邮件的有关内容。如果你对java的应用感兴趣,想要了解更多java常见问题,敬请关注奇Q 工具网。

推荐阅读:

java的邮件服务器james怎么配置,怎么发送含有附件的邮件?

在java中邮件协议对接端口有哪些,如何接收html格式的邮件?

在java中发送邮件有哪些注意事项?四个类的实例展示