`
javazeke
  • 浏览: 86731 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

JavaMail发送HTML(带图片,样式表等类型的)邮件

阅读更多

javaMail的应用,看网上有好多关于这个应用的示例。我上传只是算一种学习的积累吧。顺
便积累一下点击数,嘿嘿。大多数在这里面的朋友都是在职人员了,我还是一学生。在这里
胡乱写写,为了在毕业时能在简历上写上,个人博客www.javazeke.iteye.com,O(∩_
∩)O哈哈~.........说明我还会一点点东西吧。。。。
搞了好长时间,处理把附件变成模板邮件的资源。最后才发现MimeBodyPart提供这种功能,
真是晕死我了。一开始我笨到自己写流去处理,看来以后要更多的看书,圣人说:博学博爱
嘛!!!

好了,废话连篇。。呵呵,,下面给大家介绍下这么去发这东西

表单:
<form action="Send" method="post" name="mail" enctype="multipart/form-data">
发邮件的地址:<input name="from" value="356354803@qq.com">
发件箱的密码:<input name="secret">
//这个是必要的,还有这个邮箱必须开通的SMTP/POP3,QQ是可以开通的,126的好像不行。
接受者地址:<input name="to" value="masterjc@126.com">
主题:<input name="subject" value="dsadfsdadfasdfasss">
附件:<input type="file" name="file">
内容:<textarea rows="10" cols="60" name="context">asfdsafsafsadfsafdasdsfafas</
textarea>
提交:<input type="submit">
</form>

 
下面是处理代码(我就用servlet写的,就没用那些框框架架了,没有框架代码的侵入,下
次复制才复制的爽啊。。。)

 

import java.io.IOException;
import java.io.PrintWriter;
import java.text.MessageFormat;
import java.util.Date;
import java.util.Properties;

import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Message;
import javax.mail.Multipart;
import javax.mail.Session;
import javax.mail.Transport;
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 javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.oreilly.servlet.MultipartRequest;

@SuppressWarnings("serial")
public class Send extends HttpServlet {

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		response.setContentType("text/html");
		PrintWriter out = response.getWriter();
		request.setCharacterEncoding("gbk");
		
		//封装请求,这个处理很牛,一般人做不到。。。
		MultipartRequest re=new MultipartRequest(request,".",1024*1024,"gbk");

		// 接收邮件类容
		String from = re.getParameter("from");
		String to = re.getParameter("to");
		String subject = re.getParameter("subject");
		//我把内容去掉了,为了是用模板
		//String context = re.getParameter("context");
		String secret = re.getParameter("secret");
		String filePath=re.getFilesystemName("file");

		// 邮件的服务器地址,邮件服务器的服务器名
		String mailServerName = "smtp.qq.com";

		try {

			// 获得系统属性
			Properties prop = System.getProperties();
			// 设置属性
			prop.setProperty("mail.smtp.host", mailServerName);
			
			prop.setProperty("mail.smtp.port", "25");    

			prop.setProperty("mail.smtp.auth", "true");
			
			
			String name=from.substring(0,from.indexOf("@"));
			MyAuthenticator au = new MyAuthenticator(name,secret);

			// 建立邮件发送的连接
			Session session = Session.getDefaultInstance(prop, au);
			
			// 创建邮件信息的载体
			Message message = new MimeMessage(session);

			// 设置邮件相关属性

			// 设置邮件发送地址
			message.setFrom(new InternetAddress(from));

			// 点到点的发送
			//一对多发送只要改一个地方如下:
			/**
			 *构建一个群发地址数组
			*InternetAddress[] adr=new InternetAddress[toMore.length]; 
			*for(int i=0;i<toMore.length;i++){
			*	adr[i]=new InternetAddress(toMore[i]);
			*}
			*Message的setRecipients方法支持群发。。注意:setRecipients方法是复数和点
			*到点不一样
			*message.setRecipients(Message.RecipientType.TO,adr);

			 */
			
			
			message.setRecipient(Message.RecipientType.TO, new InternetAddress(to));

			// 设置邮件主题
			message.setSubject(subject);
			// 邮件发送时间
			message.setSentDate(new Date());

			

			/*
			 * 取得模板邮件的xml地址,这里用xml好处可大了,可以换行编写啊,
			 * 如果你用properties文件,一个网页文件的内容都写在一行,看着都不舒服
			 */
			String path=this.getServletContext().getRealPath("/")+"mailTemplate\\MyXml.xml";
			//这个类下面贴,就几行代码,没什么神奇的
			String str=new ReaderXML().read(path);
			Object[] obj=new Object[]{"zeke","123456","img1"};
			//这个MessageFormat是个好东西,不了解的去jdk看看,在java.text下面
			str = MessageFormat.format(str, obj);
			MimeBodyPart mbp1=new MimeBodyPart();
			mbp1.setContent(str, "text/html;charset=gbk");
			
			
			/*
			 * 附件上传的代码,相信大家附件上传都没问题,就是这么才能把它变成模板资源
			 呢?。。。O(∩_∩)O哈哈~。。。。很easy啦,,我也搞了好久,才发现。
			 */
			MimeBodyPart mbp2=new MimeBodyPart();
			FileDataSource fds=new FileDataSource(filePath);
			DataHandler dh=new DataHandler(fds);
			mbp2.setDataHandler(dh);
			//这里很重要,这里是如何把附件变成模板可利用资源这
			//相当于给这个附件绑定一个名字
		  	//他到底怎么实现的底层,有几种猜想,不知道是不是,
		  	//有一种想法,是不是把这个数据域设成一个消息头,然后在本页面类引用啊
		 	//相当于cookie,不确定,这消息头也腻大了点啊,,O(∩_∩)O哈哈~
		  	//这里要是有前辈看到了,请告诉我一下,先谢谢了。。。
			mbp2.setHeader("Content-ID", "img1");
			mbp2.setFileName(MimeUtility.encodeText(fds.getName()));
			

			Multipart mp=new MimeMultipart();
			mp.addBodyPart(mbp1);
			mp.addBodyPart(mbp2);

			
			message.setContent(mp);


			// 关键。。。。发送
			Transport.send(message);

		} catch (Exception e) {
			e.printStackTrace();
		}

		out.write("ok");

		out.flush();
		out.close();
	}

}

 上面提到的读模板件的类

import java.io.File;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

public class ReaderXML {
	
	public String read(String path){
		
		String str=null;
		
		str=reader(path);
		
		return str;
	}
	
	private String reader(String path){
		
		SAXReader reader=new SAXReader();
		String str=null;
		
		try {
			
			Document d=reader.read(new File(path));
			
			Element e=d.getRootElement();
			
			Element htmle=e.element("html");
			
			str=htmle.asXML();
			
		} catch (DocumentException e) {
			e.printStackTrace();
		}
		
		
		return str;
		
	}

}

 

模板文件(.xml)
<?xml version="1.0" encoding="UTF-8"?>
<xml-body>
	<html>

		<head>

		</head>
		<body>
			<div id="main" style="width:966px; height:330px; text-align:left;
				margin:3px 26px; background-color:#F5F5F5; border:1px
				#E1E1E1 solid;">
				<b>
					userName:{0}
					<br />
					userPass:{1}
					<br />
					<a href="http://www.google.com">去Google看看</a>
				</b>
				<img src="cid:{2}" />
			</div>
		</body>
	</html>

</xml-body>

 

下面这个就不多说了,大家都知道

import javax.mail.PasswordAuthentication;

public class MyAuthenticator extends javax.mail.Authenticator {
	private String strUser;
	private String strPwd;
	
	public String getStrUser() {
		return strUser;
	}

	public void setStrUser(String strUser) {
		this.strUser = strUser;
	}

	public String getStrPwd() {
		return strPwd;
	}

	public void setStrPwd(String strPwd) {
		this.strPwd = strPwd;
	}

	public MyAuthenticator(String user, String password) {
		this.strUser = user;
		this.strPwd = password;
	}

	protected PasswordAuthentication getPasswordAuthentication() {
		return new PasswordAuthentication(strUser, strPwd);
	}

}

 到这边所有的内容都贴上了,几个注意点
1.邮箱必须开通的SMTP/POP3,QQ是可以开通的,126的好像不行。
2.附件变成可利用资源,通过MimeBodyPart的setheader方法....上面有详细说明。

4
0
分享到:
评论
1 楼 liaoshaoyao 2009-08-25  
      ^_^  ^_^  看起来貌似很不错, 我也是学生呀, 加油!
       接下来好好研究一下....
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    Spring进阶—如何用Java代码实现邮件发送

    对于更复杂的邮件需求,例如发送带有附件的邮件,可以使用`Multipart`邮件来添加附件,如图片文件。内嵌资源邮件允许将图像或样式表内嵌在邮件正文中,而不是作为附件。在创建`Multipart`邮件时,需注意文本和资源的...

    韩顺平jsp购物网源码(包含javaMail)

    通过这个项目,学习者不仅可以深入理解JSP的使用,还可以掌握如何集成javaMail发送邮件,同时了解一个完整的电商网站是如何运作的。这对于想要提升Web开发技能,特别是JSP和电子邮件服务的开发者来说,是一个非常...

    javaMail,XSLT,正则等琐碎知识

    接着,我们来讨论“XSLT”(可扩展样式表语言转换)。XSLT是一种用于转换XML文档的XML语言。它主要用于将XML数据转换成其他格式,如HTML、PDF或纯文本,以便于展示或打印。XSLT通过匹配模板规则来实现转换,这些规则...

    发邮件所需的jar包下载

    例如,你可以使用Apache Commons Email轻松地添加图片、样式表或者脚本到你的邮件中,使其看起来更加专业和吸引人。 在Tomcat这样的Java应用服务器中使用这些库时,你需要将这些JAR文件放入服务器的`lib`目录下,...

    jsp 邮件客户端

    CKEditor是一种开源的Web富文本编辑器,它可以提供丰富的格式化选项,让用户在发送邮件时可以添加格式化的文本、图片、链接等元素。在本项目中,可能有一个名为"ckeditor"的目录,包含了CKEditor的相关资源文件。 ...

    上传,邮件、excel导入数据库实例

    在实际应用中,你可以通过JavaMail发送带有附件的邮件,甚至实现邮件模板和HTML格式的邮件。为了使用JavaMail,我们需要添加对应的依赖库,并配置SMTP服务器的相关参数。 最后,"poi"是Apache的一个开源项目,专门...

    jsp邮件收发系统源码项目

    【JSP邮件收发系统源码项目】是一个基于Java服务器页面技术(JSP)构建的邮件应用程序,它允许用户收发电子邮件而无需依赖外部数据库或创建特定的数据表。这个项目的特点在于其简洁性和实用性,适合初学者学习和快速...

    java mail邮件和创建excel操作Demo

    这两个Java应用示例展示了如何利用JavaMail发送邮件和使用Apache POI创建Excel文件。在实际项目中,可以根据需求进行扩展,比如添加错误处理、邮件模板、自定义Excel样式等功能。理解并掌握这些基本操作,对于开发...

    模拟邮件收发订阅系统

    数据库设计时,可能需要创建用户表、邮件表、订阅表等,以确保数据的有效管理和查询。 页面HTML引用模板之家的资源,这意味着开发者可能利用了现成的前端模板来快速构建用户界面,提高了开发效率,同时也保证了界面...

    jsp邮箱(文档+源码)

    解压后,我们可以看到项目的目录结构,包括JSP页面、Servlet类、JavaBean、配置文件(如web.xml)、样式表(CSS)、脚本(JavaScript)等。通过分析源码,可以深入学习JSP的编程实践,例如控制流程、数据绑定、JSTL...

    SSM电子邮件系统.rar

    SSM电子邮件系统是一个基于Java技术栈的Web应用项目,它整合了Spring、Spring MVC和MyBatis这三大流行框架,用于实现高效的电子邮件发送功能。在这个项目中,开发者利用了SSM框架的优势,提供了灵活的数据访问、强大...

    [其他类别]MeyboMail Web开源简化版_meybomailweb.zip

    3. **静态资源**:如图片、CSS样式表和JavaScript文件,用于构建用户界面。 4. **库文件**:包含JavaMail API和其他依赖库,如Apache Commons库,用于提供额外的功能支持。 5. **数据库脚本**:创建数据库和初始化...

    登录、注册、找回密码.zip

    在Java中,这可能涉及发送邮件或短信的服务,如使用JavaMail API发送邮件。收到邮件或短信后,用户访问特定URL,通过安全机制(如一次性令牌)来修改密码。这个过程必须严谨,以防止他人冒领或篡改。 压缩包内的...

    emailWeb

    【标题】"emailWeb"可能指的是一个与电子邮件相关的Web应用程序,它可能包含了处理邮件发送、接收、管理等功能的代码和资源。在这个项目中,我们主要关注的是如何在Web环境中实现邮件服务。 【描述】虽然提供的描述...

    吉大15春学期《脚本语言和互动网页设计》在线作业一试卷试卷.pdf

    1. HTML元素:在HTML文档中,`&lt;html&gt;`是文档的根元素,`&lt;body&gt;`表示文档的主体部分,而`&lt;head&gt;`则是包含元数据(如标题、样式表链接等)的部分,`&lt;title&gt;`用于设置页面标题。 2. Servlet生命周期:Servlet的生命...

    TestMail2.zip

    2. **JavaMail API**:在JSP中发送邮件,需要使用JavaMail API,包括`javax.mail`和`javax.mail.internet`包中的类,如`Session`、`Message`、`Transport`等。 3. **SMTP服务器配置**:设置邮件服务器的主机名、端口...

    java编程常见50例

    通过JavaMail,开发者可以实现发送、接收邮件,包括添加附件、设置HTML内容、处理多部分消息等。 4. **异常处理**:Java中的异常处理是程序健壮性的重要保障,使用`try-catch-finally`语句块可以捕获并处理运行时...

    javaweb开发要学习的所有技术和框架总结:.docx

    - **概念**:CSS(Cascading Style Sheets),即层叠样式表,是一种用来表现HTML或XML等文件样式的计算机语言。 - **功能**:CSS允许开发者控制页面布局、颜色、字体等视觉元素,使得内容与表现分离,提高了网页的可...

    (完整)javaweb开发要学习的所有技术和框架总结:,推荐文档.pdf

    - **JavaMail**:提供处理电子邮件的API,用于发送、接收邮件。 学习这些技术需要时间和实践,熟练掌握它们将使你在JavaWeb开发领域具备坚实的基础。同时,了解并熟悉相关开发工具(如IDEA、Eclipse等)和服务器...

Global site tag (gtag.js) - Google Analytics