邮件服务 Java API 支持用于发送电子邮件的 JavaMail (javax.mail) 接口。
有关详细信息,请参阅 Sun 的 JavaMail API 参考。
为了发送电子邮件,应用程序将准备一个 MimeMessage 对象,然后用 Transport 类上的 send() 方法发送该对象。使用 JavaMail Session 对象创建消息。无需任何其他配置,Session 和 Transport 即可用于 App Engine 邮件服务。
import java.util.Properties;
import javax.mail.AddressException;
import javax.mail.InternetAddress;
import javax.mail.MessagingException;
import javax.mail.MimeMessage;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Transport;
// ...
Properties props = new Properties();
Session session = Session.getDefaultInstance(props, null);
String msgBody = "...";
try {
Message msg = new MimeMessage(session);
msg.setFrom(new InternetAddress("admin@example.com"));
msg.addRecipient(Message.RecipientType.TO,
new InternetAddress("user@example.com"));
msg.setSubject("Your Example.com account has been activated");
msg.setText(msgBody);
Transport.send(msg);
} catch (AddressException e) {
// ...
} catch (MessagingException e) {
// ...
}
对邮件服务的调用是异步的,且立即返回。邮件服务对联系收件人邮件服务器和传递消息的进程进行管理。如果在将消息发送到任意收件人时发生问题,或者如果收件人的邮件服务器返回“退回”消息,那么发件人将收到错误消息。
使用 InternetAddress 类的实例,在 JavaMail 中将显示发件人和收件人电子邮件地址。构造函数取字符串形式的电子邮件地址,并在该地址未表示为有效电子邮件地址时引发 AddressException。
为了设置发件人地址,应用程序将调用 MimeMessage 对象上的 setFrom() 方法。发件人必须为应用程序的注册开发人员地址,或通过 Google 帐户登录的当前请求的用户地址。
MimeMessage 对象上的几种方法确立了收件人。addRecipient() 方法取收件人类型和地址,并将其添加到该类型的收件人列表。收件人类型可以是 Message.RecipientType.TO、Message.RecipientType.CC 或 Message.RecipientType.BCC 中的任意一种。
您可以使用 setReplyTo() 方法设置“回复”地址。
通过调用 MimeMessage 对象上的方法来确立消息的内容。setSubject() 方法设置主题,而 setText() 方法设置(纯文本)正文内容。
出于安全方面的考虑,邮件服务不允许在传出电子邮件上使用任意标头。邮件服务将覆盖某些标头,如消息发送日期。添加到传出消息的其他标头将被去除。
您可以使用多部分消息来发送带文件附件的消息,或除了纯文本消息正文外还带有 HTML 消息正文的消息。创建一个要包含各部分的 MimeMultipart 对象,然后为每个附件或备用消息正文创建一个 MimeBodyPart 对象,并将其添加到容器。最后,将该容器分配到 MimeMessage 的内容。
import javax.mail.MimeBodyPart;
import javax.mail.MimeMultipart;
import javax.mail.Multipart;
import javax.activation.DataHandler;
// ...
String htmlBody; // ...
byte[] attachmentData; // ...
Multipart mp = new MimeMultipart();
MimeBodyPart htmlPart = new MimeBodyPart();
htmlPart.setContent(htmlBody, "text/html");
mp.addBodyPart(htmlPart);
MimeBodyPart attachment = new MimeBodyPart();
attachment.setFileName("manual.pdf");
attachment.setContent(attachmentData, "application/pdf");
mp.addBodyPart(attachment);
message.setContent(mp);
出于安全方面的考虑,消息部分和附件必须是几种允许类型之一,而且附件文件名的结尾必须是允许类型认可的文件扩展名。有关允许类型和文件扩展名的列表,请参阅概述:附件。
应用程序无法接收电子邮件。
应用程序无法使用 JavaMail 接口连接到用于发送或接收电子邮件的其他电子邮件服务。忽略添加到 Transport 或 Session 的 SMTP 配置。
低级邮件服务 API 的所有功能在 JavaMail 接口中都可用。
低级 API 包括向所有应用程序管理员发送邮件的便利方法。要在 JavaMail 完成此操作,请使用 admin@.(“admin”、@ 符号和句号)作为收件人。