使用双查询字符串在地址栏中发送邮件

我有一个非常简单的 Node.js 视频聊天,我用它来给我的朋友打电话。我希望它直接与邮件交互(打开已加载模板的邮件)。到目前为止我有这个:


let obsPass = /* helpers.generateObsPassword() < randomly generated char */ 'zH1mA4pR2hF7wJ5'

var text = location.href + '&obs=' + obsPass;

window.open(`mailto:?subject=Join%20meeting&body=${text}`);

有用!这封邮件的正文应该是https://example.com?room=myroom&obs=zH1mA4pR2hF7wJ5,但是,当我用它打开邮件时,正文没有说https://example.com?room=myroom&obs=zH1mA4pR2hF7wJ5,它说https://example.com?room=myroom。我认为这与我拥有的双查询字符串(mailto:? 和 example.com?)有关,这导致浏览器认为该字符串&obs=zH1mA4pR2hF7wJ5正在应用于更大的“网站”,mailto:。


有解决办法吗?我可以手动发送电子邮件,但我希望将其集成到我的网站中。谢谢!


冉冉说
浏览 118回答 1
1回答

12345678_0001

您需要在消息正文中对 URL 进行编码。而不是写作window.open(`mailto:?subject=Join%20meeting&body=${text}`);写window.open(`mailto:?subject=Join%20meeting&body=${encodeURIComponent(text)}`);如果没有这个,你的mailto:URL 最终将是mailto:?subject=Join%20meeting&body=https://example.com?room=myroom&obs=zH1mA4pR2hF7wJ5在 URL 查询字符串中,&表示一个参数值的结束和下一个参数的开始。因此,该mailto:URL 在查询字符串中具有subject、body和三个参数,参数obs值为。bodyhttps://example.com?room=myroom如果您希望&后面的字符myroom成为 值的一部分body,那么您需要对其进行编码。对它进行编码可以防止邮件程序中的 URL 解析器将其解释为 URL 中参数之一的结尾mailto:。body然后,您的邮件程序应该对从 URL参数中提取的值进行解码,mailto:然后再将其放入电子邮件的消息正文中。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript