【问题标题】:Emails are rejected when using MailApp.sendEmail使用 MailApp.sendEmail 时电子邮件被拒绝
【发布时间】:2018-08-30 14:46:39
【问题描述】:

MailApp.sendEmail() 有问题。 我尝试通过 Google 电子表格中的脚本发送电子邮件。我的脚本适用于我的帐户,但不适用于我朋友的帐户。我收到这条消息:

消息被拒绝。请参阅https://support.google.com/mail/answer/69585 了解更多信息。 最终收件人:rfc822; xx@xx.xx 行动:失败 状态:5.0.0 诊断代码:smtp;消息被拒绝。有关更多信息,请参阅https://support.google.com/mail/answer/69585。 上次尝试日期:2018 年 3 月 21 日,星期三 05:41:31 -0700 (PDT)

我使用了 Martin Hawksey 教程脚本(做了一些修改):

var TO_ADDRESS = "xxx@gmail.com";

// spit out all the keys/values from the form in HTML for email
function formatHtmlMailBody(obj, order) {
    var result = "html text";
    // loop over all keys in the ordered form data
    for (var idx in order) {
        var key = order[idx];
        result += key + " " + obj[key];
    }
    return result;
}

function formatTextMailBody(obj, order) {
    var result = "text";
    for (var idx in order) {
        var key = order[idx];
        result += key + "\n" + obj[key] + "\n\n";
    }
    return result;
}

function doPost(e) {

    try {
        Logger.log(e); // the Google Script version of console.log see: Class Logger
        record_data(e);

        var mailData = e.parameters;

        var dataOrder = JSON.parse(e.parameters.formDataNameOrder);

        var sendEmailTo = (typeof TO_ADDRESS !== "undefined") ? TO_ADDRESS : mailData.formGoogleSendEmail;
        MailApp.sendEmail(
            String(sendEmailTo),
            'title',
            formatTextMailBody(mailData, dataOrder), {             // body
                htmlBody: formatHtmlMailBody(mailData, dataOrder), // advanced options
                name: "name",
                replyTo: String(mailData.Email)
            }
        );
        //second mail
        try {
            var htmlBodyToSender = "html text";
            var textBodyToSender = "text";
            MailApp.sendEmail(
                String(mailData.Email), //to
                'title', //subject
                textBodyToSender, {                        // body
                    htmlBody: htmlBodyToSender,            // advanced options
                    name: "name",
                    replyTo: String(sendEmailTo)
                }
            );
        }
        catch (error) {
            Logger.log(error);
        }

        return ContentService    // return json success results
            .createTextOutput(
            JSON.stringify({
                "result": "success",
                "data": JSON.stringify(e.parameters)
            }))
            .setMimeType(ContentService.MimeType.JSON);
    } catch (error) { // if error return this
        Logger.log(error);
        return false;
    }
}

【问题讨论】:

  • 遇到同样的问题,希望有人知道如何解决。
  • 我也遇到了同样的问题。我使用的是 G Suite 帐户,但 Google 支持没有帮助。

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


【解决方案1】:

交货状态通知

邮件内容由"An Extensible Message Format for Delivery Status Notifications" 管理,因为它是失败电子邮件的传递状态通知 (DSN)。让我们逐字段解析错误消息:

  1. 最终收件人:rfc822; xx@xx.xx - 只是一个指向接收方类型和地址的指针所有转发或网关修改之后。
  2. Action: failed - 表示交付状态的枚举,可以是faileddelayeddeliveredrelayedexpanded。在您的情况下,这表明电子邮件未能送达。
  3. 状态:5.0.0 - 电子邮件传递状态代码由 RFC 3463 管理,500 错误仅表示“其他或未定义的协议状态”,无需进一步说明。
  4. Diagnostic-Code: smtp; - 包含失败的类型和原因(仅存在于具有faileddelayed 值的“操作”字段)。在您的情况下没有什么太具体的情况,Google 只是指出了可能的退回原因列表。
  5. Last-Attempt-Date: Wed, 21 Mar 2018 05:41:31 -0700 (PDT) - 最后,此字段包含最后一次尝试的时间戳,引用标准,“中继、网关或传递”电子邮件。

问题

从上面可以看出,该错误并不意味着您的代码有任何问题。这也解释了为什么脚本对某些帐户“有效”:问题出在 Google 的基础架构或预期收件人的安全配置上。

由于第一个通常伴随着更具体的 DSN,您应该检查受影响帐户的电子邮件安全配置。如果一切看起来正常,请切换到GmailApp 的类似sendEmail 方法,该方法为您提供更细粒度的控制,或使用advanced service,它允许您从头开始构造消息。

【讨论】:

  • 从 MailApp 切换到 GmailApp 为我解决了这个问题
猜你喜欢
  • 1970-01-01
  • 2016-05-19
  • 1970-01-01
  • 1970-01-01
  • 2017-07-16
  • 1970-01-01
  • 2015-10-01
  • 1970-01-01
  • 2012-07-01
相关资源
最近更新 更多