You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

联系表单邮件发送异常求助:仅个人邮箱可触发发送

问题描述

我用SmtpJS.com加密,配合ElasticEmail生成的SecureToken实现联系表单发信功能,但遇到了问题:只有当表单的email输入框填写我的个人邮箱kalvitzjames1@gmail.com时,提交后才有邮件发送到这个邮箱;如果填写其他任意邮箱,提交后完全收不到邮件。

相关代码如下:

JavaScript代码

/*contact form/Send email*/
/*SmtpJS.com security encryption for host, username, and passowrd*/
function sendEmail(){
        Email.send({
            SecureToken : "XXXX-XXXX-XXXX-XXXX-XXXX",
            To : 'kalvitzjames1@gmail.com',
            From : document.getElementById("email").value,
            Subject : "New Contact Form Enquiry",
            Body : "<br> Name: " + document.getElementById("name").value
            + "<br> Email: " + document.getElementById("email").value
            + "<br> Phone: " + document.getElementById("phone").value
            + "<br> Message: " + document.getElementById("message").value
        })
        .then(message => alert("Thank you for your Message!"));
    }

HTML代码

<!--SmtpJS.com (for form emails)-->
<script src="https://smtpjs.com/v3/smtp.js"></script>

<!--calling email function-->
<form onsubmit="sendEmail(); reset(); return false;">
    <h3>Get in touch</h3>
    <input type="text" id="name" placeholder="Your Name" required>
    <input type="email" id="email" placeholder="Email" required>
    <input type="text" id="phone" placeholder="phone" required>
    <textarea id="message" rows="4" placeholder="How can I help?"></textarea>
    <button type="submit">Send</button>
</form>
问题根源

这是ElasticEmail(配合SmtpJS)的发件人授权限制导致的:

  • 你通过ElasticEmail生成SecureToken时,绑定的发件人只能是你已验证的个人邮箱kalvitzjames1@gmail.com,不允许使用未授权的外部邮箱作为发件人。
  • 当你把用户输入的其他邮箱设为From字段时,ElasticEmail会直接拒绝发送请求,所以收不到邮件;只有用你自己的授权邮箱作为发件人时,请求才会被通过。
解决办法

推荐用第一种方案,简单且符合邮件服务的规范:

方案1:固定发件人为授权邮箱

把From字段固定为你的个人邮箱,同时在邮件正文里保留用户填写的邮箱作为回复地址,这样你依然能联系到用户:

function sendEmail(){
    Email.send({
        SecureToken : "XXXX-XXXX-XXXX-XXXX-XXXX",
        To : 'kalvitzjames1@gmail.com',
        From : 'kalvitzjames1@gmail.com', // 固定为授权邮箱
        Subject : "New Contact Form Enquiry",
        Body : "<br> Name: " + document.getElementById("name").value
        + "<br> 用户邮箱:" + document.getElementById("email").value // 明确标注是用户提供的邮箱
        + "<br> 电话:" + document.getElementById("phone").value
        + "<br> 留言:" + document.getElementById("message").value
    })
    .then(message => alert("感谢你的留言!"))
    .catch(error => alert("发送失败,请稍后重试或直接联系我们!")); // 新增错误捕获,避免误导用户
}

方案2:验证所有可能的发件人(不推荐)

如果你坚持要使用用户输入的邮箱作为发件人,需要在ElasticEmail后台将每个用户的邮箱都添加为已验证的发件人,但这显然不现实——用户的邮箱是任意的,所以这个方案几乎不可行。

内容的提问来源于stack exchange,提问作者Gabora94

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 22:35:36