Vertx-Mail简析

Posted Vertx北京用户组

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Vertx-Mail简析相关的知识,希望对你有一定的参考价值。

前两天做了一个通过vertx实现发邮件的程序,今天就给大家分享一下


首先我们需要导入vertx-mail-client

<dependency>
  <groupId>io.vertx</groupId>
  <artifactId>vertx-mail-client</artifactId>
  <version>3.2.1</version>
</dependency>

创建client

创建一个client打开smtp连接就可以发送邮件了,而具体的哪一个邮箱就需要通过MailConfig来指定了,示例代码如下:

MailConfig config = new MailConfig();
config.setHostname("mail.example.com");
config.setPort(587);
config.setStarttls(StartTLSOptions.REQUIRED);
config.setUsername("user");
config.setPassword("password");
MailClient mailClient = MailClient.createNonShared(vertx, config);

你发邮件的所有配置都是通过MailConfig来实现的,如果MailConfig什么都不设置的话,它会使用默认的,hostName为localhost,port为25;类似于数据库MailClient可以使用一个连接池,这样就没必要每次发送邮件的时候都要和服务器重新连接,每次都登录;一个client可以被创建成共享的和不共享的,如果是共享的,所有相同身份标识的都共享一个连接池:

MailClient mailClient = MailClient.createShared(vertx, config, "exampleclient");

如果是通过TLS登录,需要设置setStarttls; 

现在创建client完毕了,接下来就是怎么发邮件了,在发之前我们要关心的是发什么,我们发的信息都是存储在MailMessage里的:

MailMessage message = new MailMessage();
message.setFrom("user@example.com (Example User)");
message.setTo("recipient@example.org");
message.setCc("Another User <another@example.net>");
message.setText("this is the plain message text");
message.sethtml("this is html text <a href=\"\">vertx.io</a>");

setFrom表示发送者,这个要和前面的登录用户一样,setSubject表示主题,setText表示正文,setTo表示发给谁,还可以抄送SetCc,还可以密送setBcc,参数可以是一个用户或者是一组用户,一个的话用String,一组的话List

发送邮件:

mailClient.sendMail(message,    result -> {
    if (result.succeeded()) {
        System.out.println(result.result());
    } else {
        result.cause().printStackTrace();
    }
});

现在我们发送邮件已经结束了,但是好像还缺点什么东西,对就是我们还没有说怎么添加附件,现在邮箱已经成为了必不可少的一部分了,vertx这点也考虑到了:

MailAttachment attachment = new MailAttachment();
    attachment.setContentType("text/plain");
    attachment.setData(Buffer.buffer("attachment file"));
    message.setAttachment(attachment);

MailAttachment创建附件,附件信息存储到一个Buffer,支持Base64附件,然后把它添加到message里面就可以了;附件的编码格式通过setContentType(String contentType)来设置。

最后是一MailConfig属性补充:

  1. ssl表示连接服务器的时候是否使用ssl,使用465端口的时候需要设置,默认为false

  2. ehloHostname 使用EHLO而且创建一个消息的ID,如果不设置,将使用hostname

  3. login LoginOption只可以是 DISABLED, NONE REQUIRED, 默认是 NONE

由于能力有限,有些地方可能会存在错误或者不合理的表述,欢迎指出错误,一起探讨!

以上是关于Vertx-Mail简析的主要内容,如果未能解决你的问题,请参考以下文章

Android WebView远程代码执行漏洞简析

智能机器人编程游戏robocode的运行代码简析

简析静态xml布局如何通过动态代码实现

功能强大的图片截取修剪神器:Android SimpleCropView及其实例代码重用简析(转)

简析Jenkins的SVN插件未更新到最新代码

Spring AOP 简析