【问题标题】:Cannot find method sendEmail(object)找不到方法 sendEmail(object)
【发布时间】:2020-06-08 17:08:31
【问题描述】:

尝试在 Google 表格上编写脚本时,出现错误:

找不到方法 sendEmail(object)

下面的代码。正如您所理解的,这是一封给新客户的介绍电子邮件,向客户介绍他的客户代表。

  var clientname = spreadsheet.getRange('C2').getValue();
  var clientemail = spreadsheet.getRange('P2').getValue();
  var repname = spreadsheet.getRange('H2').getValue();
  var repmobile = spreadsheet.getRange('AA2').getValue();
  var repemail = spreadsheet.getRange('AB2').getValue();

     GmailApp.sendEmail({
        to: clientemail,
        subject: EMAIL_SUBJECT,
        htmlBody: createEmailBody(clientname, repname, repmobile, repemail),
        name: 'myname', 
        from: 'welcome@mydoamin.com', 
        replyTo: repemail
      });

感谢各位大大的帮助,我现在把代码改成了:

GmailApp.sendEmail({
    recipient: clientemail, 
    subject: email_subject, 
    htmlBody: createEmailBody(clientname.toString(), repname.toString(), repmobile.toString(), repemail.toString()),
    {name: 'myname',
    from: 'welcome@mydomain.com', 
    replyTo: repemail}
  });

现在错误是:

属性 ID 无效

在以“{name”开头的行

【问题讨论】:

  • 可能是你的参数不正确。我没有检查它。 Reference 我想你想使用MailApp。您在这里使用MailApp 的签名。 GmailApp 有不同的签名
  • 谢谢!我使用 GmailApp 只是因为它能够将“来自”更改为我的别名之一。据我了解,MailApp 无法做到这一点。
  • 是的。修好参数后还能用吗?
  • 不,没有用 :(
  • @user13708028 你不必写recipientsubject。您只需直接编写它们而无需指定。只有advanced parametershtmlBody 和其他人在花括号{ } 中明确指定。请正确查看我的第二个示例。

标签: google-apps-script gmail-api


【解决方案1】:

根据您的要求修改此代码。

代码复制自官方文档。正确的做法是:

function myFunction() {
// The code below will send an email with the current date and time.
var now = new Date();
GmailApp.sendEmail("email@example.com", "current time", "The time is: " + now.toString()); 
}

编辑:根据要求的 HTML 正文示例:

function myFunction() {
// The code below will send an email with the current date and time.
var now = new Date();
GmailApp.sendEmail("email@example.com", "current time", "The time is: " + now.toString(),{htmlBody: '<h1>hello</h1>'});
  }

【讨论】:

  • 谢谢,但是如何使用 htmlBody?我不能将它与我列出的参数一起使用?
  • 已更新。立即查看
  • 好的。那么你的要求是什么?这看起来是一篇写得很好的帖子。
  • 如果您在我粘贴的代码中更改了电子邮件地址,则它必须在 Apps Script 中工作。如果您是从电子表格中执行此操作,则可能还有其他事情要做。那/那些将是另一个问题
  • @user13708028 - 显示您所做的更改(它永远不会像“不工作”那么简单 - 请具体说明究竟是什么错误,预期什么等)。请不要覆盖原始问题,将更改附加到它(不需要“编辑”/“更新”标题 - 您可以使用 --- [三个破折号] 分隔部分)
【解决方案2】:

解决方案

您没有正确使用sendEmail method,因为您将对象作为单个参数而不是正确的参数传递。根据上面链接的文档,您的参数应该如下:

  • 收件人(字符串)
  • 主题(字符串)
  • 正文(字符串)
  • 选项(对象)

因此,你的方法最终会是这样的:

GmailApp.sendEmail(clientemail, email_subject,createEmailBody(clientname.toString(), repname.toString(), repmobile.toString(), repemail.toString()),{
    name: 'myname',
    from: 'welcome@mydomain.com', 
    replyTo: repemail}
  );

我希望这对您有所帮助。让我知道您是否需要其他任何内容或者您是否不理解某些内容。 :)

【讨论】:

    【解决方案3】:

    这是一个补充答案:

    你需要学会理解错误信息——它们是你调试时最好的朋友,但它们并不总是直观的。在您的情况下,错误状态为:找不到方法 sendEmail(object)。尝试像解析模板字符串一样解析它,消息说:

    1. 无法找到方法
    2. 搜索的方法是sendEmail
    3. object 的实例作为单个参数传递

    由于显然有一个名为sendEmail 的方法(在确保没有错别字之后),您可以放心地消除前两个部分。这给我们留下了“对象的实例”——一个自然的问题就是“是否允许将对象传递给这个方法?”。如果您查看文档,则不是。

    但你可以一开始就避免所有这些。有一篇我觉得非常有用的博客文章 - GAS Add-on development 的 6 deadly sins。第一个击中苹果 - 最好不要使用脚本编辑器并安装 IDE 或支持自动完成的编辑器(无论是 VS Code、Netbeans 还是其他)。

    话虽如此,重复其他答案,方法签名的结构是这样的:

    sendEmail(收件人,主题,正文,选项) ________________________________________________ 名称 arg0 arg1 arg2 [arg3]

    请注意,前三个参数是强制,只有第四个是可选。 如果您再次查看参考文档,options 是所有 高级 参数所在的位置。

    备注

    1. 在大括号上:我假设您知道这一点,但以防万一:这是一个对象字面量(初始化程序)notation,用于实例化一个对象。如果方法签名另有说明,您不必将所有参数包装在单个对象中(不过,我认为您走在正确的轨道上 - 使用单个配置参数声明您的 API 很好,只是不要违反公共合同)。

    参考文献

    1. sendEmail 带有选项spec
    2. sendEmail 没有选项 spec
    3. MailApp 方法 sendEmail spec

    【讨论】:

      猜你喜欢
      • 2011-05-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-26
      相关资源
      最近更新 更多