前端发送邮件方案?

场景:项目中收集错误信息,在某个时机,将信息发送指定的邮箱中。
①通过a标签window.open实现,优点:快捷,缺点:无法携带较长的数据

let params = {
  to: '指定的邮箱',
  subject: '邮箱标题',
  body: '邮箱内容'
};
window.open(`mailto:${params.to}?subject=${params.subject}&body=${params.body}`,'_parent');

②通过form标签,优点:比①的结构清晰,缺点:无法携带较长的数据,存疑。

let params = {
  to: '指定的邮箱',
  subject: '邮箱标题',
  body: '邮箱内容'
};
let template = `
<form action="mailto:${params.to}">
  <input name="subject" value="${params.subject}" />
  <textarea name="body">${params.body}</textarea>
</form>`;
let form = new DOMParser().parseFromString(template, 'text/html').querySelector('form');
document.body.appendChild(form);
form.submit();
document.body.removeChild(form);

clipboard.png
看样子接近成功,可是数据却挂在url上,这点导致数据长度受限,当数据长度增大5倍时,协议发出,但邮箱客户端没有被启动。

③通过nodejsnodemailer等模块,前端上传数据给服务端,服务端发出邮件。优点:无须考虑数据量和终端的邮箱客户端问题,且支持附件,缺点:需指定发送人的邮箱,授权码/密码邮箱服务器域名

④前端通过a标签导出文件,提示使用者手动上传文件发邮件。优点:简单粗暴,缺点:体验不是很好。

目前能想到的有以上4种方案
方案③可行,至于缺点有的是方法避开,只是某些原因,导致当前场景与该方案不大适合。
个人倾向于方案②,如果有办法解决②的缺点那就爽了。
以上4种方案外,可有其他方案推荐

阅读 5.8k
1 个回答

完全本地

将要发送的内容复制到剪切板,然后提醒用户已复制。
单独用 maillto:// scheme 来打开本地的邮件发送工具,让用户手动粘贴。

更多的时候

大部分情况下,这些东西都在用户认证后,通过后端服务器 同步/异步发送。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题