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

如何使用Spring Boot、JavaScript、Ajax将网页PDF发票作为邮件附件发送

发票邮件发送功能实现建议

核心逻辑说明

你已经完成了PDF发票的生成能力,发邮件功能的核心就是将已生成的PDF文件作为附件,调用邮件服务投递到用户填写的目标邮箱即可,根据你PDF生成的位置(前端生成/后端生成),可以对应调整实现流程。

分步实现方案

1. 前端侧逻辑处理

  • 点击邮件按钮后,先弹出收件邮箱输入弹窗,先做基础的邮箱格式合法性校验,校验通过后再进入发送流程
  • 如果是前端生成PDF(使用jsPDF、html2pdf等前端库渲染):
    将生成好的PDF转为Blob/Base64格式,和用户输入的收件邮箱、发票唯一标识(如发票号、订单号)一起通过POST请求传给后端接口,请求过程中展示加载态避免用户重复点击,收到后端返回结果后给用户对应提示
  • 如果是后端生成PDF:
    仅需要将用户输入的收件邮箱、当前发票的唯一ID传给后端即可,由后端自行拉取对应PDF文件
    示例前端请求代码参考:
// 前端生成PDF场景的发送请求示例
async function sendInvoiceEmail(receiverEmail, pdfBlob) {
  const formData = new FormData();
  formData.append("receiver_email", receiverEmail);
  formData.append("invoice_file", pdfBlob, `invoice_${Date.now()}.pdf`);
  const res = await fetch("/api/send_invoice", {
    method: "POST",
    body: formData,
  });
  const result = await res.json();
  result.success ? alert("发票已发送至您的邮箱,请注意查收") : alert("发送失败,请稍后重试");
}

2. 后端侧逻辑处理

  • 先配置邮件发送基础能力,根据你使用的技术栈选择对应工具即可:
    • Java栈:使用JavaMail、Spring Boot Mail组件
    • Python栈:使用smtplib、yagmail库
    • Node.js栈:使用Nodemailer库
      提前申请发件邮箱,开启SMTP服务获取授权码,配置到服务环境变量中,不要硬编码在代码里避免泄露
  • 开发对应接口接收前端参数:
    先校验收件邮箱格式、PDF文件合法性,然后构造邮件内容,主题可设置为「您的发票已开具」,正文可自定义说明内容,将PDF作为附件添加到邮件中,调用SMTP服务完成发送,最后给前端返回发送成功/失败的状态
  • 可增加1-2次失败自动重试机制,避免临时网络波动导致发送失败

3. 可选优化项

  • 存储发送记录:将每次发送的收件邮箱、发票ID、发送状态、发送时间存入数据库,方便后续排查问题
  • 大文件兼容:如果发票文件较大,可先将PDF上传到对象存储生成临时下载链接,放到邮件正文同时提供附件下载,避免附件过大被收件方邮箱拒收
  • 异常告警:配置发送失败告警,通知管理员及时处理异常情况

功能效果参考

邮件发票功能展示截图
PDF发票生成效果展示截图

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 19:36:03