使用smtp.js发送邮件时提示邮箱格式错误,求解决方案
解决SMTP.js中"The specified string is not in the form required for an e-mail address"错误
问题根源分析
这个错误核心是邮箱格式不合法,结合你的代码,重点排查以下几点:
From字段必须是完整合法的邮箱,不能填域名,且要和你ElasticEmail账号绑定的邮箱一致Username字段需填写ElasticEmail的完整登录邮箱,不能用模糊的"my mail"占位- 拼接后的
To邮箱可能存在空值、空格或非法字符,需要先做格式校验
修复后的代码
function sendEmail() { var elmail = document.getElementById('Email-Register-name').value.trim(); var elmailw = document.getElementById('Email-Register-domain').value.trim(); var toEmail = elmail + '@' + elmailw; var fromEmail = '你的ElasticEmail登录邮箱'; // 替换为实际邮箱 var smtpUsername = '你的ElasticEmail登录邮箱'; // 替换为实际邮箱 var smtpPassword = '你的ElasticEmail授权密码'; // 替换为实际授权密码 // 邮箱格式校验规则 const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; if (!emailRegex.test(toEmail)) { alert('请输入合法的收件人邮箱'); return; } if (!emailRegex.test(fromEmail)) { alert('发件人邮箱格式错误'); return; } console.log(toEmail); Email.send({ Host: "smtp.elasticemail.com", Username: smtpUsername, Password: smtpPassword, To: toEmail, From: fromEmail, Subject: "Verification Email from tab the_dev", Body: "<html><h2>Header</h2><strong>Bold text</strong><br><em>Italic</em></html>" }).then( message => alert(message) ).catch( error => alert('发送失败:' + error) ); };
额外注意事项
- ElasticEmail的SMTP密码不是账号登录密码,需要在后台生成授权密码,别混淆使用
- 用
trim()处理输入框值,避免首尾空格导致邮箱格式错误 - 测试时可以先写死
To和From的邮箱(比如自己的邮箱),排除前端输入问题后再动态获取值
内容的提问来源于stack exchange,提问作者tab the_dev
相关产品推荐
相关产品推荐

