我在Node.js Lambda函数中使用AWS.SES(简单电子邮件服务)工具包。
我可以很好地发送电子邮件,但是如果我尝试在电子邮件中包含一个简单的超链接,则它仅显示纯文本而不是可单击的超链接。
这是我用来发送电子邮件的代码。
function sendVerificationEmail(userinfo, vKey, after) {
var params = {
Destination: {
ToAddresses: [userinfo.email]
},
Message: {
Body: {
Html: {
Charset: "UTF-8",
Data: "<html><body>Hey " + userinfo.name + ", <a href='https://s3.amazonaws.com/xxxx/xxxx.html?v=" + vKey + "'>Click here to validate this email address.</a></body></html>"
},
Text: {
Charset: "UTF-8",
Data: "Hey " + userinfo.name + ",\n\nOpen this link in your web browser to validate this email address:\nhttps://s3.amazonaws.com/xxxx/xxxx.html?v=" + vKey
}
},
Subject: { Data: "Scheduler - Verify Your Email Address" }
},
Source: "xxxx@gmail.com"
};
ses.sendEmail(params, function(err, data) {
after(err, data);
});
}
正如您在HTML中看到的那样,我包含了一个<a>
标记。但是,该链接在电子邮件中显示为不可点击的纯文本。
编辑:Gmail的“显示原始”功能显示以下内容:
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 7bit
Hey TestName,
Open this link in your web browser to validate this email address:
https://s3.amazonaws.com/xxxx/xxxx.html?v=xxxxxxxxxxxxxxxxxxxxxxxxxxxx
---------------------------------------------------
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: 7bit
<html><body>Hey TestName, <a href='https://s3.amazonaws.com/xxxx/xxxx.html?v=xxxxxxxxxxxxx'>Click here to validate this email address.</a></body></html>
答案 0 :(得分:0)
如果您观察原始电子邮件内容,您会发现它错过了 =
之间的 href=<link>
符号。这是因为 '=' 符号在 smtp 协议消息中用作换行符(我认为)。
无论如何,解决这个问题的方法是为“=”符号添加 unicode,即 U+003D
试试这个:-
<a href=3D"${link}">${text}</a>
=3D
被解释为 =
符号并且内容编码正确完成。