【发布时间】:2023-03-13 11:18:02
【问题描述】:
我是后端开发人员(Spring boot),DevOps 团队希望我实现 AWS 的 SES 和 SNS 服务,但不使用凭证,因为它们与 IAM 角色在 aws 中存储相同的凭证,因此他们希望我通过仅在代码中托管并将凭据部分留空,它将向特定收件人发送电子邮件。(根据他们的关注)
正如他们所说,我确实尝试在 java 中使用空凭据,但没有成功,它说身份验证无效
我不知道如何,但他们确实使用 PHP SDK 实现了同样的事情,他们将凭证部分留空,并且它适用于 IAM 角色凭证
这是我的代码 我将凭证部分留空的地方
private boolean sendAwsMail() {
String result = null;
boolean flag = true;
try {
Properties props = System.getProperties();
props.put("mail.transport.protocol", varMap.get("protocol"));
props.put("mail.smtp.port", Integer.parseInt(varMap.get("port")));
props.put("mail.smtp.starttls.enable", "true");
props.put("mail.smtp.auth", "true");
Session session = Session.getDefaultInstance(props);
MimeMessage msg = new MimeMessage(session);
msg.setFrom(new InternetAddress("no-reply@lottoweaver.com", "lottoweaver.com"));
msg.setRecipient(Message.RecipientType.TO, new InternetAddress(varMap.get("destinationMailId")));
msg.setSubject(varMap.get("subject"));
msg.setContent(varMap.get("content"), "text/html");
Transport transport = session.getTransport();
transport.connect("email-smtp.us-west-2.amazonaws.com", "", "");
transport.sendMessage(msg, msg.getAllRecipients());
AppLogger.writeLog("INFO", "MAIL_SEND", "send_mail", this.getClass().getName(),
Thread.currentThread().getStackTrace()[1].getMethodName(),
"toMailId:" + varMap.get("destinationMailId"), "subject:" + varMap.get("subject"), "", "", null,
null, "");
result = varMap.get("content");
transport.close();
} catch (Exception ex) {
AppLogger.writeLog("WARNING", "Issue_In_Connection", "send_mail", this.getClass().getName(),
Thread.currentThread().getStackTrace()[1].getMethodName(),
"toMailId:" + varMap.get("destinationMailId"), "subject:" + varMap.get("subject"), "", "", null, ex,
"");
flag = false;
result = ex.toString();
} finally {
this.flag = flag;
dumpList.add(new MessageDataDump(varMap.get("destinationMailId"), result, varMap, "AWS-EMAIL"));
return flag;
}
}
我替换了msg.setFrom(new InternetAddress(varMap.get("fromEmail"), varMap.get("fromName")));
msg.setFrom(new InternetAddress("no-reply@lottoweaver.com", "lottoweaver.com"));
并且还将 transport.connect(varMap.get("HOST"), varMap.get("SMTP_USERNAME"), varMap.get("SMTP_PASSWORD")); 的 credentail 部分替换为 transport.connect("email-smtp.us-west-2.amazonaws.com", "", "");
请指出一个正确的方法来实现这一点。
提前致谢
【问题讨论】:
-
请参考以下链接,使用实例角色AWS SDK; stackoverflow.com/questions/31757288/…
标签: java amazon-web-services spring-boot amazon-ses