使用 MailApp.sendEmail 时电子邮件被拒绝

Mar*_*ski 6 email google-apps-script gmail-api

我有问题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;
    }
}
Run Code Online (Sandbox Code Playgroud)

Ole*_*ter 1

快递状态通知

消息内容受“传递状态通知的可扩展消息格式”管辖,因为它是失败电子邮件的传递状态通知 (DSN)。我们逐个字段解析错误消息:

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

问题

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

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