【问题标题】:How can I keep the Reply-To setting in Gmail drafts created by GmailApp.createDraft() when sending the draft via Gmail website?通过 Gmail 网站发送草稿时,如何在 GmailApp.createDraft() 创建的 Gmail 草稿中保留回复设置?
【发布时间】:2021-04-28 21:35:57
【问题描述】:

作为在 Gmail 上发送大量电子邮件的一部分,我想根据收件人 using Gmail's alias feature 和 Google Apps 脚本配置回复地址。

我遇到了一个问题,即在尝试通过 Gmail 网站发送创建的草稿时,Google Apps 脚本创建的 Gmail 草稿中的回复设置被禁用(无效),想知道是否有人可以帮助我解决方法。

复制

我的脚本如下所示。我的 Gmail 帐户,为了提供示例,是me@gmail.com

    var subject = 'An Eye-catching Email Subject';
    var recipients = [{
        email: 'mail1@sample.com',
        replyTo: 'me+asia@gmail.com',
        body: 'email text for mail1@sample.com'
      },
      {
        email: 'mail2@example.com',
        replyTo: 'me+europe@gmail.com'
        body: 'email text for mail2@example.com'
      }
      // which goes on for an order of under 100 recipients
    ];
    recipients.forEach(recipient => GmailApp.createDraft(recipient.email, subject, recipient.body, {
      replyTo: recipient.replyTo
    }));

当我在 Gmail 网站上打开其中一封创建的草稿邮件,然后点击Send 按钮发送邮件时,发送的电子邮件设置为回复me@gmail.com 而不是指定的回复别名,喜欢me+asia@gmail.com

替代方案

如果我使用sendEmail() 方法而不是上面使用的createDraft(),一切正常。指定的replyTo 选项反映在实际发送的电子邮件中。

我使用createDraft() 而不是sendEmail() 的唯一原因是,在创建草稿之后,我想确保在单独点击Send 按钮之前一切正常。我知道我可能应该忘记使用createDraft();我只是不知道谷歌打算用createDraft()replyTo 选项做什么,如果有人知道我在坚持createDraft() 时可以采取的其他解决方案,我非常感激。

【问题讨论】:

    标签: google-apps-script gmail gmail-api


    【解决方案1】:

    问题和解决方法:

    在我的环境中,我也遇到过同样的情况。当时我确认了以下情况。

    • 当在 Gmail UI 中的浏览器中手动发送草稿邮件时,Reply-To 会从草稿邮件的标题中删除,然后发送草稿邮件。
    • 当我看到草稿消息时,Reply-To 包含在标题中。
    • 当使用GmailApp.getDraft(id).send() 之类的脚本发送包含Reply-To 的草稿消息时,通过在标头中包含Reply-To 来发送消息。这与GmailApp.sendEmail() 的情况相同。

    根据上述情况,作为一种简单的解决方法,如何使用如下脚本发送草稿消息?

    1. 创建草稿消息。
    2. 确认每条草稿消息。
      • 这是来自The only reason that I use createDraft() instead of sendEmail() is that after the drafts are created, I want to make sure everything is alright before hitting the Send button, individually. 在您的问题中。
    3. 当您在草稿消息中发现修改点时,请修改和/或删除它们。
    4. 确认所有草稿消息后,当您要发送它们时,可以使用脚本发送它们。

    当上述解决方法反映到脚本时,它变成如下。

    示例脚本:

    function myFunction() {
      GmailApp.getDrafts().forEach(e => e.send());
    }
    
    • 运行此脚本时,将发送当前所有草稿邮件。请注意这一点。

    注意:

    • 当草稿消息中包含一些您不想发送的草稿消息时,例如我认为使用星号的过滤器也可以实现。当您想发送带有星号的草稿消息时,您还可以使用以下脚本。

        GmailApp.getDrafts().forEach(e => {
          if (e.getMessage().isStarred()) e.send();
        });
      

    参考:

    【讨论】:

    • 感谢您的宝贵意见!您的回答有很大的含义:回复设置在 Gmail UI 中的编辑过程中被保留,只有在点击 Send 按钮后才会被删除。
    • 我想我可以添加一个功能,您的建议是仅发送在此特定脚本期间创建的草稿。运行let draftedIds = recipients.map(rec => GmailApp.createDraft(rec.email, sub, rec.body, { replyTo: rec.replyTo }).getId()); 后,通过PropertiesServicedraftedIds 的字符串保存到用户属性中。在发送时,我们可以调用保存的属性,解析并运行draftedIds.forEach(draftId => GmailApp.getDraft(draftId).send());
    • @Taro TSUKAGOSHI 感谢您回复并添加更多信息。我很高兴你的问题得到了解决。也谢谢你。
    猜你喜欢
    • 2018-02-20
    • 2014-10-19
    • 2018-02-26
    • 2015-08-27
    • 1970-01-01
    • 2017-06-17
    • 2016-02-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多