javascript - 从 GmailMessage.getHeader() 访问重复的标题
问题描述
我正在尝试从我的附加组件中的消息中获取 Return-Path 标头。我能够获得该值,但是,标题中有多个 Return-Path 条目。getHeader 只返回最后一个。如何使用 getHeader 获取两个条目?
如果有帮助,下面是完整的代码。
function getContextualAddOn(event) {
var message = getCurrentMessage(event);
var card = createCard(message);
return [card.build()];
}
function myAction(e) {
toAddress = e["formInput"]["forwardTo"];
var message = getCurrentMessage(e);
GmailApp.sendEmail(toAddress, "SPAM", message.getRawContent());
}
/**
* Retrieves the current message given an action event object.
* @param {Event} event Action event object
* @return {Message}
*/
function getCurrentMessage(event) {
var accessToken = event.messageMetadata.accessToken;
var messageId = event.messageMetadata.messageId;
GmailApp.setCurrentMessageAccessToken(accessToken);
return GmailApp.getMessageById(messageId);
}
function createCard(message) {
var emailFrom = message.getHeader("Return-Path");
emailFrom = emailFrom.replace(/[<>]/g, "");
var card = CardService.newCardBuilder();
card.setHeader(CardService.newCardHeader().setTitle("Forward e-mail"));
var statusSection = CardService.newCardSection();
statusSection.addWidget(CardService.newTextParagraph()
.setText("<b>Sender: </b>" + emailFrom ));
card.addSection(statusSection);
var formArea = CardService.newCardSection();
var widget = CardService.newTextInput()
.setFieldName("forwardTo")
.setTitle("To:");
formArea.addWidget(widget);
var button = CardService.newTextButton()
.setText("Submit")
.setOnClickAction(CardService.newAction().setFunctionName("myAction"));
var buttons = CardService.newButtonSet()
.addButton(button);
formArea.addWidget(buttons);
card.addSection(formArea);
return card;
}
解决方案
在这种情况下,我认为需要Return-Path
从电子邮件的原始内容中检索带有标题的值。为了实现这一点,下面的修改如何?
使用 V8 运行时:
在这种情况下,请在脚本编辑器中启用 V8。
从:
function createCard(message) {
var emailFrom = message.getHeader("Return-Path");
至:
function createCard(message) {
// var emailFrom = message.getHeader("Return-Path");
const res = [...message.getRawContent().matchAll(/Return-Path:([\w\s\S].+)/g)].map(([,e]) => e.trim());
- 在此修改中,
res
是一个包含标头值的数组Return-Path
。当 2 个Return-Path
标头包含在 中时message
,这些标头包含在res
.
没有 V8 运行时:
在这种情况下,您可以使用没有 V8 的脚本。
从:
function createCard(message) {
var emailFrom = message.getHeader("Return-Path");
至:
function createCard(message) {
// var emailFrom = message.getHeader("Return-Path");
const res = message.getRawContent().match(/Return-Path:[\w\s\S].+/g).map(function(e) {return e.replace("Return-Path:", "").trim()});
- 结果与上面的脚本相同。
参考:
推荐阅读
- blockchain - 使用 Solidity 中的 hexdata 从已部署的合约 abc 调用已部署的合约 xyz 公共应付款功能
- c# - C# 链表对值进行排序并将 int 插入正确的位置
- javascript - 等待一次提取完成,然后再开始下一次提取
- angular - Angular 5.x 页面加载或模块本身的初始化需要更长的时间
- php - 使用一个 SQL 字符串的行数
- python - COLAB 错误:命令出错,退出状态为 1:python setup.py egg_info 检查日志以获取完整的命令输出
- android - React-native 无法编译运行
- sql - 验证只存在一个值
- ios - XCTest 无法读取启动参数
- javascript - 如何使用不同的方法从 Parse 平台“表”中获取所有“列”,例如 SQL 上的 GROUP BY