联系表单邮件发送异常求助:仅个人邮箱可触发发送
问题描述
我用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
相关产品推荐
相关产品推荐

