【问题标题】:Is there any way to mail merge with my own domain name instead Gmail有没有办法用我自己的域名而不是 Gmail 邮件合并
【发布时间】:2021-05-25 11:41:34
【问题描述】:

这里我想做的是:

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

  });

}

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

【问题讨论】:

  • 您需要在您的 gmail 帐户中创建别名
  • @Cooper 是的,我也是这么想的,然后我看到你需要成为谷歌工作区管理员才能做到这一点。但是,我将其作为一种方法发布。另一种可能是使用可安装的触发器。
  • @Marios 谢谢我不知道

标签: javascript email google-apps-script google-sheets


【解决方案1】:

解释:

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

方法一:

  • 一种方法是使用installable 触发器。根据文档:

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

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

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

方法2:

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

解决方案:

解决方案 1:

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

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

新功能将是:

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

最后,从xyz@domainname.com 帐户创建一个可安装的onEdit 触发器函数。您可以通过当前项目的触发菜单中的manuallyprogrammatically 执行此操作。

之后,任何帐户点击单元格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.');
}

【讨论】:

  • 谢谢,但是这张表不与任何人共享。我是这张表的唯一所有者,没有人需要访问它。我的代码完成了 90% 的工作。我想从 me@mydoamin.com,而不是 me@gmail.com 发送电子邮件。 me@mydomain.com 已作为别名添加到我的 Gmail 中。对于触发器,我将创建一个不是问题的按钮。
  • 解决方案 2 有效。我只需要 getAliases() 让它工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-15
  • 1970-01-01
  • 2013-12-04
  • 1970-01-01
  • 2016-08-09
  • 2021-04-07
相关资源
最近更新 更多