【问题标题】:MailApp BCC message details not showing in sent folderMailApp BCC 邮件详细信息未显示在已发送文件夹中
【发布时间】:2021-01-19 21:18:04
【问题描述】:

当我使用 MailApp 发送密件抄送电子邮件时,它会发送、接收,并且电子邮件会显示在发件人的已发送文件夹中。但是,已发送文件夹中的电子邮件不会显示他们通常会密件抄送的发件人。它显示为发送给发件人的电子邮件(即使发件人并未将其发送给自己)。

此外,它似乎几乎像邮件合并一样发送电子邮件。它最终在密件抄送收件人收件箱中显示为唯一收件人(而不是密件抄送收件人)。

这是一个真正的问题,因为您无法验证您是否将电子邮件发送给了 20 多人。

这个问题已经被here 询问过,但没有答案。

function sendEmail(form) {
  
  var ss = SpreadsheetApp.getActive();
  var body = form.body;
  var bcc = form.bccfield;
  var cc = form.ccfield;
  var to = form.tofield;
  var subject = form.subject;
   var eHandle = ss.getSheetByName("Email Handling");
  var sig = eHandle.getRange(10, 2).getValue();
  var img = eHandle.getRange(11, 2).getValue();    
  var sigImage = '<img src ="' + img + '" >';
  
MailApp.sendEmail(to, {
    to: to,
  cc: cc,
  bcc: bcc,
    subject: subject,
   
  htmlBody: body.replace(/\n/g, '<br>') + sig + sigImage});
  }

【问题讨论】:

    标签: javascript email google-apps-script gmail


    【解决方案1】:

    Oleg 的回答是正确的,MailApp.sendEmail(...) 无法按预期工作。无论如何,值得一提的一个问题是,根据https://developers.google.com/apps-script/reference/mail/mail-app,MailApp 有四个sendEmail 方法:

    • sendEmail(message)
    • sendEmail(recipient, subject, body)
    • sendEmail(recipient, subject, body, options)
    • sendEmail(to, replyTo, subject, body)

    但您的代码没有使用它们。

    替换

    MailApp.sendEmail(to, {
        to: to,
      cc: cc,
      bcc: bcc,
        subject: subject,
       
      htmlBody: body.replace(/\n/g, '<br>') + sig + sigImage});
      
    

    通过

    MailApp.sendEmail({
      to: to,
      cc: cc,
      bcc: bcc,
      subject: subject, 
      htmlBody: body.replace(/\n/g, '<br>') + sig + sigImage
    });
      
    

    【讨论】:

      【解决方案2】:

      使用GmailApp,它有一个类似的sendEmail 方法,可以完全满足您的需求。您对 MailApp 方法的行为也是正确的 - 电子邮件就像是单独的电子邮件一样发送0

      要直接查看差异,请运行以下 sn-p:

      function testBcc() {
      
          const email = Session.getEffectiveUser().getEmail();
      
          const emailConfig = {
              to: email,
              bcc: email,
              htmlBody: `<p>Test message</p>`,
              subject: "test subject"
          };
      
          MailApp.sendEmail(emailConfig);
          GmailApp.sendEmail(
              emailConfig.to, emailConfig.subject,
              "",
              { htmlBody: emailConfig.htmlBody, bcc : emailConfig.bcc });
      }
      

      请注意,您将需要以下范围:

      https://www.googleapis.com/auth/userinfo.emailgetEmail https://www.googleapis.com/auth/script.send_mailsendEmail 通过 MailApp https://www.googleapis.com/auth/gmail.sendsendEmail 通过 GmailApp


      0请注意,您的方法签名确实不正确,正如Rubén's answer提到的那样。

      【讨论】:

      • 这非常有帮助。我通过另一个问题link 发现我仅限于密件抄送 50 个收件人。使用 GmailApp 也一样吗?一位用户link 建议不,但它似乎没有解决,我不确定如何测试它,因为我不能无缘无故地给 50 多人发电子邮件。
      • @Luke - 差不多,GmailApp 遵循 2 个配额,不要费心检查(如果您只有一个 Gmail 帐户,此测试将花费您每日配额的一半):this,和this
      • 谢谢。知道为什么它们是矛盾的吗?第二个说 100,而前一个说 50。由于第二个指定 GmailApp,我很有希望。
      • @Luke - 一般的经验法则是“服务配额”中的配额适用,但您仍然不能做超过“发送限制”中允许的事情,即使配额没有指定限制。因此,适用于您的案例,50 个收件人限制优先。您可以直接使用 Gmail API 来充分利用这些限制,设置起来并不难
      猜你喜欢
      • 2018-05-08
      • 1970-01-01
      • 2014-07-13
      • 1970-01-01
      • 2017-10-28
      • 1970-01-01
      • 2019-01-21
      • 1970-01-01
      • 2017-04-27
      相关资源
      最近更新 更多