【问题标题】:unable to email using EmailJS without alert无法在没有警报的情况下使用 EmailJS 发送电子邮件
【发布时间】:2017-04-22 04:48:54
【问题描述】:

我正在尝试使用以下 sn-ps 的 EmailJS.com 服务: HTML部分:

<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Daily Report</title>
<script src="https://cdn.emailjs.com/dist/email.min.js"></script>
<script src="tst.js"></script>
<noscript>Please enable JavaScript.</noscript>
</head>
<body onLoad="today()">
<h1 id="today"></h1>
<hr>
<form onSubmit="draft()">
    <fieldset>
        <legend>Message</legend>
        <textarea id="shout" rows="2" cols="97">TEST.</textarea><br>
        <input type="submit" value="Email">
    </fieldset>
</form>
</body>
</html>

JavaScript 部分:

var s = new Date().toDateString();
function today() {
    emailjs.init("EMAILJSASSIGNED");
    document.getElementById("today").innerHTML = s;
}
function draft() {
    var m = s + "<br>";
    m += document.getElementById("shout").value + "<br>";
    emailjs.send("EMAILJS_service", "TEMPLATE", {"body":m});
//alert(m);
}

我发现只有添加alert(m) 行时,代码才有效(即根据我的模板规范通过电子邮件发送)。似乎alert 触发了提交事件以执行 emailjs.send()。如果没有警报, emailjs.send 将被“跳过”。我不明白为什么。

【问题讨论】:

  • 您可以尝试使用 Promise 来了解成功或错误响应吗?
  • 不熟悉承诺功能。在这种情况下,我需要同步管道:提交表单,然后发送电子邮件。
  • 您的控制台有错误吗?
  • 没有。当然,有了 alert,textarea 的内容就会显示出来。

标签: javascript html forms email


【解决方案1】:

没有警报没有发送电子邮件的原因是因为一旦您提交表单,页面就会重新加载,并且浏览器没有机会完成 emailjs.send() 请求。

一个简单的解决方案是在 onSubmit 语句中添加“return false”,如下所示:

<form onSubmit="draft(); return false;">

这将阻止表单被提交,因此如果您确实需要将表单提交到服务器,则需要在 emailjs.send() 返回的承诺被解析后异步执行此操作。

您可以在此处阅读更多关于 emailjs.send() 语法的内容,包括和不包括承诺: https://www.emailjs.com/docs/api-reference/emailjs-send/

希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 2022-10-18
    • 2017-10-14
    • 2015-01-03
    • 2011-10-16
    • 2012-01-06
    • 2011-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多