转载

在无需维护服务器的情况下实现邮件服务

注册使用 IBM Bluemix ™

这个云平台提供了免费的服务、运行时和基础架构,可以帮助您快速构建和部署您的下一个移动或 Web 应用程序。

您是否曾经想过在不必维护电子邮件服务器的情况下构建您自己的电子邮件交付系统?您可以在 IBM Bluemix 中使用 SendGrid 服务实现此操作。SendGrid 是一个基于云的电子邮件基础架构和交付服务,它允许您在不必维护自己的服务器的情况下发送电子邮件。它还允许您每月发送 25,000 封免费电子邮件,利用它们进行实时分析。

您可以使用本教程中提供的样例应用程序作为一个模型来快速创建您自己的基于云的电子邮件交付系统。

在本教程中,我将向您展示如何结合使用 HTML5/CSS3、jQuery、Ajax、Java Servlet、SendGrid Java™ 库和 IBM Bluemix SendGrid 服务来快速构建一个电子邮件交付系统。本教程中覆盖的场景包括构建和发送电子邮件、学习追踪电子邮件的技巧,以及使用 SendGrid Template Engine 和替换标签创建一个包含动态内容的电子邮件。

您可以使用本教程中提供的样例应用程序作为一个模型来快速创建您自己的基于云的电子邮件交付系统,此外,您可以使用针对各种集成选项的 API 和客户端库,使用它们来为您应用程序中的电子邮件提供支持。

运行应用程序

获取代码

在无需维护服务器的情况下实现邮件服务

构建您的应用程序需要做的准备工作

  • 一个 IBM ID 和密码。
  • 一个 DevOps Services 帐号,用来向 Bluemix 分配和部署教程代码。
  • 一个 Bluemix 帐号,用来创建和访问 SendGrid 服务。
  • 基本熟悉 Java 代码和 Eclipse IDE。我使用的是 Eclipse 版本 4.3.2 或更高版本,建议您也使用这些版本。

步骤 1. 向 Bluemix 分配和部署教程代码

  1. 单击上面的 获取代码 按钮,在 DevOps Services 中打开项目。
  2. 如果获得提示,请登录 DevOps Services。
  3. 单击 EDIT CODE 打开 Web IDE。
  4. 单击 FORK 并输入惟一的名称。 在无需维护服务器的情况下实现邮件服务
  5. 单击 sendemail 文件夹下的 manifest.yml 文件,并更新名称和主机字段,使它们与新的 Bluemix 应用程序的名称相匹配。例如:
    applications:  - name: sendemailtest    host: sendemailtest    disk: 3M    path: sendemail.war    domain: mybluemix.net    mem: 400M    instances: 1
  6. 单击 Web IDE 中的左面板上的 Changes 图标,核查和交付对您的应用程序的更改。 在无需维护服务器的情况下实现邮件服务
  7. 通过单击 BUILD & DEPLOY 转到 Deployment 页面。
  8. 在 Pipeline 页面上,单击 Add a builder 来配置构建器设置。对于此页面上的大部分选项,您可以接受默认设置。

    对于 Build script path ,可以输入 sendemail 值。对于 Build archive directory ,可以输入 sendemailarchive

    取消选中 Enable unit tests ,然后单击 SAVE

    在无需维护服务器的情况下实现邮件服务
  9. 单击 Add a stage 打开 Add Deployer Stage 页面。
  10. 使用 cf push 命令中的 -n 选项覆盖主机,如下所示。单击 SAVE在无需维护服务器的情况下实现邮件服务
  11. 单击 REQUEST BUILD 来构建项目,并将它部署到 Bluemix。

步骤 2. 向您的新应用程序添加/绑定一个 SendGrid 服务

  1. 登录到 Bluemix。
  2. 单击 ADD A SERVICE 查看可用的服务。
  3. 单击 Web and Application 目录下的 SendGrid在无需维护服务器的情况下实现邮件服务
  4. 在 Add Service 部分中,提供关于新服务的信息并单击 CREATE

    对于 App ,请选择您刚刚在步骤 1 中部署的应用程序。

    在无需维护服务器的情况下实现邮件服务
  5. 在提示 Restage Application 时单击 OK
    在无需维护服务器的情况下实现邮件服务

    完成上述操作后,您会在 Bluemix 仪表板中收到针对您的应用程序的一条消息,表明 您的应用程序正在运行

    在无需维护服务器的情况下实现邮件服务

    您可以看到,您有一个与您的应用程序有关的 SendGrid 服务。

    在无需维护服务器的情况下实现邮件服务
  6. 要测试该应用程序,请打开一个浏览器并导航到 http://[app name].mybluemix.net ,将 [app name] 更改为您的应用程序的名称。例如,http://sendemailtest.mybluemix.net/。通过简单地输入必要字段并单击 Send ,发送一个快速测试电子邮件。在电子邮件发送出去之后,会显示一个电子邮件成功发送的提示。 在无需维护服务器的情况下实现邮件服务

步骤 3. 处理代码

sendemail 演示是一个构建于 SendGrid Java 之上的 Java Servlet 应用程序。前端是一个用 HTML5/CSS3 和 jQuery 编写的 Ajax 客户端,用于执行 POST 调用和呈现响应。servlet 会处理请求,并将响应返回给浏览器。

以下各个小节将带您了解演示应用程序的代码和功能。

下载和构建 SendGrid Java 库

  1. 从 https://github.com/sendgrid/sendgrid-java 下载代码。
  2. 打开一个 Windows® 提示并运行 gradlew
  3. 运行 gradlew build 来生成一个 JAR 库文件。

从 Eclipse 引用 SendGrid Java 库

  1. 将生成的 JAR 文件复制到您的项目。
  2. 配置您的项目的 Java Build Path ,使之包含 JAR 文件。
    在无需维护服务器的情况下实现邮件服务
    import com.sendgrid.SendGrid;  import com.sendgrid.SendGrid.Email;  import com.sendgrid.SendGridException;

SendGrid API 密钥

您需要使用您的应用程序的 API 密钥来连接到 SendGrid 服务,因为每个 API 调用都需要进行身份验证。在将服务添加/绑定到现有的应用程序之后,该服务的连接和凭证信息在 Bluemix VCAP_SERVICES 环境中是可用的。

  1. 在 Bluemix 仪表板上,选择您的应用程序。在 Overview 部分,单击应用程序运行时名称,在这里,该名称是 Liberty-WAR在无需维护服务器的情况下实现邮件服务
  2. 向下滚动到 Environment Variables 部分并查看的 VCAP_SERVICES 变量。此环境变量包含应用程序正在使用的服务的详细信息,包括凭证详细信息。请注意,这是一个 JSON 对象。 在无需维护服务器的情况下实现邮件服务
  3. 以下代码演示了如何使用 org.json 在 Java 代码中检索 usernamepassword

    点击查看代码清单

    关闭 [x]

    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。 SendGrid Java 库 是一个助手库,用于包装 SMTP API 活动。它提供了 SendGrid 与您的应用程序之间的快速集成。关于与 SendGrid 集成的更多信息,请参阅 Integrate With SendGrid 。

SendGrid Java 库提供了程序发送电子邮件所需的一切。要发送消息,一个程序应该执行以下步骤:

  1. 构造一个新的 Email 对象。
    Email email = new Email();
  2. 设置该对象的字段和内容。
    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");
  3. 使用您的 SendGrid 凭证初始化 SendGrid 对象。对于 Bluemix SendGrid 服务,此信息被存储在 VCAP_SERVICES 环境变量中。参见SendGrid API 密钥。
    SendGrid sendgrid = new SendGrid(<user_name>, <password>);
  4. 发送它。
    sendgrid.send(email);

如何使用 SendGrid 应用程序(过滤器)

SendGrid 提供了各种应用程序(过滤器)来提供额外的电子邮件功能。这些功能包括发送 bcc 电子邮件、在文本和 HTML 正文的底部添加脚注、订阅追踪、Google Analytics 追踪、单击追踪、电子邮件模板和其他功能。要获得过滤器列表,请参见 Apps (Filters) 。

请注意,API 文档中的过滤器定义也适用于 SMTP API。要在 Java 中添加一个过滤器,可以使用以下语法来调用 com.sendgrid.SendGrid.Email 类中的 addFilter() 方法:

email.addFilter(<filter_name>, <parameter_name>, <parameter_value>);

例如,要插入一个电子邮件脚注,可以运行以下代码:

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");

如何追踪您发送的电子邮件

电子邮件追踪是通过 opentrackclicktrack 过滤器执行的。它们在您打开电子邮件和单击电子邮件中的超级链接时开始追踪。有关的更多信息,请参阅针对 opentrackclicktrack 的文档。以下示例演示了单击追踪过滤器。

点击查看代码清单

关闭 [x]

email.setHtml("Hello, <p>Please visit <a href='https://ace.ng.bluemix.net'>IBM Bluemix</a>.</p>");  email.addFilter("clicktrack", "enable", "1");

只需数分钟就可以在 SendGrid 的 Email Activity 工具中获得电子邮件追踪结果。它通过您的帐户显示了一个最近事件(已交付电子邮件、已启动电子邮件、打开和单击电子邮件事件)列表。要访问该列表,请执行以下操作:

  1. 登录到 Bluemix。
  2. 在 Bluemix 仪表板中选择您的 SendGrid 服务并单击 LAUNCH SENDGRID DASHBOARD
  3. 单击页面顶部的 Email Activity 链接。
    在无需维护服务器的情况下实现邮件服务

    以下示例显示了对打开和单击电子邮件的追踪。

    在无需维护服务器的情况下实现邮件服务

    点击查看大图

    关闭 [x]

    在无需维护服务器的情况下实现邮件服务

  4. 您还可以通过 SendGrid 的 Categories 来标记向外发送的电子邮件。您可以使用收集的统计数字来追踪某个特殊的类别。要添加这种类别,只需在 com.sendgrid.SendGrid.Email 上调用 addCategory()

    方法即可。例如:

    email.addCategory("marketing");

    然后,您可以在 SendGrid 仪表板的 Categories 选项卡下查看结果。

    在无需维护服务器的情况下实现邮件服务

    以下示例显示了 marketing 类别中的电子邮件打开和单击事件的统计数据。

    在无需维护服务器的情况下实现邮件服务

    点击查看大图

    关闭 [x]

    在无需维护服务器的情况下实现邮件服务

  5. 如果您想用惟一的 ID 来标记您的电子邮件,以便进行追踪,那么您可以使用 SendGrid 的 Unique Arguments

    将惟一的参数附加到您的电子邮件中。您需要添加的所有代码行如下所示:

    email.addUniqueArg(<key>, <val>);

    您可以查看您帐户的 Email Activity 选项卡中的惟一参数。

如何使用 Template Engine 和替换标签发送时事通讯

SendGrid 的 Template Engine 允许您使用 HTML 和 CSS 快速创建一个自定义时事通讯,然后将它整合到您的应用程序中。您可以使用嵌入在模板中的替换标签来添加动态内容。关于替换标签的更多信息,请参阅 Body and Subject Tags 。

要创建一个电子邮件通讯:

  1. 登录到 Bluemix,选择您的 SendGrid 服务并单击 LAUNCH SENDGRID DASHBOARD
  2. 单击 Template Engine在无需维护服务器的情况下实现邮件服务
  3. 选择 Create Template在无需维护服务器的情况下实现邮件服务
  4. 您可以使用 WYSIWYG 编辑器或 HTML 编辑器创建和修改时事通讯。您还可以通过单击 Test 来预览结果。 在无需维护服务器的情况下实现邮件服务

    点击查看大图

    关闭 [x]

    在无需维护服务器的情况下实现邮件服务

  5. 在结束上述操作后单击 Save 。您会看到在 Templates 页面上的 Template ID在无需维护服务器的情况下实现邮件服务
  6. 以下代码演示了如何使用主体内容中的 替换标签 将您刚刚创建的模板集成到您的应用程序中。
    // 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  ");
  7. 以下是一个基于模板的示例电子邮件。 在无需维护服务器的情况下实现邮件服务

结束语

电子邮件交付是大多数企业的一个成功要素。借助 IBM Bluemix SendGrid 服务,企业不必再构建和维护传统的高成本电子邮件服务器。您可以使用本教程中的代码快速构建您自己的电子邮件交付系统,并以此作为一个起点。

BLUEMIX SERVICE USED IN THIS TUTORIAL: SendGrid 降低企业维护电子邮件系统的成本和复杂性。

正文到此结束
Loading...