App Engine 应用程序可以代表应用程序管理员和拥有 Google 帐户的用户发送电子邮件。应用程序使用邮件服务来发送电子邮件。
邮件服务 Java API 支持用 JavaMail (javax.mail) 接口来发送电子邮件。
创建 JavaMail 会话时,您无需提供任何 SMTP 服务器配置。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", "Mr. User"));
msg.setSubject("Your Example.com account has been activated");
msg.setText(msgBody);
Transport.send(msg);
} catch (AddressException e) {
// ...
} catch (MessagingException e) {
// ...
}
邮件服务可以将电子邮件发送到一个或多个收件人。邮件包含主题、纯文本正文以及可选的 HTML 正文。也可以包含文件附件。
为了安全起见,邮件的发件人地址必须是应用程序管理员的电子邮件地址,或者是当前登录用户的 Google 帐户电子邮件地址。电子邮件地址可以包含“答复”地址,它也必须满足这些限制。
如果要代表应用程序发送电子邮件,但是不想使用单个管理员的个人 Google 帐户作为发件人,那么可以使用任何有效的电子邮件地址为应用程序新建 Google 帐户,然后添加新的帐户作为应用程序的管理员。要添加帐户作为管理员,请参阅管理控制台的“开发人员”部分。
您可以为收件人使用任何电子邮件地址。收件人可以位于邮件的“收件人”字段或“抄送”字段中,或者在邮件标题中隐藏收件人(“密件抄送”或“BCC”)。
电子邮件可以没有文件附件,或有多个文件附件。
附件具有文件名和文件数据。文件数据可以来自任何来源,如应用程序数据文件或数据存储区。MIME 类型的附件取决于文件名。
为了安全起见,附加到电子邮件的文件必须是以下允许使用的文件类型之一,并且文件名必须带有与文件类型对应的扩展名。
以下是允许作为电子邮件文件附件的 MIME 类型及其对应的文件扩展名列表。
| MIME 类型 | 文件扩展名 | |
|---|---|---|
| 图像/x-ms-bmp | bmp | |
| 文本/css | css | |
| 文本/逗号分隔值 | csv | |
| 图像/gif | gif | |
| 文本/html | htm、html | |
| 图像/jpeg | jpeg、jpg、jpe | |
| 应用程序/pdf | ||
| 图像/png | png | |
| 应用程序/rss+xml | rss | |
| 文本/plain | text、txt、asc、diff、pot | |
| 图像/tiff | tiff、tif | |
| 图像/vnd.wap.wbmp | wbmp | |
| 文本/日历 | ics | |
| 文本/x-vcard | vcf |
应用程序调用邮件服务来发送邮件时,邮件即进行排队,且调用立即返回。邮件服务使用标准程序与每个收件人的邮件服务器进行联系、发送邮件并在邮件服务器无法联系时重试。
如果邮件服务不能发送邮件,或者如果收件人的邮件服务器发送退信通知(例如,如果系统上不存在该地址的帐户),则将通过电子邮件向该邮件的发件人地址发送错误消息。应用程序本身不会收到关于发送是成功还是失败的任何通知。
当开发服务器中所运行的应用程序调用邮件服务来发送电子邮件时,会将该电子邮件打印到日志。Java 开发服务器并不发送电子邮件。
每个邮件服务请求都会计算在邮件 API 调用配额内。
电子邮件的每个收件人电子邮件地址都会计算在收到电子邮件的收件人(可调整)配额内。每个身为应用程序管理员的收件人都会计算在收到电子邮件的管理员配额内。
电子邮件正文中发送的数据会计算在以下配额内:
电子邮件附带的每个附件都会计算在发送的附件配额内。
作为电子邮件附件发送的数据会计算在以下配额内:
有关配额的详细信息,请参阅配额,以及管理控制台的“配额详细信息”部分。
除了配额以外,使用邮件服务还需遵循以下限制:
| 限制 | 值 |
|---|---|
| 邮件的最大大小,包含附件 | 1 兆字节 |
| 当管理员为收件人时,邮件的最大大小 | 16 千字节 |