javascript - 有没有办法用我自己的域名而不是 Gmail 邮件合并
问题描述
在这里我想做的是:
- 通过在 App Script 中编写脚本,通过邮件合并发送电子邮件。(成功)
- 我在我的 Gmail 中配置了 2 个域电子邮件地址以及我的基本 Gmail 地址。我想通过 xyz@domainname.com 而不是 Google 表格所有者 xyz@gmail.com 发送电子邮件。这是我通过 Gmail 发送电子邮件所做的事情
var first = 0;
var last = 1;
var email = 2;
var emailTemp = HtmlService.createTemplateFromFile("email");
var ws = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("NAJ");
var data = ws.getRange("A2:C" + ws.getLastRow()).getValues();
data.forEach(function(row){
emailTemp.fn = row[first];
emailTemp.ln = row[last];
var htmlMessage = emailTemp.evaluate().getContent();
GmailApp.sendEmail(row[email], "Important Test", "Your email does not support HTML.",
{name: "Email App", htmlBody: htmlMessage}
);
});
}
我唯一需要做的就是更改发送电子邮件地址。任何帮助将不胜感激。原谅我的英语不好
解决方案
解释:
您的目标是从特定的电子邮件帐户发送电子邮件,而不管当前正在执行脚本的电子邮件帐户是什么。
方法一:
- 一种解决方法是使用可安装的触发器。根据文档:
可安装触发器始终在创建它们的人的帐户下运行。例如,如果您创建一个可安装的打开触发器,它会在您的同事打开文档时运行(如果您的同事具有编辑权限),但它会作为您的帐户运行。这意味着,如果您创建触发器以在打开文档时发送电子邮件,则电子邮件始终是从您的帐户发送的,而不一定是打开文档的帐户。
这里的想法是创建一个可安装的onEdit
触发器,xyz@domainname.com
这样每当其他电子邮件编辑特定单元格时,就会发送电子邮件。
这种方法的局限性在于,我们需要确保在真正需要时触发代码,而不是在每次编辑单元格时触发。我们可以创建一个复选框,然后单击复选框(无论哪个帐户执行此操作),然后脚本将被执行,电子邮件将由创建可安装触发器的电子邮件帐户发送。
方法二:
创建电子邮件别名。这是有关如何执行此操作的官方文档,并且此线程可能对以编程方式创建它们很有用。此处的限制是,要添加电子邮件别名,您必须是 Google Workspace 管理员。
解决方案:
解决方案1:
在工作表NAJ的单元格D1中创建一个复选框。单元格由您决定,但您需要相应地调整脚本。
更改函数名称以添加事件对象。这将允许我们获取编辑信息,例如编辑了哪个单元格。
新功能将是:
function myInstallableOnEditFunction(e) {
const arng = e.range;
if(arng.getSheet().getName()=="NAJ" && arng.getA1Notation()=='D1' && arng.getValue()==true){
var first = 0;
var last = 1;
var email = 2;
var emailTemp = HtmlService.createTemplateFromFile("email");
var ws = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("NAJ");
var data = ws.getRange("A2:C" + ws.getLastRow()).getValues();
data.forEach(function(row){
emailTemp.fn = row[first];
emailTemp.ln = row[last];
var htmlMessage = emailTemp.evaluate().getContent();
GmailApp.sendEmail(row[email], "Important Test", "Your email does not support HTML.",
{name: "Email App", htmlBody: htmlMessage}
);
});
}
}
onEdit
最后,从xyz@domainname.com
账户创建一个可安装的触发器函数。您可以从当前项目的触发菜单中手动执行此操作,也可以通过编程方式执行此操作。
之后,在任何帐户单击单元格D1后,电子邮件将由 发送xyz@domainname.com
。
解决方案2:
创建电子邮件别名后(参见方法 2),您可以使用getAliases()方法,这是一个示例脚本。我没有自己测试过,但你也可以探索这种可能性。
// Log the aliases for this Gmail account and send an email as the first one.
var me = Session.getActiveUser().getEmail();
var aliases = GmailApp.getAliases();
Logger.log(aliases);
if (aliases.length > 0) {
GmailApp.sendEmail(me, 'From an alias', 'A message from an alias!', {'from': aliases[0]});
} else {
GmailApp.sendEmail(me, 'No aliases found', 'You have no aliases.');
}
推荐阅读
- tensorflow - 使用数据集生成器进行 tf.keras 预测
- google-cloud-platform - 使用 Ansible 在 Google Cloud Storage 存储桶上启用对象生命周期管理
- testing - JMeter - 从文件添加 json 响应并将其设置为获取请求中的响应正文
- here-api - 如何找到两个位置之间的道路距离?
- c# - 使用 ASP.NET Core 使用 async 和 await 进行异步编程
- swift - Swift 用子协议中的具体类型替换关联类型
- javascript - Ember 更新页面标题
- xml - 如何在 XSD 中定义本地类型?
- javascript - 千位逗号分隔符问题仅验证最后 3 位数字
- java - BulkOperations upsert 抛出无效的 BSON 字段名称