[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6EEE7C0DA7K5711Y9TMQ6FJ":3,"skill-same:01M6EEE7C0DA7K5711Y9TMQ6FJ":53},{"skillNo":4,"name":5,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":17,"publishedAt":20,"linkOnly":21,"markdownContent":22,"markdownBody":22,"frontMatter":23,"refName":24,"commitSha":25,"skillDirectory":26,"forksCount":27,"repositoryHtmlUrl":28,"repositoryHomepageUrl":29,"ownerHtmlUrl":30,"ownerBlogUrl":6,"ownerDescription":31,"updatedAt":32,"install":33,"resources":46},"01M6EEE7C0DA7K5711Y9TMQ6FJ","aws-ses",null,"ComeOnOliver\u002Fskillshub","ComeOnOliver","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F43215937?v=4","01M6E5JNFECJAAVFE0W7SMWWD2","Haoran Shu","01M6E5JNNDQS7AJZDYFQ8TPZCK",67,"MIT","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002FTerminalSkills\u002Fskills\u002Faws-ses\u002FSKILL.md",[],[18,19],"aws","aws ses","2026-11-10 10:12:30",false,"# AWS SES\n\nAmazon Simple Email Service (SES) is a cost-effective email platform for sending transactional, marketing, and notification emails. It also receives incoming email and integrates with S3, SNS, and Lambda for processing.\n\n## Core Concepts\n\n- **Verified Identity** — domain or email address authorized to send\n- **Configuration Set** — tracking settings for opens, clicks, bounces\n- **Template** — reusable email template with variable substitution\n- **Receipt Rule** — rules for processing incoming emails\n- **Suppression List** — addresses that bounced or complained\n- **Sending Quota** — rate limits based on account reputation\n\n## Domain Verification\n\n```bash\n# Verify a domain (creates DKIM records)\naws sesv2 create-email-identity --email-identity example.com\n```\n\n```bash\n# Get DKIM tokens to add as DNS CNAME records\naws sesv2 get-email-identity --email-identity example.com \\\n  --query 'DkimAttributes.Tokens'\n```\n\n```bash\n# Verify a single email address (for testing)\naws sesv2 create-email-identity --email-identity test@example.com\n```\n\n```bash\n# List verified identities\naws sesv2 list-email-identities --query 'EmailIdentities[].IdentityName'\n```\n\n## Sending Email\n\n```bash\n# Send a simple email\naws sesv2 send-email \\\n  --from-email-address \"noreply@example.com\" \\\n  --destination '{\"ToAddresses\":[\"user@example.com\"]}' \\\n  --content '{\n    \"Simple\": {\n      \"Subject\": {\"Data\": \"Order Confirmation #12345\"},\n      \"Body\": {\n        \"Html\": {\"Data\": \"\u003Ch1>Thank you!\u003C\u002Fh1>\u003Cp>Your order has been confirmed.\u003C\u002Fp>\"},\n        \"Text\": {\"Data\": \"Thank you! Your order has been confirmed.\"}\n      }\n    }\n  }' \\\n  --configuration-set-name prod-tracking\n```\n\n```python\n# Send email with boto3\nimport boto3\n\nses = boto3.client('sesv2')\n\nses.send_email(\n    FromEmailAddress='noreply@example.com',\n    Destination={\n        'ToAddresses': ['user@example.com'],\n        'BccAddresses': ['archive@example.com']\n    },\n    Content={\n        'Simple': {\n            'Subject': {'Data': 'Your Invoice'},\n            'Body': {\n                'Html': {'Data': '\u003Ch1>Invoice #INV-001\u003C\u002Fh1>\u003Cp>Amount: $99.99\u003C\u002Fp>'},\n                'Text': {'Data': 'Invoice #INV-001\\nAmount: $99.99'}\n            }\n        }\n    },\n    ConfigurationSetName='prod-tracking'\n)\n```\n\n## Email Templates\n\n```bash\n# Create a template\naws sesv2 create-email-template \\\n  --template-name order-confirmation \\\n  --template-content '{\n    \"Subject\": \"Order Confirmation #{{orderNumber}}\",\n    \"Html\": \"\u003Ch1>Hi {{customerName}},\u003C\u002Fh1>\u003Cp>Your order #{{orderNumber}} for {{itemName}} has been confirmed.\u003C\u002Fp>\u003Cp>Total: ${{total}}\u003C\u002Fp>\",\n    \"Text\": \"Hi {{customerName}},\\nYour order #{{orderNumber}} for {{itemName}} has been confirmed.\\nTotal: ${{total}}\"\n  }'\n```\n\n```bash\n# Send using a template\naws sesv2 send-email \\\n  --from-email-address \"orders@example.com\" \\\n  --destination '{\"ToAddresses\":[\"user@example.com\"]}' \\\n  --content '{\n    \"Template\": {\n      \"TemplateName\": \"order-confirmation\",\n      \"TemplateData\": \"{\\\"orderNumber\\\":\\\"12345\\\",\\\"customerName\\\":\\\"Alice\\\",\\\"itemName\\\":\\\"Widget Pro\\\",\\\"total\\\":\\\"99.99\\\"}\"\n    }\n  }'\n```\n\n```python\n# Bulk templated sending with boto3\nimport boto3\n\nses = boto3.client('sesv2')\n\nses.send_bulk_email(\n    FromEmailAddress='marketing@example.com',\n    DefaultContent={\n        'Template': {\n            'TemplateName': 'weekly-newsletter',\n            'TemplateData': '{\"week\":\"Jan 15\"}'\n        }\n    },\n    BulkEmailEntries=[\n        {\n            'Destination': {'ToAddresses': ['alice@example.com']},\n            'ReplacementEmailContent': {\n                'ReplacementTemplate': {\n                    'ReplacementTemplateData': '{\"name\":\"Alice\",\"recommendations\":\"Widget A, Widget B\"}'\n                }\n            }\n        },\n        {\n            'Destination': {'ToAddresses': ['bob@example.com']},\n            'ReplacementEmailContent': {\n                'ReplacementTemplate': {\n                    'ReplacementTemplateData': '{\"name\":\"Bob\",\"recommendations\":\"Gadget X, Gadget Y\"}'\n                }\n            }\n        }\n    ],\n    ConfigurationSetName='marketing-tracking'\n)\n```\n\n## Bounce and Complaint Handling\n\n```bash\n# Create a configuration set with event destinations\naws sesv2 create-configuration-set --configuration-set-name prod-tracking\n\n# Add SNS destination for bounces and complaints\naws sesv2 create-configuration-set-event-destination \\\n  --configuration-set-name prod-tracking \\\n  --event-destination-name bounce-handler \\\n  --event-destination '{\n    \"Enabled\": true,\n    \"MatchingEventTypes\": [\"BOUNCE\", \"COMPLAINT\"],\n    \"SnsDestination\": {\n      \"TopicArn\": \"arn:aws:sns:us-east-1:123456789:ses-bounces\"\n    }\n  }'\n```\n\n```python\n# Lambda handler for bounce\u002Fcomplaint SNS notifications\nimport json\n\ndef handler(event, context):\n    for record in event['Records']:\n        message = json.loads(record['Sns']['Message'])\n        notification_type = message['notificationType']\n\n        if notification_type == 'Bounce':\n            bounce = message['bounce']\n            for recipient in bounce['bouncedRecipients']:\n                email = recipient['emailAddress']\n                bounce_type = bounce['bounceType']  # Permanent or Transient\n                if bounce_type == 'Permanent':\n                    suppress_email(email)\n\n        elif notification_type == 'Complaint':\n            complaint = message['complaint']\n            for recipient in complaint['complainedRecipients']:\n                unsubscribe_email(recipient['emailAddress'])\n```\n\n## Receiving Email\n\n```bash\n# Create a receipt rule set\naws ses create-receipt-rule-set --rule-set-name inbound-rules\naws ses set-active-receipt-rule-set --rule-set-name inbound-rules\n```\n\n```bash\n# Create rule to store incoming email in S3 and trigger Lambda\naws ses create-receipt-rule \\\n  --rule-set-name inbound-rules \\\n  --rule '{\n    \"Name\": \"process-support-emails\",\n    \"Enabled\": true,\n    \"Recipients\": [\"support@example.com\"],\n    \"Actions\": [\n      {\"S3Action\": {\"BucketName\": \"incoming-email\", \"ObjectKeyPrefix\": \"support\u002F\"}},\n      {\"LambdaAction\": {\"FunctionArn\": \"arn:aws:lambda:us-east-1:123456789:function:process-support-email\"}}\n    ]\n  }'\n```\n\n## Monitoring\n\n```bash\n# Check sending quota and statistics\naws sesv2 get-account --query '{SendQuota:SendQuota,SendingEnabled:SendingEnabled}'\n```\n\n```bash\n# Get sending statistics\naws ses get-send-statistics --query 'SendDataPoints[-5:]'\n```\n\n## Best Practices\n\n- Always verify domains with DKIM for better deliverability\n- Set up bounce and complaint handling before sending at scale\n- Use configuration sets to track delivery metrics\n- Send from a subdomain (mail.example.com) to protect main domain reputation\n- Include unsubscribe headers in marketing emails (required by law)\n- Warm up new accounts gradually — start with small volumes\n- Use the suppression list API to respect bounces and complaints\n- Test with the SES mailbox simulator before going to production\n",{},"main","def8531e65114c0fca8fb8551c1871ee0eed705c","skills\u002FTerminalSkills\u002Fskills\u002Faws-ses",24,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub","https:\u002F\u002Fskillshub.wtf","https:\u002F\u002Fgithub.com\u002FComeOnOliver","AI & Blockchain Engineer\r\n","2026-06-24 22:07:19",{"source":7,"skillName":5,"commands":34,"prompt":44,"zipAvailable":45},[35,38,41],{"tool":36,"command":37},"npx","npx skills add ComeOnOliver\u002Fskillshub --skill aws-ses",{"tool":39,"command":40},"bunx","bunx skills add ComeOnOliver\u002Fskillshub --skill aws-ses",{"tool":42,"command":43},"pnpm","pnpm dlx skills add ComeOnOliver\u002Fskillshub --skill aws-ses","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002FTerminalSkills\u002Fskills\u002Faws-ses\u002FSKILL.md",true,[47],{"path":48,"resourceType":49,"resourceTypeDesc":50,"sizeBytes":51,"sourceHtmlUrl":52},"customize.toml","OTHER","其他",1718,"https:\u002F\u002Fgithub.com\u002FdevelopAgent\u002Fbmad-start\u002Fblob\u002Fmain\u002F.pi\u002Fskills\u002Fbmad-cis-agent-innovation-strategist\u002Fcustomize.toml",[54,68,78,87,93,100],{"skillNo":55,"name":56,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":57,"categories":58,"keywords":64,"publishedAt":20},"01M6FKJN13GMG4KY57J3QD8GY5","model-hierarchy-skill","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzscole\u002Fmodel-hierarchy-skill\u002Fmodel-hierarchy-skill\u002FSKILL.md",[59],{"categoryNo":60,"categoryName":61,"taxonomyType":62,"taxonomyTypeDesc":63},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[65,66,67],"model","model hierarchy","model hierarchy skill",{"skillNo":69,"name":70,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":71,"categories":72,"keywords":74,"publishedAt":20},"01M6FKJJJ6GCAMR4PPPRD12M5X","zoom-mcp","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-mcp\u002FSKILL.md",[73],{"categoryNo":60,"categoryName":61,"taxonomyType":62,"taxonomyTypeDesc":63},[75,76,77],"MCP","zoom","zoom mcp",{"skillNo":79,"name":80,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":81,"categories":82,"keywords":83,"publishedAt":20},"01M6FKJE3KYT3KPEZMEEHYKA6K","zoom-apps-sdk","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-apps-sdk\u002FSKILL.md",[],[84,85,86,76],"sdk","zoom apps sdk","apps",{"skillNo":88,"name":89,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":90,"categories":91,"keywords":92,"publishedAt":20},"01M6FKJ9EDH9Q5VWDF8HAJRSP0","windows","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwindows\u002FSKILL.md",[],[89],{"skillNo":94,"name":95,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":96,"categories":97,"keywords":99,"publishedAt":20},"01M6FKJ666BEEFC3AE9GJ72Q93","whiteboard","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwhiteboard\u002FSKILL.md",[98],{"categoryNo":60,"categoryName":61,"taxonomyType":62,"taxonomyTypeDesc":63},[95],{"skillNo":101,"name":102,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":103,"categories":104,"keywords":105,"publishedAt":20},"01M6FKJ21WFCDGTJQ2Q91T9DVW","websockets","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwebsockets\u002FSKILL.md",[],[102]]