0

我目前有一个用 Java 编码的服务器(一个亚马逊 EC2 实例),它有许多 servlet 来执行各种 Web 服务。到目前为止,我一直在使用如下代码发送邀请电子邮件:

public void sendInvitationEmail(String nameFrom, String emailTo, String withID)
        {

            SendEmailRequest request = new SendEmailRequest().withSource("invitation@myserver.com");

            List<String> toAddresses = new ArrayList<String>();
            toAddresses.add(emailTo);
            Destination dest = new Destination().withToAddresses(toAddresses);
            request.setDestination(dest);

            Content subjContent = new Content().withData("My Service Invitation Email");
            Message msg = new Message().withSubject(subjContent);

            String textVer = nameFrom +" has invited you to try My Service.";
            String htmlVer = "<p>"+nameFrom+" has invited you to try My Service.</p>";
            // Include a body in both text and HTML formats
            Content textContent = new Content().withData(textVer);
            Content htmlContent = new Content().withData(htmlVer);
            Body body = new Body().withHtml(htmlContent).withText(textContent);
            msg.setBody(body);

            request.setMessage(msg);

            try {           
                ses.sendEmail(request);
            }catch (AmazonServiceException ase) {
                handleExceptions(ase);
            } catch (AmazonClientException ace) {
                handleExceptions(ace);  
            }
        }

我已经成功发送了电子邮件,其中包含基于我的代码生成的外部变量的人名。我的问题是,我将如何处理更复杂的 HTML 电子邮件?我已经生成了一个布局更复杂的 HTML 文件,但我仍然需要通过我的代码修改这些变量。该文件是一个 HTML,所以我认为(不确定)我可以将它作为一大串文本读取,然后将其添加到 htmlVer 字符串中。但我想知道是否有更简单的方法来读取 HTML 文件,只需更改一些变量,然后简单地将其添加到 Amazon SES 的内容部分。

我在这里采取了错误的方法吗?

4

1 回答 1

0

您可以使用 Thymeleaf 之类的模板引擎来处理 html 并注入属性。

就这么简单:

ClassLoaderTemplateResolver resolver = new ClassLoaderTemplateResolver();
resolver.setTemplateMode("HTML5");
resolver.setSuffix(".html");
TemplateEngine templateEngine = new TemplateEngine();
templateEngine.setTemplateResolver(resolver);
final Context context = new Context(Locale.CANADA);
String name = "John Doe";
context.setVariable("name", name);

final String html = templateEngine.process("myhtml", context);

有一个myhtml.html文件:

<!DOCTYPE html SYSTEM "http://www.thymeleaf.org/dtd/xhtml1-strict-thymeleaf-3.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:th="http://www.thymeleaf.org">
<head>
    <title>My first template with Thymeleaf</title>
</head>
<body>
    <p th:text="${name}">A Random Name</p> 
</body>
</html>

引擎处理完 HTML 文件后,htmljava 代码中的变量将包含上面的 HTML,但会将<p>元素的内容替换为您在上下文中传递的值。

如果您使用 DreamWeaver 之类的工具来制作 html,这不是问题。您可以使用文本编辑器并th:text稍后添加(或其他)属性。这是 Thymeleaf 的优势之一,您可以分别制作模板和 java 代码,并在需要时加入它们。

于 2013-04-02T02:52:12.700 回答