Capstone Project Solutions

以下是将我们提供的文本翻译成中文的结果:


标题: “毕业设计项目解决方案” 权重: 75


场景1: 分析"每周优惠"和"每日更新"活动的指标

健康与保健业务单元配置

  1. 配置健康与保健配置集以使用CloudWatch跟踪打开率。
aws sesv2 create-configuration-set-event-destination \
--configuration-set-name HealthWellnessConfigSet \
--event-destination-name OpensPerCampaign \
--event-destination '{
    "Enabled": true,
    "MatchingEventTypes": ["OPEN"],
    "CloudWatchDestination": {
        "DimensionConfigurations": [
            {
                "DimensionName": "campaign",
                "DimensionValueSource": "MESSAGE_TAG",
                "DefaultDimensionValue": "January"
            }
        ]
    }
}'
  1. 发送每周优惠电子邮件测试

a. 一月活动

aws sesv2 send-email \
    --from-email-address sender@example.com \
    --destination ToAddresses=recipient@example.com\
    --content '{"Simple": {"Subject": {"Data": "测试电子邮件","Charset": "UTF-8"},"Body": {"Text": {"Data": "这是使用AWS CLI SESv2发送的测试电子邮件。","Charset": "UTF-8"},"Html": {"Data": "这是使用AWS CLI SESv2发送的测试电子邮件。","Charset": "UTF-8"}}}}' \
    --configuration-set HealthWellnessConfigSet \
    --email-tags Name=campaign,Value=January

b. 二月活动

aws sesv2 send-email \
    --from-email-address sender@example.com \
    --destination ToAddresses=recipient@example.com\
    --content '{"Simple": {"Subject": {"Data": "测试电子邮件","Charset": "UTF-8"},"Body": {"Text": {"Data": "这是使用AWS CLI SESv2发送的测试电子邮件。","Charset": "UTF-8"},"Html": {"Data": "这是使用AWS CLI SESv2发送的测试电子邮件。","Charset": "UTF-8"}}}}' \
    --configuration-set HealthWellnessConfigSet \
    --email-tags Name=campaign,Value=February

旅游业务单元配置

  1. 修改HTML模板,使每个链接都标记了相应的合作伙伴名称。我们假设文件名为travel_tips_weekly_deals.html
<!DOCTYPE html>
<html>
  <head>
    <title>旅游小贴士每周优惠</title>
  </head>

  <body>
    <h1>欢迎来到旅游小贴士每周优惠!</h1>

    <p>查看我们合作伙伴提供的这些令人惊叹的旅游优惠:</p>

    <ul>
      <li>
        <a href="{{traveldeal1}}" ses:tags="partner:PartnerA">旅游优惠1</a>
      </li>

      <li>
        <a href="{{traveldeal2}}" ses:tags="partner:PartnerB">旅游优惠2</a>
      </li>

      <li>
        <a href="{{traveldeal3}}" ses:tags="partner:PartnerC">旅游优惠3</a>
      </li>
    </ul>
  </body>
</html>
aws sesv2 create-email-template --cli-input-json "$(printf '{"TemplateName": "TravelTipsWeeklyDeals", "TemplateContent": {"Subject": "旅游小贴士每周优惠", "Html": "%s"}}' "$(sed -e ':a' \
-e 'N' \
-e '$!ba' \
-e 's/\n/\\n/g' \
-e 's/"/\\"/g' \
travel_tips_weekly_deals.html)")"
  1. 配置旅游小贴士配置集以使用CloudWatch跟踪点击率。
aws sesv2 create-configuration-set-event-destination \
--configuration-set-name TravelTipsConfigSet \
--event-destination-name PartnerClick \
--event-destination '{
    "Enabled": true,
    "MatchingEventTypes": ["CLICK"],
    "CloudWatchDestination": {
        "DimensionConfigurations": [
            {
                "DimensionName": "partner",
                "DimensionValueSource": "LINK_TAG",
                "DefaultDimensionValue": "-"
            }
        ]
    }
}'
  1. 在Cloudwatch中设置一个仪表板,以跟踪每个附属合作伙伴链接的点击情况
aws cloudwatch put-dashboard --dashboard-name TravelAgencyTracking --dashboard-body '{
    "widgets": [
        {
            "type": "metric",
            "x": 0,
            "y": 0,
            "width": 24,
            "height": 6,
            "properties": {
                "metrics": [
                    ["AWS/SES", "Click", "partner", "PartnerA", {"label": "合作伙伴A", "stat": "Sum"}],
                    ["AWS/SES", "Click", "partner", "PartnerB", {"label": "合作伙伴B", "stat": "Sum"}],
                    ["AWS/SES", "Click", "partner", "PartnerC", {"label": "合作伙伴C", "stat": "Sum"}]
                ],
                "view": "singleValue",
                "region": "<your-region>",
                "title": "合作伙伴指标",
                "period": 86400
            }
        }
    ]
}'

场景2: 诊断和修复"每周优惠"电子邮件模板的问题

  1. 分析提供的"每周优惠"活动电子邮件模板,并确定导致渲染失败的问题。

我们应该确定的问题

  • .header.header::after选择器中的position: absolute;position: relative;属性可能无法正常工作,导致"独家优惠"标签位置错误或根本不显示。
  • h1元素的blink效果的@keyframes动画在Gmail中可能无法工作,因此闪烁效果可能不会显示。
  • 检测像素比的@media查询可能不受支持,font-family更改可能不会应用。
  1. 找出如何根据传递的旅游优惠数据数组动态填充旅游优惠。

最终模板(删除了无效的html/css标记并添加了传递数组逻辑)如下:

<!DOCTYPE html>
<html>
  <head>
    <title>旅游小贴士每周优惠</title>
    <style>
      body {
        font-family: "Helvetica Neue" Helvetica Arial sans-serif;
        font-size: 16px;
        line-height: 1.5;
        color: #333;
        margin: 0;
        padding: 20px;
        background-color: #f5f5f5;
        display: flex;
        justify-content: center;
        align-items: center;
        min-height: 100vh;
      }
      .content {
        background-color: #fff;
        border-radius: 10px;
        padding: 20px;
        box-shadow: 0 2px 4px rgba(0 0 0 0.1);
        max-width: 600px;
        width: 100%;
        display: grid;
        grid-template-columns: 1fr;
      }
      .header {
        background-color: #3498db;
        padding: 20px;
        text-align: center;
        border-radius: 5px;
        margin-bottom: 20px;
        position: relative;
      }
      h1 {
        font-size: 24px;
        font-weight: bold;
        color: #fff;
        margin: 0;
        animation: 2s blink infinite;
      }
      p {
        margin-bottom: 10px;
      }
      ul {
        list-style: none;
        padding: 0;
        margin-bottom: 20px;
      }
      li {
        margin-bottom: 10px;
      }
      a {
        text-decoration: none;
        color: #fff;
        font-weight: bold;
        background-color: #3498db;
        display: inline-block;
        padding: 10px 20px;
        border-radius: 5px;
        transition: background-color 0.3s ease;
      }
      a:hover {
        background-color: #2c3e50;
      }
    </style>
  </head>
  <body>
    <div class="content">
      <div class="header">
        <h1>欢迎来到旅游小贴士每周优惠!</h1>
      </div>
      <p>查看我们合作伙伴提供的这些令人惊叹的旅游优惠:</p>
      <ul>
        {{#each travel_deals}}
        <li>
          <a href="{{url}}" ses:tags="{{sestag}}">{{name}}</a>
        </li>
        {{/each}}
      </ul>
    </div>
  </body>
</html>

场景4: 构建和细分我们的列表以发送"每周优惠"活动

Python Lambda函数解决方案

import json
import boto3

dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table('EngagementTable')

def lambda_handler(event context):
    for record in event['Records']:
        sns_message = json.loads(record['body'])
        ses_event = json.loads(sns_message['Message'])

        if ses_event["eventType"] in ("Open" "Click"):
            email_address = ses_event["mail"]["destination"][0]
            timestamp = ses_event["mail"]["timestamp"]

            update_engagement(email_address timestamp)

def update_engagement(email timestamp):
    table.update_item(
        Key={
            'email': email
        }
        UpdateExpression='SET last_engagement_date = :val1'
        ExpressionAttributeValues={
            ':val1': timestamp
        }
    )

Node.js Lambda函数解决方案

const AWS = require("aws-sdk");
const dynamodb = new AWS.DynamoDB.DocumentClient();
const tableName = "EngagementTable";

exports.handler = async (event) => {
  for (const record of event.Records) {
    const snsMessage = JSON.parse(record.body);
    const sesEvent = JSON.parse(snsMessage.Message);

    if (["Open" "Click"].includes(sesEvent.eventType)) {
      const emailAddress = sesEvent.mail.destination[0];
      const timestamp = sesEvent.mail.timestamp;

      await updateEngagement(emailAddress timestamp);
    }
  }
};

async function updateEngagement(email timestamp) {
  const params = {
    TableName: tableName
    Key: {
      email: email
    }
    UpdateExpression: "SET last_engagement_date = :val1"
    ExpressionAttributeValues: {
      ":val1": timestamp
    }
  };

  await dynamodb.update(params).promise();
}