2021SC@SDUSC
目录
一、Email
Email是JPress中邮件的实体类,Email是JPress中的—种的通信方式。Email可以是文字、图像、声音等多种形式。同时,用户可以得到大量免费的新闻、专题邮件,并轻松实现轻松的信息搜索。
Email类的属性如下:
private String[] to = null; private String[] cc = null; private String subject = null; private String content = null;
分别是收件人、抄送、主题、内容。其主要send方法如下:
public void send(EmailSender sender) { try { sender.send(this); } catch (Throwable ex) { LOG.error(ex.toString(), ex); } }
很明显,参数是一个EmailSender对象,它会使用sender的send方法来发送,有点适配器模式的影子。所以一个邮件的发送过程,主要还是由sender来决定,接下来我们来研究一下sender。
二、Sender
1.EmailSender
EmailSender是实现send方法的接口。如果一个发送器想要拥有发送邮件的功能,就要实现这个接口。send方法会接受一封邮件,并返回发送结束后的状态。
public boolean send(Email email);
在JPress中,EmailSender有两个实现类,他们分别是SimpleEmailSender和AliyunEmailSender。其UML类图如下:
2.SimpleEmailSender
SimpleEmailSender是JPress中实现了网络应用层中邮件发送核心功能的类。其属性如下:
private String host; private String name; private String password; private boolean useSSL = true; private boolean enable = false;
分别是主机ip地址、用户名、密码、是否使用SSL证书、邮箱是否可用。在类的默认构造器中,它就从JPressConsts中获取、注入了这些系统常量。
系统消息的创建一般也是由SimpleEmailSender来创建的,使用其createMessage方法。在创建消息的过程中,系统会记录一些参数并保存至message的session中。
系统发送Email的方法如下:
public boolean send(Email email) { if (enable == false) { //do nothing return false; } Message message = createMessage(); try { message.setSubject(email.getSubject()); message.setContent(email.getContent(), "text/html;charset=utf-8"); message.setRecipients(Message.RecipientType.TO, toAddress(email.getTo())); message.setRecipients(Message.RecipientType.CC, toAddress(email.getCc())); Transport.send(message); return true; } catch (MessagingException e) { logger.error("SimpleEmailSender send error", e); } return false; }
可以发现,如果系统此时的JPressConsts.OPTION_CONNECTION_EMAIL_ENABLE是false,那么将无法发送,这是合理的。如果是可使用邮箱,那么系统将会把Email打包成message,再使用Transport.send把message传输出去,自此,完成Email的发送。