使用Amazon SES发送邮件时,调用SendEmailRequest出现收件人地址异常
问题原因与解决方案
这不是Amazon SES的故障,问题出在你复用了同一个Destination对象实例。
AWS SDK的withToAddresses()方法是在原对象上修改并返回自身,而非创建全新的Destination对象。如果你的destination变量是被多次复用的实例:
- 第一次调用
destination.withToAddresses(janeDoe@gmail.com)时,对象的收件人列表会被设置为包含jane的邮箱; - 第二次调用
destination.withToAddresses(jamesSmith@gmail.com)时,SDK会把james的邮箱追加到已有的收件人列表中,而非替换原有内容,最终导致第二封邮件的收件人同时包含两个邮箱。
修复方法
每次发送邮件时,创建全新的Destination实例,不要复用旧对象:
sendEmailRequest .withDestination( new Destination().withToAddresses(to)) // 每次创建新的Destination对象 .withMessage(message .withBody(body .withHtml(new Content() .withCharset("UTF-8").withData(htmlBody)) .withText(new Content() .withCharset("UTF-8").withData(textBody))) .withSubject(new Content() .withCharset("UTF-8").withData(subject))) .withSource(from); amazonSimpleEmailServiceClient.sendEmail(sendEmailRequest);
另外需要注意:AWS SDK的大部分withXxx()方法都是修改原对象并返回,而非创建新对象,如果你复用message、body这类对象,也可能出现类似的配置残留问题。
内容的提问来源于stack exchange,提问作者chid00
相关产品推荐
相关产品推荐

