AWS SES+API Gateway+HTML联系表单部署失败:InvalidParameterValue: Missing final '@domain' 报错排查求助
AWS SES+API Gateway+HTML联系表单部署失败:InvalidParameterValue: Missing final '@domain' 报错排查求助
各位大佬好!我最近在给自己的网站搭一个联系表单,用了AWS SES+API Gateway+Lambda的组合,感觉快成了,但源地址这块总出问题,一直收到InvalidParameterValue: Missing final '@domain'的报错。我用了URL编码来传数据(因为只有文本字段,没必要用multipart),下面是我的全部代码,麻烦帮忙看看哪里错了!
HTML联系表单代码
<form id='contact-form'> <label for='replyTo'>Email</label> <input name='replyTo' id='replyTo' type='email' autocomplete='email' required> <label for='subject'>Subject</label> <input name='subject' id='subject' required> <label for='message'>Message</label> <textarea name='message' id='message' autocapitalize='sentences' maxlength='3000' minlength='10' placeholder='Comment text' rows='3' spellcheck='true' required></textarea> <button id='submit-btn' type='button'>Send</button> </form>
前端JS处理逻辑
const submitBtn = document.getElementById('submit-btn'), htmlForm = document.getElementById('contact-form'), //contact form endpoint = "https://xxxxxxxxxx.execute-api.us-west-2.amazonaws.com/Email"; submitBtn.addEventListener('click', () => { const formData = new FormData(htmlForm), urlEncodedData = new URLSearchParams(); for (const pair of formData.entries()) { urlEncodedData.append(pair[0], pair[1]); } htmlForm.requestSubmit(); fetch(endpoint, { method: "post", body: urlEncodedData, headers: { "Content-Type": "application/x-www-form-urlencoded" } }).then(response => { if (response.ok) { resetForm(); } else { throw new Error(`HTTP error. Status: ${response.status}`); } }); }); htmlForm.addEventListener('submit', (event) => { event.preventDefault(); // prevents submitting to self (page) });
AWS Lambda处理函数
const AWS = require('aws-sdk'), ses = new AWS.SES(), querystring = require('querystring'); exports.handler = async (event) => { const formData = querystring.parse(event.body), message = formData.message, replyTo = formData.replyTo, subject = formData.subject, emailParams = { Source: "form@<verified_domain_tld_here>", Destination: { ToAddresses: ["<my actual email address>"] }, Message: { Subject: { Data: `${subject}` }, Body: { Text: { Data: `${message}` } } }, ReplyToAddresses: [`${replyTo}`] }; try { await ses.sendEmail(emailParams).promise(); console.log(successMessage); return { statusCode: 200, body: JSON.stringify({ message: successMessage }) }; } catch (err) { console.log(err); return { statusCode: err.statusCode || 500, body: JSON.stringify({ message: err.message || errorMessage }) }; } };
补充说明:我已经确认SES里的<verified_domain_tld_here>是已经验证过的域名,前端表单里的邮箱字段也加了type='email'的校验,按道理传过来的replyTo应该是合法邮箱,但就是源地址相关的报错一直出现,实在搞不懂哪里出问题了,求各位大佬指点!
备注:内容来源于stack exchange,提问作者leecalvink
相关产品推荐
相关产品推荐

