有一种方法可以发送除Cognito用户池中“消息自定义”标签中指定的电子邮件之外的其他电子邮件吗? 我想根据一些参数使用不同的电子邮件。
E.g。
verification@my-service.com用于验证电子邮件
welcome@my-service.com欢迎电子邮件
答案 0 :(得分:2)
您可以转到Cognito中的常规设置,然后点击触发器。在那里,您可以选择Post Confirmation lambda函数(节点中的此示例)来发送电子邮件。在lambda函数中,您可以根据自己的喜好制作主题,并从电子邮件地址进行更改。
var aws = require('aws-sdk');
var ses = new aws.SES();
exports.handler = function(event, context) {
console.log(event);
if (event.request.userAttributes.email) {
// Pull another attribute if you want
sendEmail(event.request.userAttributes.email,
"Congratulations "+event.userName+", you have been registered!"
, function(status) {
context.done(null, event);
});
} else {
// Nothing to do, the user's email ID is unknown
console.log("Failed");
context.done(null, event);
}
};
function sendEmail(to, body, completedCallback) {
var eParams = {
Destination: {
ToAddresses: [to]
},
Message: {
Body: {
Text: {
Data: body
}
},
Subject: {
Data: "Welcome to My Service!"
}
},
Source: "welcome@my-service.com"
};
var email = ses.sendEmail(eParams, function(err, data){
if (err) {
console.log(err);
} else {
console.log("===EMAIL SENT===");
}
completedCallback('Email sent');
});
console.log("EMAIL CODE END");
};
您还必须设置SES。
答案 1 :(得分:1)
如果您想自己处理所有电子邮件,您可以使用 CustomEmailSender
Lambda 指定此项。此触发器当前无法通过 AWS 控制台使用,但您可以使用 CLI 或 CDK/CloudFormation 指定它。请参阅文档 here。
虽然这些文档非常糟糕。要点是,您将获得有关该事件的 code
属性,这是一个 base64 编码的 blob,使用您在用户池中指定的 KMS 密钥进行加密。根据触发事件,这是 Cognito 生成的验证码、临时密码等。这是我的 Lambda 的简化版本:
import { buildClient, CommitmentPolicy, KmsKeyringNode } from '@aws-crypto/client-node';
const { decrypt } = buildClient(CommitmentPolicy.REQUIRE_ENCRYPT_ALLOW_DECRYPT);
const kmsKeyring = new KmsKeyringNode({
keyIds: [process.env.COGNITO_EMAILER_KEY_ARN]
});
export async function lambdaHandler(event, context) {
try {
let payload = '';
if (event.request.code) {
const { plaintext, messageHeader } = await decrypt(
kmsKeyring,
Buffer.from(event.request.code, "base64")
);
if (event.userPoolId !== messageHeader.encryptionContext["userpool-id"]) {
console.error("Encryption context does not match expected values!");
return;
}
payload = plaintext.toString();
}
let messageHtml = "";
switch (event.triggerSource) {
case "CustomEmailSender_SignUp": {
const verificationCode = payload;
messageHtml = `<p>Use this code to verify your email: ${verificationCode}</p>`;
break;
}
case "CustomEmailSender_AdminCreateUser":
case "CustomEmailSender_ResendCode": {
const tempPassword = payload;
messageHtml = `<p>Your temporary password is ${tempPassword}</p>`;
break;
}
default: {
console.warn("unhandled trigger:", event.triggerSource);
return;
}
}
await sendEmail({
subject: "Automated message",
to: event.request.userAttributes.email,
messageHtml,
});
return true;
} catch (err) {
console.error(err.message);
process.exit(1);
}
}