无法使用EmailJS通过电子邮件发送邮件

时间:2017-04-22 04:48:55

标签: javascript html forms email

我正在尝试使用以下代码段的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被&#34;跳过&#34;。我不明白为什么。

1 个答案:

答案 0 :(得分:2)

在没有提醒的情况下发送电子邮件的原因是,一旦您提交表单,页面就会重新加载,浏览器也没有机会完成emailjs.send()请求。

一个简单的解决方案是添加&#34;返回false&#34;到onSubmit语句,如下:

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

这样可以防止提交表单,因此如果您确实需要将表单提交给服务器,那么在解决了emailjs.send()返回的promise之后,您需要异步执行此操作。

您可以在这里阅读有关emailjs.send()语法的更多信息,包括和不使用promises: https://www.emailjs.com/docs/api-reference/emailjs-send/

希望这有帮助!

相关问题