基于JavaMail的电子邮件群发

来源 :电脑知识与技术 | 被引量 : 0次 | 上传用户:silversandcgliu
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘要:电子邮件是Internet上信息传递的一种重要工具,邮件的群发增加了信息发布的主动性。本文实现了基于JavaMail的电子邮件群发,并加入了多线程技术,使得发送更为快捷。
  关键词:JavaMail;群发;多线程
  中图分类号:TP393文献标识码:A 文章编号:1009-3044(2007)17-31285-02
  E-mail group sending based on JavaMail
  QU Pei,LIU Li,GE Zhen
  (College of Electronic Communication, Wuhan University of Science and Engineering, Wuhan 430073,China)
  Abstract:The email is an important tool for information transmission on the Internet; the email group-sending emphasizes the initiative of information issues. It realized the email group-sending based on JavaMail in this paper, and has added the multi-thread technology, which helps to realize the shortcut of transmission.
  Key words:JavaMail; group sending; Multithreading;
  
  1 引言
  
  近年来Internet飞速发展,Internet上信息的传递方式备受关注,电子邮件是Internet上信息传递的重要方式,电子邮件的群发使信息的发布有更多的主动性和方便性。本文介绍了基于JavaMail的电子邮件群发的设计及实现,并且在发送中加入多线程大大提高了发送效率。
  
  2 JavaMail API相关介绍
  
  JavaMail API是一种可选的、能用于读取、编写和发送电子消息的包(标准扩展),它提供了用于读取和发送邮件的一般邮件功能,可以使用这个包来创建邮件用户代理(Mail User Agent ,MUA) 类型的程序,用户可以与MUA类型的程序交互,MUA依靠MTA(Mail Transfer Agent,MTA)处理实际的发送任务。除此之外,JavaMail 需要 JavaBeans Activation Framework(JAF)来处理不是纯文本的邮件内容。
  JavaMail API的设计为收发信息提供与协议无关的访问。一方面是使用特定的协议语言,另一方面是如何让发送和接收独立于提供程序/协议的消息。特定的协议语言主要包括:SMTP、POP、IMAP、MIME。JavaMail API的核心类有:Javax.mail.Session、Javax.mail.Message、Javax.mail.Address、Javax.mail.Authenticator、Javax.mail.Transport、Javax.mail.Store、Javax.mail. Folder。这几个类封装在mail. jar中,此外要实现带附件的邮件收发功能需要加上activation. jar。
  
  3 利用JavaMail电子邮件群发的具体实现
  
  3.1 创建一个Bean
   JavaBeans是一种Java语言写成的可重用组件,是Sun微系统的一个面向对象的编程接口。对于邮件的群发,先创建一个Bean,如下:
  public class MailInfo {
  private String smtpServer = null;//发送方smtp
  private String userName = null;//发送方邮件用户名
  private String password = null; //发送方邮件密码
  private String subject = null;//发送信件主题
  private String attachment = null;//发送信件附件
  private String to = ""; //发送地址
  private String from = null; //发送来源
  private String[] MutliTo = null; //群发用户
  public String[] getMutliTo() {
  return MutliTo;}
  public void setMutliTo(String[] mutliTo) {
  MutliTo = mutliTo;}
  ………………
  public String getAttachment() {
  return attachment;}
  public void setAttachment(String attachment) {
  this.attachment = attachment;}}
  3.2 群发的具体实现
  这里分为几个步骤,分别说明群发的具体实现:
  (1)连接SMTP服务器
  Properties props = new Properties();//创建属性对象
  props.put("mail.smtp.host", smtpServer);
  //设置smtp服务器地址
  props.put("mail.smtp.auth", "true");
  //设置服务器smtp需要验证
  (2)创建新邮件并群发
  Session sendMailSession = Session.getInstance(props, null);
  //创建过程对象
  MimeMessage newMessage = new MimeMessage(sendMailSession);
  //创建邮件对象
  newMessage.setSubject(subject);
  //设主题
  newMessage.setSentDate(new Date());
  //设发送时间
  newMessage.setFrom(new InternetAddress(mail.getFrom()));
  //设发信人
  InternetAddress[] address = new InternetAddress[mail.getMutliTo().length];
  //群发地址
   for (int i = 0; i < mail.getMutliTo().length; i++) {
  //循环发送
   address[i] = new InternetAddress( (mail.getMutliTo())[i]);}
  newMessage.setRecipients(Message.RecipientType.TO, address);
  (3)处理附件
  if (mail.getAttachment()= =null) {
  newMessage.setDataHandler(new DataHandler(mail.getContent(),
  "text/plain"));}
  else {
  MimeBodyPart messageBodyPart = new MimeBodyPart();
  messageBodyPart.setDataHandler(new DataHandler(mail.getContent(), "text/plain"));
  //附件是文本用text/plain,是html格式用text/html
  Multipart multipart = new MimeMultipart();
  multipart.addBodyPart(messageBodyPart);
  messageBodyPart = new MimeBodyPart();
  DataSource source = new FileDataSource(mail.getAttachment());
  messageBodyPart.setDataHandler(new DataHandler(source));
  File fn = new File(mail.getAttachment());
  String fileName = fn.getName();
  if (fileName != null && !"".equals(fileName)) {
  fileName = new String(fileName.getBytes("gb2312"), "iso-8859-1");}
  messageBodyPart.setFileName(fileName);
  multipart.addBodyPart(messageBodyPart);
  newMessage.setContent(multipart);}
  (4) 连接smtp服务器,并检查是否通过smtp发信验证
  Transport transport = sendMailSession.getTransport("smtp");
  transport.connect(smtpServer, SmtpUser, SmtpPwd);
  transport.sendMessage(newMessage, newMessage.getAllRecipients());
  transport.close();
  
  4 群发中加入多线程
  
  多线程的核心是多个代码块并发执行,本质特点是各代码块之间代码乱序执行。综合其特点看出在群发邮件中实现多线程,将会大大提高发送效率。这里分两部分来说明多线程的实现,如下:
  (1)实现Runnable接口
  Runnable接口只有一个方法run(),声明自己的类实现Runnable接口并提供这一方法,将我们的线程代码写入其中,就完成了这一部分的任务。
  public class MutliThread
  implements Runnable {
  public synchronized void run() {
  MailInfo mInfo = new MailInfo();//实例化2.1的Bean
  String[] usersMail = {"地址1",…, "地址n"};//群发地址
  mInfo.setMutliTo(usersMail);
  //得到群发地址,信件主题、内容略
  MailHandle mail = new MailHandle();//群发写的类
  mail.send(mInfo);//send为2.2所有内容写入此方法
  }}
  (2)创建Thread类的实例
   Thread[] thread = new Thread[num];//num是要创建的线程数
   for (int i = 0; i < num; i++) {
   thread[i] = new Thread();
   thread[i].start(); }
  
  5 结束语
  
  本文简单介绍了JavaMail API,具体实现了基于JavaMail的电子邮件群发,给信息的传递提供了一种更为方便、快捷的工具。在群发基础上加入了多线程技术,使电子邮件的群发更加高效。
  
  参考文献:
  [1]王勇,陈楠,基于Java语言的电子邮件系统的实现,现代电子技术[J],2004.(9):26-28.
  [2]沈洪良,朱进国,一种使用JavaMail的邮件直接发送方法及其实现[J],东华大学学报(自然科学版),2004(30,5):74-75.
  [3]周治国,李文印,万吉,等,基于Java的E-mail系统客户端的设计与实现[J],2004(22,2):169-172.
  [4]Sun Microsystems.Inc JavaMail API Design SPecificationV1.2.2000.
其他文献
摘要:本文针对家庭网络分布式环境,探讨基于XML语言描述信息家电基本信息的方法,实现了基于JSP+JavaBean+Servlet发布信息家电信息,并自动形成远程的控制界面,同时利用JavaRMI技术实现远程对信息家电的控制,这对于信息家电远程控制的实际应用具有重要意义。  关键词:XML;信息家电;JavaRMI;JSP+JavaBean+Servlet  中图分类号:TP319 文献标识码:A
期刊
摘要:介绍CAN(控制局域网)总线的特点,对CAN总线智能通信节点的工作原理进行了分析,给出了采用AT89S52型单片机构成的通信节点电路原理图和应用单片机汇编语言编写的SJA1000初始化程序,通过节点的软硬件设计,说明了CAN总线的技术优势和应用前景。  关键词:CAN总线; SJA1000; 智能节点; AT89S52  中图分类号:TP393文献标识码:A 文章编号:1009-3044(2
期刊
摘要:本文针对当前存在的信用缺失问题,就如何设计和实现一个基于.Net架构的信用信息交换支撑平台进行了深入研究和分析。从系统结构、数据交换拓扑结构、主要组件、数据交换过程等方面进行了论述,给出了一个基于.NET架构的信用信息交换支撑平台的设计与实现方案。  关键词:信用信息,数据交换,.NET  中图分类号:TP311文献标识码:A 文章编号:1009-3044(2007)17-31185-02 
期刊
摘要:ARP协议主要实现了网络层地址到数据链路层地址的动态映射,并且ARP协议具有无序性、无确认性、动态性、无安全机制等特性。利用这些特性,攻击者可以较容易的实现在局域网内的ARP欺骗攻击,本文详细描述了利用ARP协议的特性进行欺骗攻击的原理和过程,包括主动攻击和被动攻击,表现形式有伪造ARP应答包和克隆主机。最后,提出了针对攻击可以采取的一些策略。  关键词:ARP;网络攻击;网络防御  中图分
期刊
摘要:本文主要探讨了P2P技术及其网络模式中单个主机系统的网络安全策略分析,首先,对P2P概念、网络模型进行分析,指出P2P技术应用的特点,存在的安全问题;接着提P2P网络中Windows系统存在的安全问题及应对策略,最后提出防范措施和技巧。  关键词:P2P,网络安全,Windows系统,策略   中图分类号:TP393文献标识码:A文章编号:1009-3044(2007)17-31266-01
期刊
摘要:多重Agent系统(MAS)已经成为系统开发设计的标准规范,通过智能Agent的特性,可以让系统开发人员可以构建更具效率与弹性的应用系统。本文参考工作流程管理联盟(WfMC)提出的一般化工作流程产品架构,并结合多Agent的设计概念,提出以多Agent为基础的工作流程管理系统的框架,并在JADE平台进行实现。  关键词:工作流程控制;多Agent  中图分类号:TP391 文献标识码:A文章
期刊
摘要:随着网络技术的不断发展,传统的防火墙已经逐渐不能满足网络安全的需要。针对有传统防火墙所带来的问题,提出了一种基于Kerberos认证的分布式防火墙的新型体系结构,在保留传统防火墙优点的基础上,解决了传统防火墙的不安全隐患。为大量内部网络用户,需要重点保护的网络资源提供一个可管理的、分布式的安全网络环境。  关键词:Kerberos协议;分布式防火墙系统;防火墙  中图分类号:TP393文献标
期刊
摘要:论述了如何利用Delphi开发LRC歌词编辑器,包括LRC歌词的编辑、显示以及保存。  关键词:LRC;Mp3;歌词编辑  中图分类号:TP311文献标识码:A 文章编号:1009-3044(2007)18-31663-04  Using Delphi development LRC lyrics Editor  WU Chao-bin  (Fujian College of Water C
期刊
摘要:Web技术在interner的盛行,使得动态网页成为网络的主流,而ASP技术为开发功能强大的的动态网页提供了有效的途径。用ASP技术构建学校内的师生交流系统为学校的管理提供了有效的途径。  关键词:Web2.0;ASP;SQL Server  中图分类号:TP391 文献标识码:A文章编号:1009-3044(2007)17-31211-02  Design and Implementati
期刊
摘要:本文对Web Service的相关技术和标准进行了讨论,并对Web Service的体系结构、应用领域以及未来发展方向做出了研究和分析。  关键词:WSDL;XML;SOAP;Web Service;HTTP  中图分类号:TP393文献标识码:A文章编号:1009-3044(2007)17-31257-02  Study Of Web Service Technology  SHENG H
期刊