- 浏览: 207355 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
fuemma:
有木有学习资料
Ruby -
weijavamen:
谢谢楼主啦!LZ能共享你的类文件吗?我的邮箱:35303318 ...
cos + ajax 文件上传 -
lzysystem:
你的部署方法下载不了,能不能给我发一份,谢谢,我的邮箱是lzy ...
Lucene 建立索引数据库 实现搜索网页 -
ybbkd2:
WebLogic Server 群集由多个 WebLogic ...
weblogic集群 -
lonelydog:
真是太好了,先下载下来再说。
cos + ajax 文件上传
摘 要:邮件群发是消息在Internet传递的最好办法,同时也是垃圾邮件的来源。本文以使用JAVAMAIL为例,讨论实现大规模邮件发送的方法和技巧。 关键字:SMTP、MIME、JAVAMAIL、群发邮件
一、引言 邮件群发是Internet生活中最常见的一种信息传递方式,其传递信息的主动性、高效率和低费用而被众多商家广泛采用。我们的电子邮箱随之充满了各种类型的商业邮件,一般称这些商业邮件为垃圾邮件。本文笔者运用JAVA语言开发了一个基于SMTP服务器的邮件群发软件,在以下内容中将逐一介绍SMTP协议,JAVAMAIL包,以及邮件群发程序的片段等。 二、简单邮件传输协议与JAVAMAIL类库 1.简单邮件传输协议(SMTP)从1982年起被用来在不同计算机系统间传递电子邮件。SMTP使用简单的ASCII码文本命令,命令定义长度为4个字符。SMTP基本命令集及功能如表一所示。
表一 绝大多数SMTP系统采用一种标准的邮件报文格式,即RFC822来“规范”邮件的形式。RFC822明确的划分邮件为两个部分,一部分称为邮件头,起其作用是标识邮件;第二部分是邮件体。 邮件头中包括: 1)Received:用来标识将邮件从最初发送者到目的地进行中间转发的SMTP服务器,其中含有发信人及发信服务器真实的信息。 2)Return-path:用来标识邮件发送到目的服务器所经过的路径。 3)From:显示发信人的地址。格式为From:user-name。 4)Date:记录邮件发送时间。 5)Destination:记录收邮件地址, 标识电子邮件的接受方地址,这些地址是纯粹地信息,SMTP仅通过RCPT命令发送信件。包括To主收件人,Cc抄送收件人,Bcc暗抄送收件人,格式为To/Cc/Bcc:address。 6)Resent:表示一封邮件处于某中原因需要从客户端再次发送。 2.JAVAMAIL关于邮件操作最新包是JavaMail1.2,有四个大类,如表二所示。
表二 这些类操作分别属于mailapi.jar(文件包含核心API类),smtp.jar(实现SMTP协议功能),pop3.jar(实现POP3协议功能),imap.jar(包含IMAP协议功能)等四个文件。同时这四个文件都被包含在mail.jar中,如过图省事的话,直接包含mail.jar即可。 如果要实现带附件的邮件收发功能,还需要包含activation.jar,它提供通过二进制数据流的形式处理MIME类型的访问。 |
三、程序举例 1.首先是连接SMTP服务器,JAVAMAIL1.2不能实现SMTP服务的功能,但可以连接已有的SMTP服务器。 //创建一个属性对象 Properties props=System.getProperties(); //创建系统属性对象 props.setProperty("mail.transport.protocol","smtp"); //设置使用smtp协议 props.setProperty("mail.smtp.host",server); //设置SMTP服务器地址 props.setProperty("mail.smtp.port",""+port); //设置SMTP端口号 props.setProperty("mail.smtp.auth","true"); //SMTP服务用户认证 //创建一个过程对象 javax.mail.Session sess = javax.mail.Session.getDefaultInstance(props, null); 2.创建一封新邮件,一般定义该MimeMessage创建一个邮件对象。 MimeMessage msg=new MimeMessage(sess); //创建邮件对象 msg.setSubject(“邮件群发”); //设置邮件主题 msg.setSentDate(new Date()); //设置发信日期 msg.setFrom(Address address); //设置发信人 邮件地址只要符合带有“@”符号并且使用“.”分成三段的字符串都会被SMTP服务器接受,发送广告邮件的商家一般都会在这里修改发信人地址,所以我们的收件箱中看见的广告邮件显示中发信人内容一些的根本不存在邮件地址。如果想查看真正地发信人,应该查看邮件头中Received的内容。 //设置主收件人 msg.setRecipients(Message.RecipientType.TO,Address toaddress); //设置抄送收件人 msg.addRecipients(Message.RecipientType.CC,Address coaddress); //设置暗抄送人 msg.addRecipients(Message.RecipientType.BCC,Address bcoaddress); SMTP允许一封邮件有多个接受者,我们可以利用这个特点,在这三个收件人中填写多个收件人地址来提高大规模发邮件效率。另外Bcc这个字段可以隐藏收件人的地址,你有时可能发现邮件的收件人不是自己却收到了这封邮件,就是利用了暗抄这个属性。 3.邮件体一般分为邮件正文本部分和附件部分。正文部分需要设置文本的格式,包括text文本类型,messafe报文类型,image图象类型,video视频类型,audio声音类型,application应用程序类型,multipart混合类型等。如下例, String m_body; //为需要添加文本内容 MimeMultipart content=new MimeMultipart(); //创建邮件体对象 if(content==null) return false; MimeBodyPart part=new MimeBodyPart(); //创建文本部分对象 String type="text/plain"; //文本类型默认为text/plain if(m_body.startsWith("<html>") || m_body.startsWith("<HTML>")) type="text/html"; //如果是网页形式的内容,则改变类型为text/html part.setText(m_body); part.setHeader("Content-Type",type); content.addBodyPart(part); msg.setContent(content); //添加文本至邮件中 msg.saveChanges(); //保存修改 4.如何向的邮件中添加附件,利用多用途互联网邮件扩展(MIME)协议可以直接二进制数据添加到标准的RFC822邮件中。在JAVAMAIL中实现方法如下, String filename; //用于存储文件名称与存放路径 if(filename!=null || filename.length()>0){ MimeBodyPart part=new MimeBodyPart();//创建MIME对象 DataSource fds = new FileDataSource(filename); //创建文件流对象 part.setDataHandler(new DataHandler(fds)); part.setFileName(MimeUtility.encodeText(fds.getName())); content.addBodyPart(part); //添加二进制编码至邮件体中 } msg.setContent(content); //添加文本至邮件中 msg.saveChanges(); //保存修改 5.邮件的基本内容设置完毕,发送SMTP电子邮件。 Transport trans=sess.getTransport(); //创建发送对象 trans.send (msg); //发送 6.如何群发邮件,首先我们要有一个邮件地址列表,邮件地址列表可以向从公共网站获得,也可以根据某单位名称按字典法生成,或者购买用户表。邮件地址列表应该按行存放每个邮件地址。 发信的速度和SMTP的响应速度有密切的关系,所以因该充分利用一封邮件可以有多个接受地址的条件,将邮件地址按组读入进行发送,才能提高邮件群发地效率。下面的例子是每一封信发给10个邮件地址。 import java.io.*; import java.net.*; import java.util.*; import javax.mail.*; import javax.activation.*; import javax.mail.internet.*; class massmail(){ try{ FileReader fis = new FileReader(“邮件列表文件”); BufferedReader dis = new BufferedReader(fis); int i=0; while((fileline = dis.readLine())!=null){ if((i%10)==0) MimeMessage msg=new MimeMessage(sess); …… if((i%10)!=0){ //多个邮件地址之间要加“,” maillist = maillist + “,” + fileline; }else{ maillist = fileline; } i++; if((i%10)==0){ //一封邮件在暗抄地址处加10个收件人 msg.addRecipients(Message.RecipientType.BCC, maillist); …… //设置邮件内容 Transport trans=sess.getTransport(); //创建发送对象 trans.send (msg); //发送 } } fis.close(); }catch(Exception error){ System.out.println("Exception:" + error); } |
发表评论
-
Java EE 5.0能取代Struts,Spring和Hibernate吗?
2007-01-05 18:29 782... -
我们为什么需要Java EE 5.0?
2007-01-06 10:33 678... -
RIA
2007-01-19 11:39 674RIA技术概览 互 ... -
java P2P
2007-01-22 19:44 1148英文原文地址:http://www ... -
SOA的发展历史与标准规范
2007-02-25 09:31 685作者:长风 来源:IT ... -
单点登陆(Single Sign-On,SSO)
2007-03-08 16:14 7441 ... -
化解.NET与J2EE争端
2007-03-15 18:38 551作者:Liusf 来源:bui ... -
BEA WebLogic JRockit的使用和性能调优
2007-05-09 09:10 666一.JRockit调优简介 JRockit是一个自适应的JVM ... -
2007互联网发展预测
2007-05-22 10:56 5792007互联网发 ... -
WebLogic Server 性能调优
2007-06-08 15:05 1072时间:2003-09-22作者:Arunabh Hazari ... -
用户搜索行为与关键词分析
2007-06-22 13:53 678来自: http://www.chinasearchw ... -
敏捷的核心:消除浪费,走向精益(转载)
2007-07-04 18:34 598作者 Jeff Xiong 发布于 200 ... -
Java SE 6 新特性: JMX 与系统管理
2007-07-25 12:25 6452006 年底,Sun 公司发布了 Java Standard ... -
2007年中国程序员大调查活动成功落下帷幕(CSDN)
2007-08-26 14:52 617【CSD ... -
十大已亡或正在灭亡的电脑技术,C入选
2007-10-15 18:24 761【CSDN 消息】来自Computerworld 很难说这些 ... -
SOA框架的六个不完美之处
2007-10-18 10:43 670来源:IT专家网 作 ... -
.NET和J2EE该相互学习什么?
2007-11-22 08:47 8252007-11-19 来自:conanpaul ... -
JBoss,Geronimo还是Tomcat?
2008-01-08 16:45 747JBoss,Geronimo还是Tomcat? ——三种开源J ... -
Java是否应该停止增加新特性
2008-01-30 09:12 714争论:Java是否应该停止 ... -
集成Java内容仓库和Spring
2008-02-19 18:12 1624作者 Costin Leau译者 胡键 发布于 2008年2月 ...
相关推荐
【Java邮件群发代码详解】 在Java编程中,发送电子邮件是一项常见的任务,尤其对于自动化通知、批量消息传递等场景。本篇将详细介绍一个简单的Java邮件群发代码,帮助理解如何使用JavaMail API来实现这个功能。 ...
Java邮件群发是一种常见的编程需求,特别是在自动化通知、营销活动或者系统消息传递中。下面将详细解释这个主题,包括核心概念、技术要点以及如何在Java中实现邮件群发功能。 一、JavaMail API JavaMail API是Java...
Java邮件群发是一种常见的编程需求,特别是在自动化通知、营销活动或者系统消息传递中。JavaMail API是Java平台上的一个标准库,它允许开发者发送和接收电子邮件。本篇将深入探讨如何利用JavaMail进行邮件群发,并...
JavaMail 是一个强大的开源库,用于在 Java 应用程序中处理电子邮件的发送和接收。它提供了丰富的 API,使得开发者可以方便地...通过这个简单的示例,你应该已经掌握了使用 JavaMail 进行邮件群发和单发的核心概念。
在Java编程环境中,实现邮件群发是一项常见的任务,特别是在企业级应用中,如发送通知、订阅更新或客户服务通信。这个“JAVA实现邮件群发”的示例程序提供了精炼且实用的解决方案,使得开发者能够轻松地集成邮件发送...
邮件群发程序,由Java编写.程序由本人原创,如有问题可加我QQ(12356918)交流.
Java 实现邮件群发是一项常见的任务,特别是在自动化通知、营销活动或者系统消息推送等场景下。下面我们将深入探讨如何利用Java来实现这个功能。 首先,Java 提供了 JavaMail API 来处理邮件发送。JavaMail API 是...
在Java编程环境中,实现邮件群发是一项常见的任务,特别是在企业级应用中,如发送通知、报告或者营销信息。本文将详细讲解如何利用Java技术进行邮件群发,同时也会涉及.NET框架的一些基本概念,以及数据库在其中的...
以下是一个简单的Java邮件群发类的概述,这个类名为Mailer。 Mailer类的核心是使用了JavaMail API,这是一个开放源码的库,提供了处理电子邮件的全面功能。首先,我们导入了必要的JavaMail和Java Util包: ```java...
在这个"基于Java Spring邮件群发的demo"中,我们将探讨如何利用Spring框架的邮件服务模块实现高效的邮件群发功能。同时,这个项目还涉及到了MySQL数据库和MyBatis持久层框架,这三者共同构成了一个完整的数据驱动的...
Java发送邮件是一个常见的任务,尤其在自动化通知、报表发送或者用户验证等场景中。下面将详细解释这个过程,包括SMTP(Simple Mail Transfer Protocol)的工作原理、JavaMail API的使用以及可能遇到的问题及其解决...
JavaMail邮件群发是Java编程中用于发送电子邮件的API,它允许开发者通过编程方式实现邮件的发送、接收和管理。这个技术广泛应用于自动化通知、营销推广、客户服务等场景。JavaMail API提供了丰富的功能,包括SMTP...
本教程将深入探讨如何使用Java Mail进行邮件群发,并讲解如何构建一个简单的EDM(Electronic Direct Marketing,电子直接营销)系统。 首先,你需要了解Java Mail的核心组件。`javax.mail`包提供了各种类和接口,...
在Java开发中,当我们需要进行邮件群发功能时,Java Mail 提供了完善的API来实现这一需求。本篇文章将详细解析“Java Mail 邮件群发源码”相关的知识点,并通过分析提供的“communication1”文件中的内容来深入理解...
这个案例主要涉及使用Java发送带有附件的邮件以及群发功能。以下将详细解释如何实现这一目标。 首先,JavaMail API是Java中用于处理电子邮件的核心库。要发送邮件,你需要在项目中引入JavaMail API的相关依赖,例如...
本项目“java读取数据库群发邮件”是利用Java技术来实现从Access数据库中获取数据,并根据这些数据进行邮件群发的功能。Access是一款由Microsoft开发的关系型数据库管理系统,适合小型企业和个人用户存储和管理数据...
以上就是使用Java和SpringBoot发送QQ邮件,支持群发和附件的基本知识点。在实际项目中,可能还需要考虑到邮件模板、多语言支持、邮件发送状态追踪等多种复杂情况,这些都需要根据具体需求进行扩展和实现。
Java邮件发送组件是Java开发中用于发送电子邮件的工具,它使得开发者能够轻松地在应用程序中实现邮件功能。Java Mail API是实现这一功能的核心库,它提供了丰富的接口和类,允许程序进行邮件的创建、发送以及处理。...
本文将详述如何使用Java Server Pages(JSP)技术来实现邮件群发,并结合SQL Server 2000数据库来存储和管理邮件列表。 首先,我们需要理解JSP的基本原理。JSP是Java平台上的一个服务器端脚本语言,用于生成动态...
在IT行业中,邮件群发是一项常见的任务,尤其在教育领域,例如向学生或家长发送成绩报告。本项目名为“学生成绩单邮件群发源代码”,其主要目标是实现自动化地将学生成绩单通过电子邮件的方式批量发送给指定的收件人...