使用 Google Apps 脚本时使用查询参数保护 URL
Protecting a URL with a Query Parameter when Using Google Apps Script
我真的很难发送一封自动电子邮件(使用 Google Apps 脚本),其中包含一个包含查询参数的 URL。
预期行为
Google Apps 脚本(具体来说,Gmail
服务)发送一封电子邮件,部分电子邮件正文包含带有查询参数的 URL。 URL 看起来像这样:
http://my.app/products?id=Bz9n7PJLg8hufTj11gMF
观察到的行为
Gmail
服务似乎从我的 URL 中删除了 =
。所以,电子邮件的正文最终看起来像这样:
...
http://my.app/products?idBz9n7PJLg8hufTj11gMF
...
显然,link 行不通。
我在这里检查了其他关于 SO 的问题,我尝试使用 GAS Utilities 服务中的 base encoding 工具,以及使用 encodeURI()
JavaScript 方法。到目前为止没有运气。
邮件发送码
//////// GENERATING MESSAGE FROM ID ////////////
// Gets message from ID
var id = Gmail.Users.Drafts.get('me', 'r-1006091711303067868').message.id
var message = GmailApp.getMessageById(id)
var template = message.getRawContent()
// Replaces template variables with custom ones for the user using RegExes
let listingUrl = 'http://my.app/products?id=xyz'
let creatorEmail = 'hello@gmail.com'
let creatorUsername = 'Sam'
template = template.replace(/templates@my.app/g, creatorEmail)
template = template.replace(/firstName/g, creatorUsername)
//** Below is the string that gets modified and broken **//
template = template.replace(/listingUrl/g, listingUrl)
// Creates the new message
var message = Gmail.newMessage()
var encodedMsg = Utilities.base64EncodeWebSafe(template)
message.raw = encodedMsg
// Sends it
Gmail.Users.Messages.send(message, "me", Utilities.newBlob(template, "message/rfc822"))
Regex-based 解决方案
在 and 的帮助下,最终对我有用的解决方案是使用 .replace()
将 =
替换为 =
,如下所示:
listingUrl = listingUrl.replace(/=/, '=')
我真的很难发送一封自动电子邮件(使用 Google Apps 脚本),其中包含一个包含查询参数的 URL。
预期行为
Google Apps 脚本(具体来说,Gmail
服务)发送一封电子邮件,部分电子邮件正文包含带有查询参数的 URL。 URL 看起来像这样:
http://my.app/products?id=Bz9n7PJLg8hufTj11gMF
观察到的行为
Gmail
服务似乎从我的 URL 中删除了 =
。所以,电子邮件的正文最终看起来像这样:
...
http://my.app/products?idBz9n7PJLg8hufTj11gMF
...
显然,link 行不通。
我在这里检查了其他关于 SO 的问题,我尝试使用 GAS Utilities 服务中的 base encoding 工具,以及使用 encodeURI()
JavaScript 方法。到目前为止没有运气。
邮件发送码
//////// GENERATING MESSAGE FROM ID ////////////
// Gets message from ID
var id = Gmail.Users.Drafts.get('me', 'r-1006091711303067868').message.id
var message = GmailApp.getMessageById(id)
var template = message.getRawContent()
// Replaces template variables with custom ones for the user using RegExes
let listingUrl = 'http://my.app/products?id=xyz'
let creatorEmail = 'hello@gmail.com'
let creatorUsername = 'Sam'
template = template.replace(/templates@my.app/g, creatorEmail)
template = template.replace(/firstName/g, creatorUsername)
//** Below is the string that gets modified and broken **//
template = template.replace(/listingUrl/g, listingUrl)
// Creates the new message
var message = Gmail.newMessage()
var encodedMsg = Utilities.base64EncodeWebSafe(template)
message.raw = encodedMsg
// Sends it
Gmail.Users.Messages.send(message, "me", Utilities.newBlob(template, "message/rfc822"))
Regex-based 解决方案
在 .replace()
将 =
替换为 =
,如下所示:
listingUrl = listingUrl.replace(/=/, '=')