这里使用的是JavaMail技术,前台使用了fckeditor做邮件美化,由于只是示例,后台发送时只是将邮件保存在本地,但是可以查看,如果需要实际发送,请参考我的其他博客文章,我写了很多关于邮件发送的示例!
JSP页面页面除了引用fckeditor外,要注意我们是需要发送附件的:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>发送邮件</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <script type="text/javascript" src="fckeditor/fckeditor.js"></script> <script type="text/javascript"> window.onload=function(){ var oFCKeditor = new FCKeditor( 'content' ) ; //编译器基本路径 oFCKeditor.BasePath = "/pro_04/fckeditor/"; //高度 oFCKeditor.Width=800; //宽度 oFCKeditor.Height=300; //工具条集合名称(Default,Basic或自己制定,关于FCK的使用,博客内有专门文章) //具体的配置可以将默认显示出来然后到FCK目录里的fckconfig.js里 //FCKConfig.ToolbarSets["Default"]数组中去除不要的功能一共63个功能属性 //oFCKeditor.ToolbarSet="Basic"; oFCKeditor.ReplaceTextarea() ; } </script> </head> <body> <!-- 注意表单格式,这里需要上传附件 --> <form action="SendMailServlet" method="post" enctype="multipart/form-data"> <table> <tr> <td>收件人:</td> <td><input type="text" name="to" /></td> </tr> <tr> <td>抄送:</td> <td><input type="text" name="copy" /></td> </tr> <tr> <td>主题:</td> <td><input type="text" name="title" /></td> </tr> <tr> <td>信件内容:</td> <td><textarea rows="10" cols="20" name="content" id="content"></textarea></td> </tr> <tr> <td>附件:</td> <td><input type='file' name='ufile' /></td> </tr> <tr> <td>背景音乐:</td> <td><input type='file' name='umusic' /></td> </tr> <tr> <td>背景图片:</td><!-- 背景图片我们后台自己准备 --> <td> <select name="bgimg"> <option value="1">一号</option> <option value="2">二号</option> </select> </td> </tr> <tr align="right"> <td colspan="2"><input type="submit" value="发 送"></td> </tr> </table> </form> </body> </html>
为了防止乱码,会经过一个过滤器:
package org.filter; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; /** * 过滤器防止乱码 * @说明 * @author cuisuqiang * @version 1.0 * @since */ public class EncodingFilter implements Filter { public void destroy() { } public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { request.setCharacterEncoding("UTF-8"); response.setCharacterEncoding("UTF-8"); chain.doFilter(request, response); } public void init(FilterConfig arg0) throws ServletException { } }
然后到Servlet处理附件和信息,这里就不做异常处理了,出错直接报错:
package org.servlet; import java.io.*; import java.util.*; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.FileItemFactory; import org.apache.commons.fileupload.FileUploadException; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; import org.entity.MailModel; import org.mail.SendMail; /** * 接收表单,处理附件,组装邮件对象,并调用发送接口 * @说明 在C盘创建临时文件 * @author cuisuqiang * @version 1.0 * @since */ @SuppressWarnings("serial") public class SendMailServlet extends HttpServlet { @SuppressWarnings( { "unchecked", "deprecation" }) @Override protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 建立磁盘工厂 FileItemFactory factory = new DiskFileItemFactory(); // 表单域 ServletFileUpload upload = new ServletFileUpload(factory); List<FileItem> items = null; String bgimg = "1"; // 默认是第一个背景图片 try { items = upload.parseRequest(request); } catch (FileUploadException e) { e.printStackTrace(); } MailModel mail = new MailModel(); InputStream is = null; for (FileItem item : items) { if (!item.isFormField()) { // 如果是附件 if (item.getSize() > 0) { is = item.getInputStream(); String filename = ""; if (item.getName().indexOf("\\") == -1) { filename = "c:\\tmp\\" + item.getName(); } else { filename = "c:\\tmp\\" + item.getName().substring(item.getName().lastIndexOf("\\")); } if (is.markSupported()) { System.out.println("没有上传文件或文件已经删除"); } else { File file = new File(filename); FileOutputStream fos = new FileOutputStream(file); // 建立输出流 byte[] buffer = new byte[8192]; // 每次读8K字节,大文件上传没有问题 int count = 0; while ((count = is.read(buffer)) > 0) { // 循环写入到硬盘 fos.write(buffer, 0, count); } fos.close(); // 关闭输入输出流 is.close(); if (item.getFieldName().equals("ufile")) { mail.setFilePath(filename); } else if (item.getFieldName().equals("umusic")) { mail.setMusicPath(filename); } } } } else { // 处理文本信息 if (item.getFieldName().equals("title")) { mail.setTitle(item.getString("UTF-8")); } else if (item.getFieldName().equals("content")) { mail.setContext(item.getString("UTF-8")); } else if (item.getFieldName().equals("to")) { mail.setTo(item.getString("UTF-8")); } else if (item.getFieldName().equals("copy")) { mail.setCopy(item.getString("UTF-8")); } else if (item.getFieldName().equals("bgimg")) { bgimg = item.getString("UTF-8"); } } } String bgPath = request.getRealPath("/") + "\\images\\bg" + bgimg + ".jpg"; mail.setBgPath(bgPath); try { SendMail.sendMail(mail); } catch (Exception e) { e.printStackTrace(); } response.sendRedirect(request.getContextPath() + "/sendmail.jsp"); } }
这里也没有验证,接收到信息后组装一个邮件实体对象,传递到发送接口中发送:
实体,我就不写get和set方法了:
package org.entity; /** * 一封邮件的对象 * @说明 * @author cuisuqiang * @version 1.0 * @since */ public class MailModel { /** * 主键 */ private int id; /** * 邮件标题 */ private String title; /** * 发送给谁 */ private String to; /** * 背景图片地址 */ private String bgPath; /** * 抄送给谁 */ private String copy; /** * 邮件内容 */ private String context; /** * 附件地址 */ private String filePath; /** * 背景音乐地址 */ private String musicPath; }
然后我们来看看核心处理类:
package org.mail; import java.io.File; import java.io.FileOutputStream; import java.io.OutputStream; import java.util.Date; import java.util.Properties; import javax.activation.DataHandler; import javax.activation.DataSource; import javax.activation.FileDataSource; import javax.mail.Message; import javax.mail.Session; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeBodyPart; import javax.mail.internet.MimeMessage; import javax.mail.internet.MimeMultipart; import javax.mail.internet.MimeUtility; import org.entity.MailModel; /** * 发送一封邮件 * @说明 注意这里并没有实际发送而是保存在了C盘临时文件中,真是发送的话,请参考我的博客 * @author cuisuqiang * @version 1.0 * @since */ public class SendMail { public static void sendMail(MailModel mail) throws Exception { Properties props = new Properties(); props.put("mail.smtp.auth", "true"); Session session = Session.getInstance(props); Message message = new MimeMessage(session); InternetAddress from = new InternetAddress(); from.setPersonal(MimeUtility.encodeText("风中落叶<cuisuqiang@163.com>")); message.setFrom(from); InternetAddress to = new InternetAddress(mail.getTo()); message.setRecipient(Message.RecipientType.TO, to); // 是否抄送 if (null != mail.getCopy() && !"".equals(mail.getCopy())) { InternetAddress copy = new InternetAddress(mail.getCopy()); message.setRecipient(Message.RecipientType.CC, copy); } message.setSubject(MimeUtility.encodeText(mail.getTitle())); message.setSentDate(new Date()); // 指定为混合关系 MimeMultipart msgMultipart = new MimeMultipart("mixed"); message.setContent(msgMultipart); MimeBodyPart content = new MimeBodyPart(); msgMultipart.addBodyPart(content); // 依赖关系 MimeMultipart bodyMultipart = new MimeMultipart("related"); content.setContent(bodyMultipart); MimeBodyPart htmlPart = new MimeBodyPart(); // 组装的顺序非常重要 bodyMultipart.addBodyPart(htmlPart); MimeBodyPart in_bg = new MimeBodyPart(); bodyMultipart.addBodyPart(in_bg); DataSource bgsou = new FileDataSource(mail.getBgPath()); DataHandler bghd = new DataHandler(bgsou); in_bg.setDataHandler(bghd); in_bg.setHeader("Content-Location", "bg.jpg"); // 是否使用了背景音乐 if (null == mail.getMusicPath() || "".equals(mail.getMusicPath())) { String start = "<html><body background='bg.jpg'>"; String end = "</body></html>"; htmlPart.setContent(start + mail.getContext() + end,"text/html;charset=UTF-8"); } else { MimeBodyPart in_Part = new MimeBodyPart(); bodyMultipart.addBodyPart(in_Part); DataSource gifds = new FileDataSource(mail.getMusicPath()); DataHandler gifdh = new DataHandler(gifds); in_Part.setDataHandler(gifdh); in_Part.setHeader("Content-Location", "bg.mp3"); String start = "<html><head><bgsound src='bg.mp3' loop='-1'></head><body background='bg.jpg'>"; String end = "</body></html>"; htmlPart.setContent(start + mail.getContext() + end,"text/html;charset=UTF-8"); } // 组装附件 if (null != mail.getFilePath() && !"".equals(mail.getFilePath())) { MimeBodyPart file = new MimeBodyPart(); FileDataSource file_datasource = new FileDataSource(mail .getFilePath()); DataHandler dh = new DataHandler(file_datasource); file.setDataHandler(dh); file.setFileName(MimeUtility.encodeText(dh.getName())); msgMultipart.addBodyPart(file); } message.saveChanges(); // 保存邮件 OutputStream ips = new FileOutputStream("C:\\tmp\\test.eml"); message.writeTo(ips); ips.close(); System.out.println("------------发送完毕------------"); // 删除临时文件 if (null != mail.getMusicPath() && !"".equals(mail.getMusicPath())) { File file = new File(mail.getMusicPath()); file.delete(); } if (null != mail.getFilePath() && !"".equals(mail.getFilePath())) { File file = new File(mail.getFilePath()); file.delete(); } } }
我们把邮件发送了C盘,可以到C盘查看,如果需要实际发送,可以参考我的其他博客,有专门说明!
请您到ITEYE网站看原创,谢谢!
http://cuisuqiang.iteye.com/ !
自建博客地址:http://www.javacui.com/ ,内容与ITEYE同步!
相关推荐
在JavaMail中,发送带有背景音乐和背景图片的邮件涉及到HTML格式的邮件内容以及MIME技术的使用。以下是对这个主题的详细说明: 首先,JavaMail API 是Java平台上的一个库,它允许开发者通过SMTP(简单邮件传输协议...
总之,JavaMail 是 Java 开发者处理电子邮件的强大工具,通过提供的源码,你可以深入了解其工作原理,并根据需要自定义邮件发送逻辑。这个压缩包中的代码应该包含了设置、认证、创建和发送邮件的所有必要步骤,对...
### JavaMail 发送支持带有图片的 HTML 格式和普通文本格式邮件 #### 概述 JavaMail API 是一个广泛使用的 Java 库,用于发送和接收电子邮件。它提供了丰富的功能来处理不同类型的邮件内容,包括纯文本、HTML 格式...
2. **邮件协议**:Javamail支持多种邮件协议,如SMTP(Simple Mail Transfer Protocol)用于发送邮件,POP3(Post Office Protocol version 3)和IMAP(Internet Message Access Protocol)用于接收邮件。在实现邮件...
本案例旨在通过实际操作帮助学生掌握如何利用JavaMail组件在Java Web应用中实现邮件发送功能。JavaMail是Java平台的一个扩展,用于发送、接收以及管理电子邮件。在现代Web应用开发中,邮件服务是非常重要的组成部分...
六、邮件发送与接收流程 发送邮件的基本步骤包括创建`Session`,构建`MimeMessage`,设置发件人、收件人等信息,然后使用`Transport.send()`方法发送。接收邮件则涉及到连接邮件服务器,打开邮箱存储,检索`Folder`...
这个基于Javamail的邮件收发系统是一个完整的项目,包含了系统源代码、论文、开题报告、任务书、外文翻译、文献综述以及答辩PPT等文件,非常适合学习和研究如何使用JavaMail API来实现邮件服务。 1. **JavaMail API...
JavaMail 是一个强大的开源库,用于在Java应用程序中实现电子邮件...总的来说,这个压缩包提供了一个完整的JavaMail邮件系统开发实例,对于学习和理解JavaMail API的使用,以及构建实际的邮件应用具有很高的参考价值。
总而言之,这个压缩包提供了学习和开发基于JavaMail邮件系统的全方位资源,无论是对JavaMail API的掌握,还是对邮件系统设计的理解,都能从中受益匪浅。通过研读这些材料,开发者不仅可以学会如何使用JavaMail发送和...
- `Transport`:负责发送邮件,通过 `Transport.send(Message)` 方法将邮件发送到指定服务器。 - `Store` 和 `Folder`:用于连接邮件服务器,读取和管理邮件。 2. 邮件协议:JavaMail 支持多种邮件协议,如 SMTP...
JavaMail 是一个强大的开源库,用于在Java应用程序中发送和接收电子邮件。这个压缩包文件包含了一个基于JavaMail的邮件收发系统的完整开发资料,...这些材料对于学习和理解JavaMail邮件收发系统的实现具有很高的价值。
- **高度可配置性**:JavaMail API通过`Session`对象来管理配置参数,这使得开发者可以根据具体需求灵活地配置邮件发送和接收的行为。 - **广泛的协议支持**:除了上述提到的几种协议之外,JavaMail API还支持其他...
《基于Javamail的邮件收发系统》是一款利用JavaMail API实现的电子邮件应用程序,它涵盖了从发送到接收邮件的全过程。此系统适用于个人或企业的日常通信,同时也是毕业设计的一个典型示例,可以帮助学生理解并掌握...
7. **学术论文**: 学术论文可能涵盖了项目的研究背景、技术选型、系统架构、实现方法、性能评估和未来展望等内容,是项目研究的重要成果。 8. **开题报告与任务书**: 开题报告明确了研究问题和目标,任务书则详细...
3. 邮件发送:构建 Message 对象,填充邮件信息,通过 Transport 发送。 4. 邮件阅读:加载指定邮件,解析并展示邮件内容。 5. 邮件编写:创建新邮件,支持添加附件,通过 Transport.send() 发送。 6. 邮件删除:...