电子邮件 API
邮件发送
如需发送邮件,使用 Emailer
bean 的下列方法:
-
sendEmail()
- 邮件同步发送。调用代码会处于等待状态,直至邮件发送到 SMTP 服务器为止。可以通过一组参数指定要发送的邮件:以逗号分隔的收件人列表、主题、内容、附件数组;或者通过一个特殊的EmailInfo
对象,封装所有这些信息并支持显式设置发件人的地址。下面示例使用
EmailInfo
对象发送邮件:@Autowired private Emailer emailer; private void sendByEmailInfo() throws EmailException { EmailInfo emailInfo = EmailInfoBuilder.create("john.doe@company.com", "Email subject", "Email body") .build(); emailer.sendEmail(emailInfo); }
在同步发送的过程中,框架可以抛出包含收件人地址和响应错误信息的
EmailException
异常。方法执行时,会在数据库创建一个
SendingMessage
实例,该实例包含所有收件人的地址。实例初始为SendingStatus.SENDING(发送中)
状态,发送成功后为SendingStatus.SENT(已发送)
。如果发送过程中出错,则状态为SendingStatus.NOT_SENT(未发送)
。 -
sendEmailAsync()
- 邮件异步发送。该方法返回SendingStatus.QUEUE(排队中)
状态的SendingMessage
实例。实际的发送操作由 调度器 调用Emailer.processQueuedEmails()
方法执行。
邮件附件
EmailAttachment
对象是一个包装类,包含附件的字节数组、文件名,还有邮件中附件的唯一标识符。
EmailAttachment emailAtt = new EmailAttachment(bytes, "logo.png", "logoId");
附件的唯一标识符不是必需的,但是当需要在邮件正文中插入图片时,则需要使用该标识符。此时,在创建 EmailAttachment
时需要指定一个唯一的 contentId
,例如,上面例子中的 “logoId”。在正文中插入图片时,使用 cid:logoId
这样的表达式指定附件的路径,示例:
<img src="cid:logoId"/>
另外,也可以用字符串创建一个文本附件,并指定编码和附件名称。下面示例中,创建了一个附件并与邮件一起发送:
String att = "<html><body><h1>Content of attachment</h1></body></html>";
EmailAttachment emailAtt = EmailAttachment.createTextAttachment(att, StandardCharsets.UTF_8.name(), "attachment.html");