首页 | 邮件资讯 | 技术教程 | 解决方案 | 产品评测 | 邮件人才 | 邮件博客 | 邮件系统论坛 | 软件下载 | 邮件周刊 | 热点专题 | 工具
网络技术 | 操作系统 | 邮件系统 | 客户端 | 电子邮箱 | 反垃圾邮件 | 邮件安全 | 邮件营销 | 移动电邮 | 邮件软件下载 | 电子书下载

邮件服务器

技术前沿 | Qmail | IMail | MDaemon | Exchange | Domino | 其它 | Foxmail | James | Kerio | JavaMail | WinMail | Sendmail | Postfix | Winwebmail | Merak | CMailServer | 邮件与开发 | 金笛 |
首页 > 邮件服务器 > JavaMail > Javamail操作指南:实例代码解析 > 正文

Javamail操作指南:实例代码解析

出处:赛迪网 作者:bromon 时间:2005-7-12 13:53:00
怎样才算比较完整的Javamail操作指南?我想应该包括绝大多数基本的email操作,能够应付一般的应用。在本指南中主要囊括了以下内容:

● 发送email:包括文本邮件、HTML邮件、带附件的邮件、SMTP验证

● 接收email:pop3远程连接、收取不同MIME的邮件、处理附件

我想有了上述功能的介绍,应该可以应付很多email的相关应用了。首先需要配置环境。需要的包是mail.jar和activation.jar。高版本的J2SDK EE自带。

一、 邮件的发送

下面了弄个发邮件的Hello World,热热身:


/************* 
 Name:TextMailSender.java 
 Author:Bromon 
 Version:1.0 
 Date:2004-4-26 
 Note:发送email到bromon@163.com,
 需要安装SMTP服务器 
 *************/ 
 package org.bromon.mail; 
 import javax.mail.*; 
 import javax.mail.internet.*; 
 import java.util.*; 
 public class TextMailSender 
 { 
 public static void main(String args[]) 
 { 
  try 
  { 
   Properties prop=new Properties(); 
   //指定要使用的SMTP
   服务器为bromon2k 
   prop.put("mail.smtp.host","bromon2k"); 
   Session mailSession=Session.getDefaultInstance(prop); 

   //发件人地址 
   InternetAddress from=new InternetAddress(
   "bromon@bromon2k"); 
   //收件人地址 
   InternetAddress to=new InternetAddress(
   "bromon@163.com"); 
    
   MimeMessage msg=new MimeMessage(mailSession); 
   msg.setFrom(from); 
   msg.addRecipient(
   javax.mail.Message.RecipientType.TO,to); 
   //发信日期 
   msg.setSentDate(new java.util.Date()); 
   //title 
   msg.setSubject("你好"); 
   //邮件正文 
   msg.setText("hello,bromon"); 
   Transport.send(msg); 
  }catch(Exception e) 
  { 
   System.out.println(e); 
  } 
 } 
 }


程序很简单,但是它是不能运行的。除非你的机器上安装了一个SMTP服务器,而且你的机器还叫做bromon2k。写这么一段不能执行的程序不是因为其他一些原因,而是想让各位对javamail有个基本印象。下面演示的是如何通过163、sohu等email服务商提供的免费邮箱来发邮件,基本操作和上面的一样,只是多一个SMTP验证而已:

/* 
 * Created on 2004-4-26 
 */ 
 package org.bromon.mail; 
 import javax.mail.*; 
 import java.util.*; 
 import javax.mail.internet.*; 

 /** 
 * @author Bromon 
 */ 
 public class SenderWithSMTPVer 
 { 
 String host=""; 
 String user=""; 
 String password=""; 

 public void setHost(String host) 
 { 
  this.host=host; 
 } 

 public void setAccount(
 String user,String password) 
 { 
  this.user=user; 
  this.password=password; 
 } 

 public void send(String from,String to,
 String subject,String content) 
 { 
  Properties props = new Properties(); 
  props.put("mail.smtp.host", host);
  //指定SMTP服务器 
  props.put("mail.smtp.auth", "true");
  //指定是否需要SMTP验证 
  try 
  { 
   Session mailSession = Session.getDefaultInstance(props); 
    
   mailSession.setDebug(true);
   //是否在控制台显示debug信息 
    
   Message message=new MimeMessage(mailSession); 
   message.setFrom(new InternetAddress(from));
   //发件人 
   message.addRecipient(Message.RecipientType.TO,
   new InternetAddress(to));
   //收件人 
    
   message.setSubject(subject);
   //邮件主题 
   message.setText(content);
   //邮件内容 
   message.saveChanges(); 
    
   Transport transport = mailSession.getTransport("smtp"); 
   transport.connect(host, user, password); 
   transport.sendMessage(message, message.getAllRecipients()); 
   transport.close(); 
  }catch(Exception e) 
  { 
   System.out.println(e); 
  } 
   
 } 

 public static void main(String args[]) 
 { 
  SenderWithSMTPVer sm=new SenderWithSMTPVer(); 

  sm.setHost("smtp.163.com");
  //指定要使用的邮件服务器 
  sm.setAccount("abc","123");
  //指定帐号和密码 

  /* 
 * @param String 发件人的地址 
   * @param String 收件人地址 
   * @param String 邮件标题 
   * @param String 邮件正文 
  */ 
  sm.send("abc@163.com","bromon@163.com","标题","内容"); 
 } 

 }


这段程序好像也不需要解释了吧,把SMTP地址、帐号、密码等配置信息写到Properties里面,Java里面很多API都需要这么干,比如再程序中加入对代理服务器的支持等。上面的程序修改一下服务器地址、帐号、密码就可以使用,非常简单。
如何发送一个HTML格式的Email呢?也很简单,再邮件正文中写入HTML代码,然后指定邮件的ContentType就OK,下面只给出关键代码:


……… 
 MimeMessage msg=new MimeMessage(mailSession); 
 msg.setContent(content,"text/html"); 
 msg.setText(“<html><body><h1>下面的,你们好吗?</body></html>”); 
 ………


下面是发送带有附件的email,稍微复杂一点,而且和前面的程序有一些不同,请仔细一点,同时需要一点IO的知识。相同的代码就不再列出,只写关键部分:

import javax.mail.*; 
 import javax.mail.internet.*; 
 import javax.activation.*; 
 import java.util.*; 
 ………. 
 MimeMessage msg=
 new MimeMessage(mailSession); 
 msg.setSentDate(new Date()); 
 msg.setSubject("hello"); 

 MimeBodyPart textBodyPart=new MimeBodyPart(); 
 textBodyPart.setText(“邮件正文”); 

 MimeBodyPart fileBodyPart=new MimeBodyPart(); 
 FileDataSource fds=new FileDataSource("GIS.rar");
 //要发送的附件 
 fileBodyPart.setDataHandler(new DataHandler(fds)); 
 fileBodyPart.setFileName(fds.getName()); 
 Multipart container=new MimeMultipart(); 
 container.addBodyPart(textBodyPart); 
 container.addBodyPart(fileBodyPart); 
 msg.setContent(container); 
 Transport.send(msg); 
 …………


二、 邮件的收取

通常情况下我们都使用pop3协议来收邮件,IMAP现在就不涉及了。用一个程序就可以基本包括了收邮件的功能。邮件大致可以分三种:纯文本邮件、含有其他数据的文本邮件、含有附件的邮件。

/* 
 * Created on 2004-4-26 
 */ 
 package org.bromon.mail; 
 import javax.mail.*; 
 import java.util.*; 
 import java.io.*; 

 /** 
 * @author Bromon 
 */ 
 public class Receiver 
 { 
 Folder inbox; 
 Store store; 

 //连接邮件服务器,获得所有邮件的列表 
 public Message[] getMail(
 String host,String name,String password) throws Exception 
 { 
  Properties prop=new Properties(); 
  prop.put("mail.pop3.host",host); 
  Session session=Session.getDefaultInstance(prop); 
  store=session.getStore("pop3"); 
  store.connect(host,name,password); 
   
  inbox=store.getDefaultFolder().getFolder("INBOX"); 
  inbox.open(Folder.READ_ONLY); 
   
  Message[] msg=inbox.getMessages(); 
   
  FetchProfile profile=new FetchProfile(); 
  profile.add(FetchProfile.Item.ENVELOPE); 
  inbox.fetch(msg,profile); 
   
  return(msg); 
 } 

 //处理任何一种邮件都需要的方法 
 private void handle(Message msg) throws Exception 
 { 
  System.out.println("邮件主题:"+msg.getSubject()); 
  System.out.println(
  "邮件作者:"+msg.getFrom()[0].toString()); 
  System.out.println("发送日期:"+msg.getSentDate()); 
 } 

 //处理文本邮件 
 public void handleText(Message msg) throws Exception 
 { 
  this.handle(msg); 
  System.out.println("邮件内容:"+msg.getContent()); 
 } 

 //处理Multipart邮件,包括了保存附件的功能 
 public void handleMultipart(Message msg) throws Exception 
 { 
  String disposition; 
  BodyPart part; 
   
  Multipart mp=(Multipart)msg.getContent(); 
  int mpCount=mp.getCount();
  //Miltipart的数量,用于除了多个part,比如多个附件 
  for(int m=0;m<mpCount;m++) 
  { 
   this.handle(msg); 
    
   part=mp.getBodyPart(m); 
   disposition=part.getDisposition(); 
   if(disposition!=null && disposition.equals(Part.ATTACHMENT))
   //判断是否有附件 
   { 
    //this.saveAttach(part);
	//这个方法负责保存附件,
	注释掉是因为附件可能有病毒,
	请清理信箱之后再取掉注释 
   }else{ 
    System.out.println(part.getContent()); 
   } 
  } 
 } 

 private void saveAttach(BodyPart part) throws Exception 
 { 
  String temp=part.getFileName();
  //得到未经处理的附件名字 
  String s=temp.substring(11,temp.indexOf("?=")-1);
  //去到header和footer 
   
  //文件名一般都经过了base64编码,下面是解码 
  String fileName=this.base64Decoder(s); 
  System.out.println("有附件:"+fileName); 
   
  InputStream in=part.getInputStream(); 
  FileOutputStream writer=
  new FileOutputStream(new File(fileName)); 
  byte[] content=new byte[255]; 
  int read=0; 
  while((read=in.read(content))!=-1) 
  { 
   writer.write(content); 
  } 
  writer.close(); 
  in.close(); 
 } 

 //base64解码 
 private String base64Decoder(String s) throws Exception 
 { 
  sun.misc.BASE64Decoder decoder =
  new sun.misc.BASE64Decoder(); 
  byte[] b=decoder.decodeBuffer(s); 
   
  return(new String(b)); 
 } 

 //关闭连接 
 public void close() throws Exception 
 { 
  if(inbox!=null) 
  { 
   inbox.close(false); 
  } 
   
  if(store!=null) 
  { 
   store.close(); 
  } 
 } 

 public static void main(String args[]) 
 { 
  String host="pop.163.com"; 
  String name="bromon"; 
  String password="My password"; 
   
  Receiver receiver=new Receiver(); 
   
  try 
  {    
   Message[] msg=receiver.getMail(
   host,name,password); 
    
   for(int i=0;i<msg.length;i++) 
   { 
    if(msg[i].isMimeType("text/*"))
	//判断邮件类型 
    { 
     receiver.handleText(msg[i]); 
    }else{ 
     receiver.handleMultipart(msg[i]); 
    } 
    System.out.println
	("****************************"); 
   } 
   receiver.close(); 
  }catch(Exception e) 
  { 
   System.out.println(e); 
  } 
 } 
 }
,
相关文章 热门文章
  • Factory Method模式在Javamail中的应用
  • JavaMail常见问题之安装和配置问题解答
  • 通过JavaMail访问Hotmail邮箱
  • JavaMail之POP3协议判断新邮件的思路
  • JavaMail实现邮件特快专递
  • JavaMail 之 杜绝邮件乱码
  • 利用JavaMail收/发Gmail邮件(SSL)
  • Javamail处理unicode-1-1-utf-7编码的邮件
  • 用javamail收取hotmail的退信
  • 简化JavaMail:小巧 Jakarta Commons-Email
  • JavaMail API细节详细解析大全
  • Javamail的开发与应用总结经验之二
  • 在JSP中使用JavaMail
  • 通过JavaMail访问Hotmail邮箱
  • JavaMail API细节详细解析大全
  • 利用JavaMail收/发Gmail邮件(SSL)
  • JavaMail之POP3协议判断新邮件的思路
  • javamail发送邮件
  • javamail写的解析MimeMessage的程序
  • Javamail的开发与应用总结经验之一
  • JavaMail实现邮件特快专递
  • Javamail操作指南:实例代码解析
  • JavaMail 之 杜绝邮件乱码
  • 简化JavaMail:小巧 Jakarta Commons-Email
  • 自由广告区
     
    最新软件下载
  • SharePoint Server 2010 部署文档
  • Exchange 2010 RTM升级至SP1 教程
  • Exchange 2010 OWA下RBAC实现的组功能...
  • Lync Server 2010 Standard Edition 标..
  • Lync Server 2010 Enterprise Edition...
  • Forefront Endpoint Protection 2010 ...
  • Lync Server 2010 Edge 服务器部署文档
  • 《Exchange 2003专家指南》
  • Mastering Hyper-V Deployment
  • Windows Server 2008 R2 Hyper-V
  • Microsoft Lync Server 2010 Unleashed
  • Windows Server 2008 R2 Unleashed
  • 今日邮件技术文章
  • 腾讯,在创新中演绎互联网“进化论”
  • 华科人 张小龙 (中国第二代程序员 QQ...
  • 微软推出新功能 提高Hotmail密码安全性
  • 快压技巧分享:秒传邮件超大附件
  • 不容忽视的邮件营销数据分析过程中的算..
  • 国内手机邮箱的现状与未来发展——访尚..
  • 易观数据:2011Q2中国手机邮箱市场收入..
  • 穿越时空的爱恋 QQ邮箱音视频及贺卡邮件
  • Hotmail新功能:“我的朋友可能被黑了”
  • 入侵邻居网络发骚扰邮件 美国男子被重..
  • 网易邮箱莫子睿:《非你莫属》招聘多过..
  • 中国电信推广189邮箱绿色账单
  • 最新专题
  • 鸟哥的Linux私房菜之Mail服务器
  • Exchange Server 2010技术专题
  • Windows 7 技术专题
  • Sendmail 邮件系统配置
  • 组建Exchange 2003邮件系统
  • Windows Server 2008 专题
  • ORF 反垃圾邮件系统
  • Exchange Server 2007 专题
  • ISA Server 2006 教程专题
  • Windows Vista 技术专题
  • “黑莓”(BlackBerry)专题
  • Apache James 专题
  • 分类导航
    邮件新闻资讯:
    IT业界 | 邮件服务器 | 邮件趣闻 | 移动电邮
    电子邮箱 | 反垃圾邮件|邮件客户端|网络安全
    行业数据 | 邮件人物 | 网站公告 | 行业法规
    网络技术:
    邮件原理 | 网络协议 | 网络管理 | 传输介质
    线路接入 | 路由接口 | 邮件存储 | 华为3Com
    CISCO技术 | 网络与服务器硬件
    操作系统:
    Windows 9X | Linux&Uinx | Windows NT
    Windows Vista | FreeBSD | 其它操作系统
    邮件服务器:
    程序与开发 | Exchange | Qmail | Postfix
    Sendmail | MDaemon | Domino | Foxmail
    KerioMail | JavaMail | Winwebmail |James
    Merak&VisNetic | CMailServer | WinMail
    金笛邮件系统 | 其它 |
    反垃圾邮件:
    综述| 客户端反垃圾邮件|服务器端反垃圾邮件
    邮件客户端软件:
    Outlook | Foxmail | DreamMail| KooMail
    The bat | 雷鸟 | Eudora |Becky! |Pegasus
    IncrediMail |其它
    电子邮箱: 个人邮箱 | 企业邮箱 |Gmail
    移动电子邮件:服务器 | 客户端 | 技术前沿
    邮件网络安全:
    软件漏洞 | 安全知识 | 病毒公告 |防火墙
    攻防技术 | 病毒查杀| ISA | 数字签名
    邮件营销:
    Email营销 | 网络营销 | 营销技巧 |营销案例
    邮件人才:招聘 | 职场 | 培训 | 指南 | 职场
    解决方案:
    邮件系统|反垃圾邮件 |安全 |移动电邮 |招标
    产品评测:
    邮件系统 |反垃圾邮件 |邮箱 |安全 |客户端
    广告联系 | 合作联系 | 关于我们 | 联系我们 | 繁體中文
    版权所有:邮件技术资讯网©2003-2010 www.5dmail.net, All Rights Reserved
    www.5Dmail.net Web Team   粤ICP备05009143号