Token导航 LogoToken导航

Agent Skill · 开发规范

aws-ses-best-practices(AWS SES 最佳实践)

用于辅助云资源、部署、容器、基础设施和运维自动化任务。它适合让 Agent 检查配置、整理部署步骤、分析资源状态、生成排障思路或辅助云服务接入。使用时需要明确目标环境、账号权限、区域和资源组,区分本地测试与生产操作;涉及删除资源、重启服务、修改网络或权限配置时,应先确认影响范围。

aws-ses-best-practices 是开发规范类 Agent Skill,可用宿主为 Codex、Claude、Cursor、Gemini CLI,通过GitHub 仓库获取,权限为需要联网;许可证为 MIT,第三方扫描已通过,按安装量在开发规范类的 1,265 个 Skill 里排第 871。

总安装 376周安装 16GitHub Stars 1下载 132核验 2026-05-01

安装说明

本站只整理中文说明,不托管安装包,也不代用户安装。
GitHub
许可证
MIT

安装方式

通过对话安装

复制提示词发给支持本地命令或 Skills 的 AI 助手,先确认命令和权限,再让它执行。

请帮我安装这个 Agent Skill:aws-ses-best-practices(AWS SES 最佳实践)
来源仓库:https://github.com/wraps-team/skills
仓库路径:skills/aws-ses-best-practices
安装命令:
npx skills add https://github.com/wraps-team/skills --skill aws-ses-best-practices
安装前请先检查当前环境是否支持对应 CLI,并向我确认将要执行的命令、安装目录、联网范围和文件读写权限;确认后再执行。

命令行安装

复制命令到本机终端执行。不同来源提供的安装方式可能略有差异;本站展示可直接复制的安装命令,安装前请核对来源页面。

skills.shnpx skills
npx skills add https://github.com/wraps-team/skills --skill aws-ses-best-practices

这个 Skill 是做什么的

开发规范类 Skill 用来统一代码风格、目录结构和评审口径,产出多为检查清单或改写建议。

提供 AWS SES 邮件投递、DKIM/SPF 认证和合规配置的最佳实践指南。适合优化发件人信誉、防止进入垃圾箱或满足 GDPR 等监管要求。输出 DNS 记录配置示例、身份验证流程和监控指标解读方法。需拥有域名控制权并在 SES 控制台完成邮箱或域身份绑定。

aws-ses-best-practices 属于开发规范类 Skill,可作为该场景下的辅助能力补充。

来源仓库内路径:skills/aws-ses-best-practices

上手步骤

4 步
  1. 1

    确认自己的宿主工具

    公开资料标注支持 Codex、Claude、Cursor、Gemini CLI;先确认自己用的是其中之一,再按对应工具的 Skills 目录放置。

  2. 2

    拿到安装命令

    可以直接复制的命令是 npx skills add https://github.com/wraps-team/skills --skill aws-ses-best-practic…;命令里的占位符换成自己的路径或密钥再执行。

  3. 3

    安装后重启宿主

    命令执行完要完全退出宿主工具再打开,让新装的 Skill 被重新扫描到,否则列表里可能看不到。

  4. 4

    按最小权限试用

    它需要需要联网,先在测试目录或测试账号里跑,确认没问题再放到正式项目。

常见问题

6 条

aws-ses-best-practices 怎么安装?

在终端执行 npx skills add https://github.com/wraps-team/skills --skill aws-ses-best-practices。装完完全退出宿主工具再打开,让它重新扫描本地 Skill。

aws-ses-best-practices 支持哪些 AI 工具?

公开资料标注支持 Codex、Claude、Cursor、Gemini CLI。其他工具只要能读取本地 Skill 目录,一般也能手动放进去,但要自己确认触发方式是否一致。

aws-ses-best-practices 需要什么权限?

权限级别是需要联网。该 Skill 可能需要联网访问来源站点、仓库或外部 API;具体网络访问范围需要结合源码和 README 复核。

aws-ses-best-practices 是免费的吗?

来源标注的许可证是 MIT。本站不代收任何费用,也不托管安装包;能否商用、要不要署名,以许可证原文为准。

aws-ses-best-practices 用的人多吗?

公开数据是累计安装 376 次,近一周安装 16 次,下载 132 次,GitHub 1 星。这些数字来自第三方目录统计,只能当作热度参考,不代表质量或安全性。

aws-ses-best-practices 安全吗?

第三方扫描结果为通过,但这只覆盖已知的静态检查项,不能替代自己读一遍源码和安装命令。

值得选的地方和要先想清楚的地方

值得选的地方

  • 同时适配 4 种工具,换客户端不用重新找替代品。
  • 3 个目录同时收录,说明这个 Skill 流传比较广。
  • 许可证明确为 MIT,商用和分发边界好判断。
  • 第三方扫描已通过,常见的高风险行为没有命中。

先想清楚的地方

  • 第三方目录整理,版本更新和行为细节以来源仓库为准。

适不适合你

更适合

  • 已经在用 Codex,想直接扩展它能力的人。
  • 需要处理开发规范类任务、又不想每次都手写提示词的人。
  • 需要许可证清楚、并且有第三方扫描结果的团队项目。

不太适合

  • 需要厂商级技术支持和 SLA 的生产系统。

开发规范类 Skill 对比

6 个同类
Skill总安装GitHub 星权限许可证扫描
vercel-react-best-practices

Vercel React 最佳实践 · Codex、Claude

8,490,72025,918操作浏览器MIT通过
web-design-guidelines

网页设计指南 · Codex、Claude

6,686,01625,885需要联网MIT有提醒
remotion-best-practices

Remotion 最佳实践 · Codex、Claude

6,505,6323,027操作浏览器MIT有提醒
supabase-postgres-best-practices

Supabase Postgres 最佳实践 · Codex、Claude

3,175,5232,030需要联网MIT通过
next-best-practices

Next.js 最佳实践 · Codex、Claude

1,848,240841操作浏览器MIT通过
aws-ses-best-practices

AWS SES 最佳实践 · 本页

3761需要联网MIT通过

按安装量取同分类前几名;数字来自第三方目录统计,只作热度参考,不代表质量结论。

SKILL.md 原文

AWS SES Best Practices

Email deliverability, warming, compliance, and operational guidelines for AWS Simple Email Service.

Email Authentication

SPF (Sender Policy Framework)

Add to your domain's DNS:

v=spf1 include:amazonses.com ~all

For custom MAIL FROM domain:

# TXT record for mail.yourapp.com
v=spf1 include:amazonses.com ~all

DKIM (DomainKeys Identified Mail)

SES provides three CNAME records for DKIM. Add all three:

# Example (actual values from SES console)
selector1._domainkey.yourapp.com CNAME selector1.dkim.amazonses.com
selector2._domainkey.yourapp.com CNAME selector2.dkim.amazonses.com
selector3._domainkey.yourapp.com CNAME selector3.dkim.amazonses.com

DMARC (Domain-based Message Authentication)

Add TXT record to your domain:

# Start with monitoring mode
_dmarc.yourapp.com TXT "v=DMARC1; p=none; rua=mailto:dmarc@yourapp.com"

# After monitoring, move to quarantine
_dmarc.yourapp.com TXT "v=DMARC1; p=quarantine; rua=mailto:dmarc@yourapp.com"

# Production: reject unauthenticated emails
_dmarc.yourapp.com TXT "v=DMARC1; p=reject; rua=mailto:dmarc@yourapp.com"

Custom MAIL FROM Domain

Improves deliverability by using your domain instead of amazonses.com:

# MX record for mail.yourapp.com
mail.yourapp.com MX 10 feedback-smtp.us-east-1.amazonses.com

# SPF record for mail.yourapp.com
mail.yourapp.com TXT "v=spf1 include:amazonses.com ~all"

IP Warming

New SES accounts have limited sending reputation. Warm up gradually.

Warming Schedule

DayDaily VolumeNotes
1-2200Start small, monitor bounces
3-4500Check complaint rate
5-71,000Monitor reputation dashboard
8-145,000Steady increase
15-2110,000
22-3025,000
30+50,000+Scale as needed

Warming Best Practices

  1. Start with engaged users — Send to users who recently opened/clicked
  2. Prioritize transactional — Welcome emails, password resets have high engagement
  3. Avoid cold lists — Don't send to addresses that haven't engaged in 6+ months
  4. Monitor daily — Check bounce/complaint rates in SES dashboard
  5. Slow down if issues — If bounces > 5% or complaints > 0.1%, reduce volume

Bounce Handling

Types of Bounces

Hard Bounces (Permanent):

  • Invalid/non-existent email address
  • Domain doesn't exist
  • Action: Remove immediately, never send again

Soft Bounces (Temporary):

  • Mailbox full
  • Server temporarily unavailable
  • Action: Retry with exponential backoff, remove after 3-5 attempts

Transient Bounces:

  • Auto-responders
  • Challenge-response systems
  • Action: Generally ignore, don't count against reputation

Bounce Rate Thresholds

RateStatusAction
< 2%HealthyContinue normally
2-5%WarningInvestigate, clean list
5-10%CriticalStop sends, clean list aggressively
> 10%DangerSES may suspend account

Handling Bounces with Wraps

// Wraps CLI sets up automatic bounce handling via SNS → Lambda → DynamoDB
// Query bounced addresses:
import { DynamoDBClient, QueryCommand } from '@aws-sdk/client-dynamodb';

const client = new DynamoDBClient({});
const bounces = await client.send(new QueryCommand({
  TableName: 'wraps-email-events',
  KeyConditionExpression: 'pk = :pk',
  ExpressionAttributeValues: {
    ':pk': { S: 'BOUNCE#hard' },
  },
}));

Complaint Handling

Complaint Rate Thresholds

RateStatusAction
< 0.1%HealthyContinue normally
0.1-0.3%WarningReview content, add unsubscribe
0.3-0.5%CriticalPause marketing emails
> 0.5%DangerSES may suspend account

Reducing Complaints

  1. Clear unsubscribe — One-click unsubscribe in every email
  2. Set expectations — Tell users what/when you'll email during signup
  3. Honor preferences — Let users choose email types/frequency
  4. Clean lists — Remove unengaged users proactively
  5. Relevant content — Only send what users signed up for

List-Unsubscribe Header

Add to all marketing emails:

// With raw email or custom headers
const headers = {
  'List-Unsubscribe': '<mailto:unsubscribe@yourapp.com>, <https://yourapp.com/unsubscribe>',
  'List-Unsubscribe-Post': 'List-Unsubscribe=One-Click',
};

List Hygiene

Email Validation

Validate emails at signup:

// Basic format validation
const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;

// Check for common typos
const typoSuggestions: Record<string, string> = {
  'gmial.com': 'gmail.com',
  'gmal.com': 'gmail.com',
  'hotmal.com': 'hotmail.com',
  'yaho.com': 'yahoo.com',
};

// Use email verification service for important signups
// (e.g., ZeroBounce, NeverBounce, Hunter)

Engagement-Based Cleanup

Remove or suppress addresses based on engagement:

Last EngagementAction
< 30 daysActive, send normally
30-90 daysReduce frequency
90-180 daysRe-engagement campaign
180+ daysSuppress from regular sends
365+ daysRemove from list

Suppression Lists

Maintain lists of addresses to never email:

// Hard bounces - permanent suppression
// Complaints - permanent suppression
// Unsubscribes - honor indefinitely
// Role addresses - suppress (admin@, info@, support@)

Content Best Practices

Subject Lines

  • Keep it short — Under 50 characters
  • Be specific — Tell them what's inside
  • Avoid spam triggers — No ALL CAPS, excessive punctuation, "FREE!!!"
  • Personalize — Include name or relevant detail

Email Body

  1. Text version — Always include plain text alternative
  2. Image-to-text ratio — Keep images < 40% of content
  3. Hosted images — Use absolute URLs, not embedded images
  4. Alt text — Every image needs alt text
  5. Mobile-friendly — Single column, 600px max width
  6. Clear CTA — One primary call-to-action

Avoid Spam Triggers

Words to avoid:

  • FREE, WINNER, CONGRATULATIONS
  • Act now, Limited time, Urgent
  • $$, Make money, Cash bonus
  • Click here, Buy now

Formatting to avoid:

  • ALL CAPS
  • Excessive punctuation!!!
  • Red text
  • Large fonts
  • Invisible text (white on white)

Sending Patterns

Consistent Schedule

  • Send at consistent times (users learn to expect your emails)
  • Avoid sudden volume spikes (looks like spam)
  • Spread large sends over time (don't blast all at once)

Time Zone Awareness

// Send at optimal local time
const sendAtLocalTime = (email: string, preferredHour: number) => {
  const userTimezone = getUserTimezone(email); // from user preferences
  const now = new Date();
  const targetTime = new Date(now.toLocaleString('en-US', { timeZone: userTimezone }));
  targetTime.setHours(preferredHour, 0, 0, 0);

  if (targetTime < now) {
    targetTime.setDate(targetTime.getDate() + 1);
  }

  return targetTime;
};

Throttling for Large Lists

// Don't send 100k emails at once
const BATCH_SIZE = 1000;
const DELAY_BETWEEN_BATCHES_MS = 60000; // 1 minute

async function sendBulk(recipients: string[], template: string) {
  for (let i = 0; i < recipients.length; i += BATCH_SIZE) {
    const batch = recipients.slice(i, i + BATCH_SIZE);
    await email.sendBulkTemplate({
      from: 'hello@yourapp.com',
      template,
      destinations: batch.map(to => ({ to, templateData: {} })),
    });

    if (i + BATCH_SIZE < recipients.length) {
      await sleep(DELAY_BETWEEN_BATCHES_MS);
    }
  }
}

Monitoring & Alerts

Key Metrics to Track

MetricTargetAlert Threshold
Bounce Rate< 2%> 5%
Complaint Rate< 0.1%> 0.3%
Delivery Rate> 95%< 90%
Open Rate> 20%< 10%
Click Rate> 2%< 1%

CloudWatch Alarms

Wraps CLI sets up basic alarms. Add custom ones:

// High bounce rate alarm
const alarm = new cloudwatch.Alarm(this, 'HighBounceRate', {
  metric: new cloudwatch.Metric({
    namespace: 'AWS/SES',
    metricName: 'Bounce',
    statistic: 'Sum',
    period: Duration.hours(1),
  }),
  threshold: 50,
  evaluationPeriods: 1,
  comparisonOperator: cloudwatch.ComparisonOperator.GREATER_THAN_THRESHOLD,
});

SES Reputation Dashboard

Check regularly in AWS Console → SES → Reputation Metrics:

  • Account status (Healthy, Under review, Paused)
  • Bounce rate trend
  • Complaint rate trend

Compliance

CAN-SPAM (US)

  1. Accurate headers — From/reply-to must be accurate
  2. No deceptive subjects — Subject must reflect content
  3. Physical address — Include valid postal address
  4. Unsubscribe — Clear, working unsubscribe mechanism
  5. Honor opt-outs — Process within 10 business days

GDPR (EU)

  1. Consent — Clear, explicit opt-in for marketing
  2. Right to access — Provide data on request
  3. Right to erasure — Delete data on request
  4. Data portability — Export data in common format
  5. Lawful basis — Document why you're processing data

CASL (Canada)

  1. Express consent — Written/verbal permission required
  2. Implied consent — Limited (existing relationship, published email)
  3. Unsubscribe — Honor within 10 days
  4. Identification — Sender identity and contact info

Footer Template

<footer style="font-size: 12px; color: #666;">
  <p>
    You're receiving this email because you signed up at yourapp.com.
  </p>
  <p>
    <a href="{{unsubscribe_url}}">Unsubscribe</a> |
    <a href="{{preferences_url}}">Email Preferences</a>
  </p>
  <p>
    Your Company, Inc.<br>
    123 Main Street<br>
    City, State 12345
  </p>
</footer>

SES Limits & Quotas

Default Limits (Sandbox)

  • 200 emails/24 hours
  • 1 email/second
  • Can only send to verified addresses

Production Limits

  • Varies based on account history
  • Start at 50,000/day, 14/second
  • Request increases as needed

Requesting Limit Increase

  1. AWS Console → SES → Account Dashboard
  2. Click "Request Production Access" or "Request Limit Increase"
  3. Provide:

- Use case description - Expected volume - Bounce/complaint handling process - List collection method

Troubleshooting

"Email not delivered"

  1. Check SES console for bounces/complaints
  2. Verify recipient didn't unsubscribe
  3. Check spam folder
  4. Test with mail-tester.com

"High bounce rate"

  1. Validate email addresses at signup
  2. Remove old addresses (180+ days inactive)
  3. Use double opt-in
  4. Check for typos in bulk imports

"High complaint rate"

  1. Add clear unsubscribe link
  2. Review email content
  3. Reduce frequency
  4. Segment engaged vs unengaged users

"Emails going to spam"

  1. Verify SPF, DKIM, DMARC are set up
  2. Check content for spam triggers
  3. Warm up sending volume gradually
  4. Build engagement (opens/clicks improve reputation)

AWS CLI Diagnostics

Account Status

# Get sending quota and daily usage
aws ses get-send-quota

# Check if in sandbox (SESv2)
aws sesv2 get-account

# Account-level suppression settings
aws sesv2 get-account --query 'SuppressionAttributes'

Identity Verification

# List verified domains
aws ses list-identities --identity-type Domain

# List verified email addresses
aws ses list-identities --identity-type EmailAddress

# Check verification status for a domain
aws ses get-identity-verification-attributes \
  --identities yourapp.com

# Full identity details (SESv2)
aws sesv2 get-email-identity --email-identity yourapp.com

DKIM Status

# Check DKIM configuration
aws ses get-identity-dkim-attributes --identities yourapp.com

# SESv2 DKIM details
aws sesv2 get-email-identity --email-identity yourapp.com \
  --query 'DkimAttributes'

MAIL FROM Configuration

# Check custom MAIL FROM domain
aws ses get-identity-mail-from-domain-attributes \
  --identities yourapp.com

Configuration Sets

# List all configuration sets
aws sesv2 list-configuration-sets

# Get details for a configuration set
aws sesv2 get-configuration-set \
  --configuration-set-name my-config-set

# List event destinations
aws sesv2 get-configuration-set-event-destinations \
  --configuration-set-name my-config-set

Sending Statistics

# Basic send stats (last 2 weeks, 15-min intervals)
aws ses get-send-statistics

# CloudWatch metrics for sends
aws cloudwatch get-metric-statistics \
  --namespace AWS/SES \
  --metric-name Send \
  --start-time $(date -u -d '24 hours ago' +%Y-%m-%dT%H:%M:%SZ) \
  --end-time $(date -u +%Y-%m-%dT%H:%M:%SZ) \
  --period 3600 \
  --statistics Sum

Reputation Metrics

# Bounce rate (last 7 days)
aws cloudwatch get-metric-statistics \
  --namespace AWS/SES \
  --metric-name Reputation.BounceRate \
  --start-time $(date -u -d '7 days ago' +%Y-%m-%dT%H:%M:%SZ) \
  --end-time $(date -u +%Y-%m-%dT%H:%M:%SZ) \
  --period 86400 \
  --statistics Average

# Complaint rate (last 7 days)
aws cloudwatch get-metric-statistics \
  --namespace AWS/SES \
  --metric-name Reputation.ComplaintRate \
  --start-time $(date -u -d '7 days ago' +%Y-%m-%dT%H:%M:%SZ) \
  --end-time $(date -u +%Y-%m-%dT%H:%M:%SZ) \
  --period 86400 \
  --statistics Average

Suppression List

# List suppressed addresses
aws sesv2 list-suppressed-destinations

# Filter by reason
aws sesv2 list-suppressed-destinations --reasons BOUNCE
aws sesv2 list-suppressed-destinations --reasons COMPLAINT

# Check specific address
aws sesv2 get-suppressed-destination \
  --email-address user@example.com

# Remove from suppression list
aws sesv2 delete-suppressed-destination \
  --email-address user@example.com

# Add to suppression list
aws sesv2 put-suppressed-destination \
  --email-address user@example.com \
  --reason COMPLAINT

Test Sending

# Send test email
aws ses send-email \
  --from verified@yourapp.com \
  --to recipient@example.com \
  --subject "Test Email" \
  --text "This is a test email sent via AWS CLI."

# Verify email address (sandbox mode)
aws ses verify-email-identity --email-address test@example.com

DNS Verification (External)

# Check DKIM records
dig +short TXT selector1._domainkey.yourapp.com

# Check SPF record
dig +short TXT yourapp.com | grep spf

# Check DMARC record
dig +short TXT _dmarc.yourapp.com

# Check MX record (for custom MAIL FROM)
dig +short MX mail.yourapp.com

平台分布

OpenCode

31.79%
按下载量换算42

Cursor

21.39%
按下载量换算28

Claude Code

16.25%
按下载量换算21

Gemini CLI

14.25%
按下载量换算19

Codex

8.37%
按下载量换算11

goose

3.3%
按下载量换算4

安全审计

Gen Agent Trust Hub

通过

Socket

通过

Snyk

通过

权限和风险

需要联网

该 Skill 可能需要联网访问来源站点、仓库或外部 API;具体网络访问范围需要结合源码和 README 复核。

安装前确认

本站仅展示第三方公开信息,不托管安装包,不提供自动安装或运行环境。安装前应自行审查源码、依赖和命令行为。

继续浏览同类 Skills