如何获取Summernote富文本编辑器内容并通过Gmail发送邮件
首先需要注意,你当前代码中引入的是LineControl富文本编辑器,并非Summernote,两者的内容获取API存在差异,以下是基于你现有代码的完整调整方案:
前端代码调整
需要做两处修改,确保表单提交时能正确传递富文本内容:
- 给form标签添加id属性,方便绑定提交事件
- 在页面初始化脚本中添加表单提交监听,将编辑器的富文本内容同步到原生textarea中
修改后的核心代码如下:
<!-- 给form添加id --> <form id="emailForm" action="formSender" method="post"> <!-- 原有表单内容保持不变 --> <div class="form-group"> <label for="content">Content:</label> <textarea class="form-control" id="txtEditor" name="content"></textarea> </div> <!-- 原有按钮内容保持不变 --> </form> <script> $(document).ready(function () { $("#txtEditor").Editor(); // 绑定表单提交事件,同步富文本内容 $("#emailForm").on("submit", function() { // LineControl编辑器获取HTML内容的API const editorHtml = $("#txtEditor").Editor("getText"); // 将内容赋值给原生textarea,随表单提交 $("#txtEditor").val(editorHtml); return true; }); }); </script>
如果后续你切换为Summernote编辑器,只需要把获取内容的API替换为$("#txtEditor").summernote('code')即可。
后端Servlet代码调整
分为参数解析、Gmail邮件发送两部分实现:
1. 参数编码处理
首先要设置请求编码,避免中文内容乱码:
// 必须在获取所有参数前设置编码 request.setCharacterEncoding("UTF-8"); String to = request.getParameter("to"); String cc = request.getParameter("cc"); String subject = request.getParameter("subject"); String content = request.getParameter("content");
2. Gmail邮件发送实现
需要先引入JavaMail依赖(Maven配置如下,非Maven项目可直接导入对应jar包):
<dependency> <groupId>com.sun.mail</groupId> <artifactId>javax.mail</artifactId> <version>1.6.2</version> </dependency>
邮件发送核心代码:
import java.util.Properties; import javax.mail.*; import javax.mail.internet.*; // 配置Gmail SMTP参数 Properties props = new Properties(); props.put("mail.smtp.host", "smtp.gmail.com"); props.put("mail.smtp.port", "587"); props.put("mail.smtp.auth", "true"); props.put("mail.smtp.starttls.enable", "true"); // 发件人信息:填写你的Gmail账号和应用专用密码 final String senderEmail = "你的Gmail地址"; final String appPassword = "你的Gmail应用专用密码"; Session session = Session.getInstance(props, new Authenticator() { @Override protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(senderEmail, appPassword); } }); try { MimeMessage msg = new MimeMessage(session); msg.setFrom(new InternetAddress(senderEmail)); // 设置收件人 msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to)); // 设置抄送人 if (cc != null && !cc.trim().isEmpty()) { msg.setRecipients(Message.RecipientType.CC, InternetAddress.parse(cc)); } // 设置邮件主题 msg.setSubject(subject, "UTF-8"); // 第二个参数指定为text/html,才能正常解析富文本样式 msg.setContent(content, "text/html;charset=UTF-8"); // 发送邮件 Transport.send(msg); request.setAttribute("message", "邮件发送成功"); } catch (MessagingException e) { e.printStackTrace(); request.setAttribute("message", "邮件发送失败:" + e.getMessage()); } // 后续按你的业务逻辑跳转回发件页面即可
注意事项
- Gmail授权要求:Gmail现已不支持直接用账号密码调用SMTP服务,你需要先为Gmail账号开启两步验证,再生成专属的应用专用密码,替换代码中的对应字段
- 内容格式要求:调用
setContent方法时必须指定内容类型为text/html;charset=UTF-8,否则收件人收到的会是原始HTML代码,无法正常展示富文本样式 - 传输方式要求:你当前使用POST提交表单符合要求,不要使用GET提交,避免内容过长被截断
内容的提问来源于stack exchange,提问作者Minh Phan
相关产品推荐
相关产品推荐

