You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将AWS SES验证邮件的链接替换为用户友好的按钮?

解决AWS SES自定义验证邮件链接转按钮的问题

核心原理

AWS SES自定义验证模板支持用{{VerifyLink}}变量自动注入验证链接,你只需要在HTML模板里把这个变量嵌入按钮的跳转属性中,再用内联CSS美化按钮即可——因为邮件客户端对外部CSS兼容性差,优先用内联样式。

步骤1:编写带按钮的HTML验证模板

直接将{{VerifyLink}}放到按钮的href属性里,示例代码如下:

<html>
<body style="font-family: Arial, sans-serif; padding: 20px;">
  <h3>请验证你的邮箱</h3>
  <p>点击下方按钮完成邮箱验证:</p>
  <a href="{{VerifyLink}}" style="display: inline-block; padding: 12px 24px; background-color: #2563eb; color: white; text-decoration: none; border-radius: 4px; font-size: 16px;">
    验证邮箱
  </a>
  <p>如果按钮无法点击,你也可以复制下方链接到浏览器打开:</p>
  <p>{{VerifyLink}}</p>
</body>
</html>

同时要准备纯文本版本(适配不支持HTML的邮件客户端):

请验证你的邮箱
点击链接完成验证:{{VerifyLink}}
如果链接无法点击,请复制到浏览器打开。

步骤2:用Java Spring Boot创建自定义验证模板

使用AWS SES Java SDK v2的SesClient创建模板,示例代码:

import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.ses.SesClient;
import software.amazon.awssdk.services.ses.model.CreateCustomVerificationEmailTemplateRequest;
import software.amazon.awssdk.services.ses.model.SesException;

@Component
public class SesTemplateService {

    private final SesClient sesClient;

    // 构造函数注入SesClient,Spring Boot会自动配置(前提是已配置AWS凭证)
    public SesTemplateService(SesClient sesClient) {
        this.sesClient = sesClient;
    }

    public void createVerificationTemplate() {
        try {
            CreateCustomVerificationEmailTemplateRequest request = CreateCustomVerificationEmailTemplateRequest.builder()
                    .templateName("UserEmailVerificationTemplate") // 自定义模板名称
                    .fromEmailAddress("noreply@your-verified-domain.com") // 已验证的发件邮箱/域名
                    .templateSubject("请验证你的邮箱")
                    .templateHtml("<html>...</html>") // 替换成步骤1的HTML内容
                    .templateText("请验证你的邮箱...") // 替换成步骤1的纯文本内容
                    .build();

            sesClient.createCustomVerificationEmailTemplate(request);
            System.out.println("自定义验证模板创建成功");
        } catch (SesException e) {
            System.err.println(e.awsErrorDetails().errorMessage());
            throw new RuntimeException("创建模板失败", e);
        }
    }
}

注意:fromEmailAddress必须是你已经在SES中验证过的邮箱或域名下的地址,否则会报错。

步骤3:触发自定义验证邮件

当用户提交邮箱后,调用SES接口发送自定义验证邮件,示例代码:

import software.amazon.awssdk.services.ses.model.SendCustomVerificationEmailRequest;

@Service
public class EmailVerificationService {

    private final SesClient sesClient;

    public EmailVerificationService(SesClient sesClient) {
        this.sesClient = sesClient;
    }

    public void sendVerificationEmail(String userEmail) {
        try {
            SendCustomVerificationEmailRequest request = SendCustomVerificationEmailRequest.builder()
                    .emailAddress(userEmail)
                    .templateName("UserEmailVerificationTemplate") // 对应步骤2创建的模板名称
                    .build();

            sesClient.sendCustomVerificationEmail(request);
            System.out.println("验证邮件已发送至:" + userEmail);
        } catch (SesException e) {
            System.err.println(e.awsErrorDetails().errorMessage());
            throw new RuntimeException("发送验证邮件失败", e);
        }
    }
}

关键注意事项

  • 内联CSS优先:邮件客户端(比如Outlook)对外部样式表支持很差,所有按钮样式都要写在style属性里。
  • 模板变量正确:必须用{{VerifyLink}},SES会自动替换成实际验证链接,不要手动拼接链接。
  • 验证发件身份:发件邮箱/域名必须提前在SES控制台或通过SDK验证,否则无法发送邮件。
  • 测试兼容性:发送测试邮件到不同邮箱客户端(Gmail、Outlook、QQ邮箱),确保按钮显示正常、链接可点击。

内容的提问来源于stack exchange,提问作者BlazinglyFast

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 15:10:16