步骤 3. 处理代码sendemail 演示是一个构建于 SendGrid Java 之上的 Java Servlet 应用程序。前端是一个用 HTML5/CSS3 和 jQuery 编写的 Ajax 客户端,用于执行 POST 调用和呈现响应。servlet 会处理请求,并将响应返回给浏览器。
以下各个小节将带您了解演示应用程序的代码和功能。
下载和构建 SendGrid Java 库- 从 下载代码。
- 打开一个 Windows® 提示并运行 gradlew。
- 运行 gradlew build 来生成一个 JAR 库文件。
从 Eclipse 引用 SendGrid Java 库- 将生成的 JAR 文件复制到您的项目。
- 配置您的项目的 Java Build Path,使之包含 JAR 文件。
 1
2
3
| import com.sendgrid.SendGrid;
import com.sendgrid.SendGrid.Email;
import com.sendgrid.SendGridException;
|
SendGrid API 密钥您需要使用您的应用程序的 API 密钥来连接到 SendGrid 服务,因为每个 API 调用都需要进行身份验证。在将服务添加/绑定到现有的应用程序之后,该服务的连接和凭证信息在 Bluemix VCAP_SERVICES 环境中是可用的。
- 在 Bluemix 仪表板上,选择您的应用程序。在 Overview 部分,单击应用程序运行时名称,在这里,该名称是 Liberty-WAR。
 - 向下滚动到 Environment Variables 部分并查看的 VCAP_SERVICES 变量。此环境变量包含应用程序正在使用的服务的详细信息,包括凭证详细信息。请注意,这是一个 JSON 对象。
 - 以下代码演示了如何使用 org.json 在 Java 代码中检索 username 和 password。
1
2
3
4
5
6
7
8
9
| final String VCAP_SERVICES = System.getenv("VCAP_SERVICES");
if (VCAP_SERVICES != null) {
JSONObject vcap = new JSONObject(VCAP_SERVICES);
JSONArray sendgrid = (JSONArray) vcap.get("sendgrid");
JSONObject json = sendgrid.getJSONObject(0);
JSONObject credentials = json.getJSONObject("credentials");
String username = credentials.getString("username");
String password = credentials.getString("password");
}
|
如何发送电子邮件发送电子邮件是 Java 程序的一项最基本的电子邮件功能。SendGrid 提供了两种发送电子邮件的方式:SMTP 中继或 Web API。 是一个助手库,用于包装 SMTP API 活动。它提供了 SendGrid 与您的应用程序之间的快速集成。关于与 SendGrid 集成的更多信息,请参阅 。
SendGrid Java 库提供了程序发送电子邮件所需的一切。要发送消息,一个程序应该执行以下步骤:
- 构造一个新的 Email 对象。
1
| Email email = new Email();
|
- 设置该对象的字段和内容。
1
2
3
4
5
6
| email.addTo("david@sendgridtest.com");
email.addToName("David");
email.setFrom("sendgriddemo@sendgridtest.com");
email.setFromName("SendGrid Demo");
email.setSubject("Hello World");
email.setText("Hello, \n This is a test email sent from IBM Bluemix SendGrid service");
|
- 使用您的 SendGrid 凭证初始化 SendGrid 对象。对于 Bluemix SendGrid 服务,此信息被存储在 VCAP_SERVICES 环境变量中。参见 。
1
| SendGrid sendgrid = new SendGrid(<user_name>, <password>);
|
- 发送它。
如何使用 SendGrid 应用程序(过滤器)SendGrid 提供了各种应用程序(过滤器)来提供额外的电子邮件功能。这些功能包括发送 bcc 电子邮件、在文本和 HTML 正文的底部添加脚注、订阅追踪、Google Analytics 追踪、单击追踪、电子邮件模板和其他功能。要获得过滤器列表,请参见 。
请注意,API 文档中的过滤器定义也适用于 SMTP API。要在 Java 中添加一个过滤器,可以使用以下语法来调用 com.sendgrid.SendGrid.Email 类中的 addFilter() 方法:
1
| email.addFilter(<filter_name>, <parameter_name>, <parameter_value>);
|
例如,要插入一个电子邮件脚注,可以运行以下代码:
1
2
3
| email.addFilter("footer", "enable", "1");
email.addFilter("footer", "text/html", "<p>Thanks,<br/> The IBM Bluemix Team<p>");
email.addFilter("footer", "text/plain", "Thanks,\n IBM Bluemix Team");
|
如何追踪您发送的电子邮件电子邮件追踪是通过 opentrack 和 clicktrack 过滤器执行的。它们在您打开电子邮件和单击电子邮件中的超级链接时开始追踪。有关的更多信息,请参阅针对 和 的文档。以下示例演示了单击追踪过滤器。
1
2
| email.setHtml("Hello, <p>Please visit <a href='https://ace.ng.bluemix.net'>IBM Bluemix</a>.</p>");
email.addFilter("clicktrack", "enable", "1");
|
只需数分钟就可以在 SendGrid 的 工具中获得电子邮件追踪结果。它通过您的帐户显示了一个最近事件(已交付电子邮件、已启动电子邮件、打开和单击电子邮件事件)列表。要访问该列表,请执行以下操作:
- 登录到 Bluemix。
- 在 Bluemix 仪表板中选择您的 SendGrid 服务并单击 LAUNCH SENDGRID DASHBOARD。
- 单击页面顶部的 Email Activity 链接。
以下示例显示了对打开和单击电子邮件的追踪。
 - 您还可以通过 SendGrid 的 来标记向外发送的电子邮件。您可以使用收集的统计数字来追踪某个特殊的类别。要添加这种类别,只需在 com.sendgrid.SendGrid.Email 上调用 addCategory() 方法即可。例如:
1
| email.addCategory("marketing");
|
然后,您可以在 SendGrid 仪表板的 Categories 选项卡下查看结果。
以下示例显示了 marketing 类别中的电子邮件打开和单击事件的统计数据。

- 如果您想用惟一的 ID 来标记您的电子邮件,以便进行追踪,那么您可以使用 SendGrid 的 将惟一的参数附加到您的电子邮件中。您需要添加的所有代码行如下所示:
1
| email.addUniqueArg(<key>, <val>);
|
您可以查看您帐户的 Email Activity 选项卡中的惟一参数。
如何使用 Template Engine 和替换标签发送时事通讯SendGrid 的 Template Engine 允许您使用 HTML 和 CSS 快速创建一个自定义时事通讯,然后将它整合到您的应用程序中。您可以使用嵌入在模板中的替换标签来添加动态内容。关于替换标签的更多信息,请参阅 。
要创建一个电子邮件通讯:
- 登录到 Bluemix,选择您的 SendGrid 服务并单击 LAUNCH SENDGRID DASHBOARD。
- 单击 Template Engine。
 - 选择 Create Template。
 - 您可以使用 WYSIWYG 编辑器或 HTML 编辑器创建和修改时事通讯。您还可以通过单击 Test 来预览结果。

- 在结束上述操作后单击 Save。您会看到在 Templates 页面上的 Template ID。
 - 以下代码演示了如何使用主体内容中的 将您刚刚创建的模板集成到您的应用程序中。
1
2
3
4
5
6
7
8
9
10
11
| // Create HTML content
email.setHtml("Hello -name-,<br>");
// Specify substitution value for the '-name-' tag defined in the HTML body
String[] val = { "SendGridUser" };
email.addSubstitution("-name-", val);
// Enable template
email.addFilter("templates", "enable", "1");
email.addFilter("templates", "template_id", "ffce1668-6d89-4687-807d-013ae59d5b79
");
|
- 以下是一个基于模板的示例电子邮件。

|