首页 > 解决方案 > 有没有办法用我自己的域名而不是 Gmail 邮件合并

问题描述

在这里我想做的是:

  1. 通过在 App Script 中编写脚本,通过邮件合并发送电子邮件。(成功)
  2. 我在我的 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}
    );

  });

}

我唯一需要做的就是更改发送电子邮件地址。任何帮助将不胜感激。原谅我的英语不好

这是我的数据库

标签: javascriptemailgoogle-apps-scriptgoogle-sheets

解决方案


解释:

您的目标是从特定的电子邮件帐户发送电子邮件,而不管当前正在执行脚本的电子邮件帐户是什么。

方法一:

  • 一种解决方法是使用可安装的触发器。根据文档:

可安装触发器始终在创建它们的人的帐户下运行。例如,如果您创建一个可安装的打开触发器,它会在您的同事打开文档时运行(如果您的同事具有编辑权限),但它会作为您的帐户运行。这意味着,如果您创建触发器以在打开文档时发送电子邮件,则电子邮件始终是从您的帐户发送的,而不一定是打开文档的帐户。

这里的想法是创建一个可安装的onEdit触发器,xyz@domainname.com这样每当其他电子邮件编辑特定单元格时,就会发送电子邮件。

这种方法的局限性在于,我们需要确保在真正需要时触发代码,而不是在每次编辑单元格时触发。我们可以创建一个复选框,然后单击复选框(无论哪个帐户执行此操作),然后脚本将被执行,电子邮件将由创建可安装触发器的电子邮件帐户发送。

方法二:

创建电子邮件别名。是有关如何执行此操作的官方文档,并且此线程可能对以编程方式创建它们很有用。此处的限制是,要添加电子邮件别名,您必须是 Google Workspace 管理员。

解决方案:

解决方案1:

  1. 在工作表NAJ的单元格D1中创建一个复选框。单元格由您决定,但您需要相应地调整脚本。

  2. 更改函数名称以添加事件对象。这将允许我们获取编辑信息,例如编辑了哪个单元格。

新功能将是:

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.');
}

推荐阅读