使用MailApp.sendEmail阻止的所有邮件

时间:2018-03-21 13:02:39

标签: email google-apps-script

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

“邮件被拒绝。有关详细信息,请参阅https://support.google.com/mail/answer/69585。 最终收件人:rfc822; xx@xx.xx 行动:失败 状态:5.0.0 诊断代码:smtp;消息被拒绝。有关详细信息,请参阅https://support.google.com/mail/answer/69585。 Last-Attempt-Date:Wed,201 Mar Mar 2018 05:41:31 -0700(PDT)“

我使用了Martin Hawksey Tutarial脚本(经过一些修改):

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;
    }
}

1 个答案:

答案 0 :(得分:1)

交货状态通知

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

  1. 最终收件人:rfc822; xx@xx.xx -只是对转发或网关的所有修改之后 的收件人的类型和地址的指针。
  2. 操作:失败-表示交付状态的枚举,可以是faileddelayeddeliveredrelayed或{{1} }。在您的情况下,它表明电子邮件发送失败。
  3. 状态:5.0.0 -电子邮件传递状态代码受RFC 3463控制,而expanded错误仅表示“其他或未定义的协议状态”,无需进一步说明。
  4. 诊断代码:smtp; -包含故障的类型和原因(仅对于值为500failed的“动作”字段显示)。对于您的情况,没有什么太具体的信息,Google只是指向可能的退回原因列表。
  5. 上次尝试日期:2018年3月21日,星期三05:41:31 -0700(PDT)-最后,此字段包含最后一次尝试尝试的时间戳,引用标准,“中继,传送或发送”电子邮件。

问题

从上面可以看到,该错误并不表示您的代码有任何错误。这也解释了为什么该脚本对某些帐户“有效”的原因:问题可能出在Google的基础架构上,还是在目标收件人的安全配置上。

由于第一个通常带有更具体的DSN,因此您应检查受影响帐户的电子邮件安全配置。如果一切看起来正常,请切换到delayed的类似sendEmail方法,该方法可以为您提供更细粒度的控件,或者使用advanced service,可以让您从头开始构造消息。 / p>