如何使用AWS SDK发送包含发件人名称的邮件?
如何通过AWS SDK发送包含发件人名称的邮件?
其实解决这个问题非常简单——AWS SES的SendEmailRequest支持直接传入**「发件人名称 <邮箱地址>」**格式的字符串作为发件人参数,收件方的邮件客户端会自动解析这个格式,显示对应的发件人名称而非纯邮箱地址。
具体修改方式:
你只需要把原本传入from参数的纯邮箱地址,替换成「名称 + 邮箱」组合的格式即可。
方式1:直接在调用时传入组合后的字符串
如果你的发件人名称固定,可以直接在调用方法时传入组合好的字符串:
// 调用示例:格式为「显示名称 <邮箱地址>」 sendMail("我的网站服务 <noreply@domain.com>", "user@example.com", "账户激活通知", "<h3>请点击链接完成激活</h3>");
方式2:修改方法参数,拆分名称和邮箱(更灵活)
如果需要动态切换发件人名称,可以新增参数拆分名称和邮箱,在方法内部组合成标准格式:
public void sendMail(String senderName, String senderEmail, String to, String subject, String htmlBody) { // 组合成符合邮件协议的发件人格式 String from = String.format("%s <%s>", senderName, senderEmail); LOGGER.info(String.format("Sending Mail from: %s, to: %s, with subject: %s", from, to, subject)); try { AWSCredentials credentials = new BasicAWSCredentials(awsAccessKey, awsSecret); AmazonSimpleEmailService client = AmazonSimpleEmailServiceClientBuilder.standard() .withRegion(Regions.AP_SOUTH_1) .withCredentials(new AWSStaticCredentialsProvider(credentials)) .build(); SendEmailRequest request = new SendEmailRequest() .withDestination(new Destination().withToAddresses(to)) .withMessage(new Message() .withBody(new Body().withHtml(new Content().withCharset("UTF-8").withData(htmlBody))) .withSubject(new Content().withCharset("UTF-8").withData(subject))) .withSource(from); // 使用组合后的发件人信息 client.sendEmail(request); } catch (Exception e) { LOGGER.error(String.format("Error while sending email: %s", e.getMessage())); throw new IllegalArgumentException(MessageEnum.FAILED_TO_SEND_AN_EMAIL.name()); } }
额外注意:
- 这种格式完全符合邮件协议的RFC标准,不需要对中文、空格或特殊字符额外编码,SES会自动处理。
- 确保你用来发送邮件的邮箱(比如
noreply@domain.com)已经在AWS SES中完成验证,避免邮件被拒收或进入垃圾箱。
内容的提问来源于stack exchange,提问作者Keshavram Kuduwa
相关产品推荐
相关产品推荐

