java 邮件

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

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

Java代码 表单:   
<form action= "Send"  method= "post"  name= "mail"  enctype= "multipart/form-data" >   
  1. 发邮件的地址:<input name="from" value="356354803@qq.com">   
  2. 发件箱的密码:<input name="secret">   
  3. //这个是必要的,还有这个邮箱必须开通的SMTP/POP3,QQ是可以开通的,126的好像不行。   
  4. 接受者地址:<input name="to" value="masterjc@126.com">   
  5. 主题:<input name="subject" value="dsadfsdadfasdfasss">   
  6. 附件:<input type="file" name="file">   
  7. 内容:<textarea rows="10" cols="60" name="context">asfdsafsafsadfsafdasdsfafas</   
  8. textarea>   
  9. 提交:<input type="submit">   
  10. </form>  
表单:
<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写的,就没用那些框框架架了,没有框架代码的侵入,下
次复制才复制的爽啊。。。)

 

Java代码 import java.io.IOException;   
  1. import java.io.PrintWriter;   
  2. import java.text.MessageFormat;   
  3. import java.util.Date;   
  4. import java.util.Properties;   
  5.   
  6. import javax.activation.DataHandler;   
  7. import javax.activation.FileDataSource;   
  8. import javax.mail.Message;   
  9. import javax.mail.Multipart;   
  10. import javax.mail.Session;   
  11. import javax.mail.Transport;   
  12. import javax.mail.internet.InternetAddress;   
  13. import javax.mail.internet.MimeBodyPart;   
  14. import javax.mail.internet.MimeMessage;   
  15. import javax.mail.internet.MimeMultipart;   
  16. import javax.mail.internet.MimeUtility;   
  17. import javax.servlet.ServletException;   
  18. import javax.servlet.http.HttpServlet;   
  19. import javax.servlet.http.HttpServletRequest;   
  20. import javax.servlet.http.HttpServletResponse;   
  21.   
  22. import com.oreilly.servlet.MultipartRequest;   
  23.   
  24. @SuppressWarnings("serial")   
  25. public class Send extends HttpServlet {   
  26.   
  27.     public void doPost(HttpServletRequest request, HttpServletResponse response)   
  28.             throws ServletException, IOException {   
  29.   
  30.         response.setContentType("text/html");   
  31.         PrintWriter out = response.getWriter();   
  32.         request.setCharacterEncoding("gbk");   
  33.            
  34.         //封装请求,这个处理很牛,一般人做不到。。。   
  35.         MultipartRequest re=new MultipartRequest(request,".",1024*1024,"gbk");   
  36.   
  37.         // 接收邮件类容   
  38.         String from = re.getParameter("from");   
  39.         String to = re.getParameter("to");   
  40.         String subject = re.getParameter("subject");   
  41.         //我把内容去掉了,为了是用模板   
  42.         //String context = re.getParameter("context");   
  43.         String secret = re.getParameter("secret");   
  44.         String filePath=re.getFilesystemName("file");   
  45.   
  46.         // 邮件的服务器地址,邮件服务器的服务器名   
  47.         String mailServerName = "smtp.qq.com";   
  48.   
  49.         try {   
  50.   
  51.             // 获得系统属性   
  52.             Properties prop = System.getProperties();   
  53.             // 设置属性   
  54.             prop.setProperty("mail.smtp.host", mailServerName);   
  55.                
  56.             prop.setProperty("mail.smtp.port""25");       
  57.   
  58.             prop.setProperty("mail.smtp.auth""true");   
  59.                
  60.                
  61.             String name=from.substring(0,from.indexOf("@"));   
  62.             MyAuthenticator au = new MyAuthenticator(name,secret);   
  63.   
  64.             // 建立邮件发送的连接   
  65.             Session session = Session.getDefaultInstance(prop, au);   
  66.                
  67.             // 创建邮件信息的载体   
  68.             Message message = new MimeMessage(session);   
  69.   
  70.             // 设置邮件相关属性   
  71.   
  72.             // 设置邮件发送地址   
  73.             message.setFrom(new InternetAddress(from));   
  74.   
  75.             // 点到点的发送   
  76.             //一对多发送只要改一个地方如下:   
  77.             /**  
  78.              *构建一个群发地址数组  
  79.             *InternetAddress[] adr=new InternetAddress[toMore.length];   
  80.             *for(int i=0;i<toMore.length;i++){  
  81.             *   adr[i]=new InternetAddress(toMore[i]);  
  82.             *}  
  83.             *Message的setRecipients方法支持群发。。注意:setRecipients方法是复数和点  
  84.             *到点不一样  
  85.             *message.setRecipients(Message.RecipientType.TO,adr);  
  86.  
  87.              */  
  88.                
  89.                
  90.             message.setRecipient(Message.RecipientType.TO, new InternetAddress(to));   
  91.   
  92.             // 设置邮件主题   
  93.             message.setSubject(subject);   
  94.             // 邮件发送时间   
  95.             message.setSentDate(new Date());   
  96.   
  97.                
  98.   
  99.             /*  
  100.              * 取得模板邮件的xml地址,这里用xml好处可大了,可以换行编写啊,  
  101.              * 如果你用properties文件,一个网页文件的内容都写在一行,看着都不舒服  
  102.              */  
  103.             String path=this.getServletContext().getRealPath("/")+"mailTemplate\\MyXml.xml";   
  104.             //这个类下面贴,就几行代码,没什么神奇的   
  105.             String str=new ReaderXML().read(path);   
  106.             <SPAN style="COLOR: #ff0000">Object[] obj=new Object[]{"zeke","123456","img1"};   
  107.             //这个MessageFormat是个好东西,不了解的去jdk看看,在java.text下面   
  108.             str = MessageFormat.format(str, obj);</SPAN>   
  109.             MimeBodyPart mbp1=new MimeBodyPart();   
  110.             mbp1.setContent(str, "text/html;charset=gbk");   
  111.                
  112.                
  113.             /*  
  114.              * 附件上传的代码,相信大家附件上传都没问题,就是这么才能把它变成模板资源  
  115.              呢?。。。O(∩_∩)O哈哈~。。。。很easy啦,,我也搞了好久,才发现。  
  116.              */  
  117.             MimeBodyPart mbp2=new MimeBodyPart();   
  118.             FileDataSource fds=new FileDataSource(filePath);   
  119.             DataHandler dh=new DataHandler(fds);   
  120.             mbp2.setDataHandler(dh);   
  121.             //这里很重要,这里是如何把附件变成模板可利用资源这   
  122.             //相当于给这个附件绑定一个名字   
  123.             //他到底怎么实现的底层,有几种猜想,不知道是不是,   
  124.             //有一种想法,是不是把这个数据域设成一个消息头,然后在本页面类引用啊   
  125.             //相当于cookie,不确定,这消息头也腻大了点啊,,O(∩_∩)O哈哈~   
  126.             //这里要是有前辈看到了,请告诉我一下,先谢谢了。。。   
  127.             <SPAN style="COLOR: #ff0000">mbp2.setHeader("Content-ID""img1");</SPAN>   
  128.             mbp2.setFileName(MimeUtility.encodeText(fds.getName()));   
  129.                
  130.   
  131.             Multipart mp=new MimeMultipart();   
  132.             mp.addBodyPart(mbp1);   
  133.             mp.addBodyPart(mbp2);   
  134.   
  135.                
  136.             message.setContent(mp);   
  137.   
  138.   
  139.             // 关键。。。。发送   
  140.             Transport.send(message);   
  141.   
  142.         } catch (Exception e) {   
  143.             e.printStackTrace();   
  144.         }   
  145.   
  146.         out.write("ok");   
  147.   
  148.         out.flush();   
  149.         out.close();   
  150.     }   
  151.   
  152. }  
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();
	}

}

 上面提到的读模板件的类

Java代码 import java.io.File;   
  1.   
  2. import org.dom4j.Document;   
  3. import org.dom4j.DocumentException;   
  4. import org.dom4j.Element;   
  5. import org.dom4j.io.SAXReader;   
  6.   
  7. public class ReaderXML {   
  8.        
  9.     public String read(String path){   
  10.            
  11.         String str=null;   
  12.            
  13.         str=reader(path);   
  14.            
  15.         return str;   
  16.     }   
  17.        
  18.     private String reader(String path){   
  19.            
  20.         SAXReader reader=new SAXReader();   
  21.         String str=null;   
  22.            
  23.         try {   
  24.                
  25.             Document d=reader.read(new File(path));   
  26.                
  27.             Element e=d.getRootElement();   
  28.                
  29.             Element htmle=e.element("html");   
  30.                
  31.             str=htmle.asXML();   
  32.                
  33.         } catch (DocumentException e) {   
  34.             e.printStackTrace();   
  35.         }   
  36.            
  37.            
  38.         return str;   
  39.            
  40.     }   
  41.   
  42. }  
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;
		
	}

}

 

Java代码 模板文件(.xml)   
  1. <?xml version="1.0" encoding="UTF-8"?>   
  2. <xml-body>   
  3.     <html>   
  4.   
  5.         <head>   
  6.   
  7.         </head>   
  8.         <body>   
  9.             <div id="main" style="width:966px; height:330px; text-align:left;   
  10.                 margin:3px 26px; background-color:#F5F5F5; border:1px   
  11.                 #E1E1E1 solid;">   
  12.                 <b>   
  13.                     userName:{0}   
  14.                     <br />   
  15.                     userPass:{1}   
  16.                     <br />   
  17.                     <a href="http://www.google.com">去Google看看</a>   
  18.                 </b>   
  19.                 <SPAN style="COLOR: #ff0000"><img src="cid:{2}" /></SPAN>   
  20.             </div>   
  21.         </body>   
  22.     </html>   
  23.   
  24. </xml-body>  
模板文件(.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>

 

Java代码 下面这个就不多说了,大家都知道   
  1.   
  2. import javax.mail.PasswordAuthentication;   
  3.   
  4. public class MyAuthenticator extends javax.mail.Authenticator {   
  5.     private String strUser;   
  6.     private String strPwd;   
  7.        
  8.     public String getStrUser() {   
  9.         return strUser;   
  10.     }   
  11.   
  12.     public void setStrUser(String strUser) {   
  13.         this.strUser = strUser;   
  14.     }   
  15.   
  16.     public String getStrPwd() {   
  17.         return strPwd;   
  18.     }   
  19.   
  20.     public void setStrPwd(String strPwd) {   
  21.         this.strPwd = strPwd;   
  22.     }   
  23.   
  24.     public MyAuthenticator(String user, String password) {   
  25.         this.strUser = user;   
  26.         this.strPwd = password;   
  27.     }   
  28.   
  29.     protected PasswordAuthentication getPasswordAuthentication() {   
  30.         return new PasswordAuthentication(strUser, strPwd);   
  31.     }   
  32.   
  33. }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值