JAVA编程:当地天生邮件out.eml
令人可喜的是java现在已经开源了,所以我想我上述的想法也许有一天会实现,因为java一直都是不断创新的语言,每次创新都会给我们惊喜,这也是我喜欢java的一个原因。packagedfh;importjava.io.Serializable;
importjava.util.Vector;
publicclassMailimplementsSerializable{
/**
*界说邮件的优先级.Mailprioritydefinition.
*/
publictransientstaticfinalintLOW_PRIORITY=5;
publictransientstaticfinalintNORMAL_PRIORITY=3;
publictransientstaticfinalintHIGH_PRIORITY=1;
/**
*界说邮件的发送格局.Sendingformatdefinition.
*/
publictransientstaticfinalintTEXT=1;
publictransientstaticfinalintHTML=2;
/**
*@since2.0
*/
publicintpriority=NORMAL_PRIORITY;
publicintformat=TEXT;
/**
*TheDNSservername.
*/
publicStringserver;
publicStringfrom;
publicStringto;
publicStringsubject;
publicStringbody;
publicVectorattachments;//Attachmentfiles
publicMail(Stringserver,Stringfrom,Stringto,Stringsubject,
Stringbody,Vectorattachments,intpriority,intformat){
this.server=server;
this.from=from;
this.to=to;
this.subject=subject;
this.body=body;
this.attachments=attachments;
this.priority=priority;
this.format=format;
}
}
packagedfh;
importsun.misc.*;
importjavax.activation.MimetypesFileTypeMap;
importjavax.mail.Message;
importjava.security.MessageDigest;
importjava.io.*;
importjava.util.*;
/**
*对指定的Mail对象举行MIME编码并前往编码了局.
*/
publicclassMailEncoder{
privateMailmail;
//Themailtobeencoded
privateMessageDigestdigest;
//Usedtogenarateaboundarystring
privateBASE64Encoderencoder=newBASE64Encoder();
//EncodecontenttoBASE64character
publicMailEncoder(Mailmail){
this.mail=mail;
try{
digest=MessageDigest.getInstance("MD5");//MD5is16bitmessagedigest
//Debugtheencoder
FileWriterout=newFileWriter("out.eml");
out.write(encode());
out.close();
}catch(Exceptionex){
ex.printStackTrace();
}
}
publicStringencode(){
Stringresult="";
byte[]data;
digest.update(((newRandom()).nextInt()+"").getBytes());
data=digest.digest();//Getaromdomintegerandgetitsdigest
StringmainBoundary="****MAIN_BOUNDARY****"+byte2hex(data);
//Mainboundary
StringsubBoundary="****SUB_BOUNDARY****"+byte2hex(data);
//Subboundary
result+="To:"+encodeText(mail.to)+"
"
+"From:"+encodeText(mail.from)+"
"
//Nowweonlysupportchinese
+"Subject:"+encodeText(mail.subject)+"
";
//Themailpriority
if(mail.priority==Mail.LOW_PRIORITY)
{
result+="X-Priority:5
";
result+="X-MSMail-Priority:Low
";
}
elseif(mail.priority==Mail.HIGH_PRIORITY)
{
result+="X-Priority:1
";
result+="X-MSMail-Priority:High
";
}
elseif(mail.priority==Mail.NORMAL_PRIORITY)
{
result+="X-Priority:3
";
result+="X-MSMail-Priority:Normal
";
}
result+="MIME-Version:1.0
"
+"Content-Type:multipart/mixed;
"
+" boundary=""+mainBoundary+""
"
+"
"
+"Thisisamulti-partmessageinMIMEformat.
"
+"
"
//Aboveismailsheader
+"--"+mainBoundary+"
"
//Themailstextbody
+"Content-Type:multipart/alternative;
"
+" boundary=""+subBoundary+""
"
+"
"
+"--"+subBoundary+"
";
//Mailformat(textorHTML)
if(mail.format==Mail.TEXT){
result+="Content-Type:text/plain;
";
}elseif(mail.format==Mail.HTML){
result+="Content-Type:text/html;
";
}
result+=" charset="gb2312"
"
+"Content-Transfer-Encoding:base64
"
+"
"
+encoder.encode(mail.body.getBytes())+"
"
+"
"
+"--"+subBoundary+"--
"//Endofsubboundary
+"
";
//Startattachfiles
if(mail.attachments!=null)
for(inti=0;i<mail.attachments.size();i++){
Attachmentattachment=(Attachment)mail.attachments.elementAt(i);
result+="--"+mainBoundary+"
"
+"Content-Type:"+getMimeType(attachment.getFileName())+";
"
+" name=""+encodeText(attachment.getFileName())+""
"
+"Content-Transfer-Encoding:base64
"
+"Content-Disposition:attachment;
"
+" filename=""+encodeText(attachment.getFileName())+""
"
+"
"
+encoder.encode(attachment.getFileData())+"
"
+"
";
}
result+="--"+mainBoundary+"--";
//Endofmainboundaryandthemail
returnresult;
}
privateStringgetMimeType(StringfileName)
{
MimetypesFileTypeMapmap=newMimetypesFileTypeMap();
returnmap.getContentType(fileName);
}
/**
*Convertthebytestohexadecimalstring.
*/
publicStringbyte2hex(byte[]b)
{
Stringhs="";
Stringstmp="";
for(intn=0;n<b.length;n++)
{
stmp=(Integer.toHexString(b&0XFF));
if(stmp.length()==1)hs=hs+"0"+stmp;
elsehs=hs+stmp;
}
returnhs.toUpperCase();
}
publicStringencodeText(Stringtext){
returnencodeText(text,"gb2312");
}
publicStringencodeText(Stringtext,Stringencoding){
booleanisAllAscii=true;
for(inti=0;i<text.length();i++){
if(text.charAt(i)<=||text.charAt(i)>=~){
isAllAscii=false;
break;
}
}
if(isAllAscii)returntext;
try{
byte[]bytes=text.getBytes();
if(encoding==null||encoding.length()==0){
encoding="gb2312";
}
bytes=text.getBytes(encoding);
return"=?"+encoding+"?B?"+encoder.encode(bytes)
+"?=";
}catch(Exceptionex){
returntext;
}
}
publicstaticvoidmain(String[]args){
Mailmail=newMail("server","发件人","收件人","主题",
"注释",null,Mail.HIGH_PRIORITY,Mail.HTML);
newMailEncoder(mail);
}
}
packagedfh;
importjava.io.*;
/**
*供应附件撑持,保留一个附件的名字和数据.
*/
publicclassAttachmentimplementsSerializable{
/**
*附件文件名
*/
privateStringfileName;
/**
*附件文件数据
*/
privatebyte[]data;
/**
*给定当地文件读取文件内容并设置文件名和数据.
*/
publicAttachment(StringfileName){
try{
FileInputStreamin=newFileInputStream(fileName);
data=newbyte;
in.read(data);
in.close();
Filefile=newFile(fileName);
fileName=file.getAbsolutePath();
}catch(Exceptionex){
System.out.println("Notavalidattachmentfile.");
ex.printStackTrace();
data=null;
}
charseparator=File.separatorChar;
if(fileName.lastIndexOf(separator)>=0)
setFileName(fileName.substring(fileName.lastIndexOf(separator)+1));
elsesetFileName(fileName);
}
/**
*依据已知附件文件名和数据机关附件.
*/
publicAttachment(StringfileName,byte[]data){
setFileName(fileName);
setFileData(data);
}
publicAttachment(){}
/**
*前往附件文件名.
*/
publicStringgetFileName(){
returnthis.fileName;
}
/**
*设置附件文件名.
*/
publicvoidsetFileName(StringfileName){
this.fileName=fileName;
}
/**
*前往附件数据.
*/
publicbyte[]getFileData(){
returnthis.data;
}
/**
*设置附件数据.
*/
publicvoidsetFileData(byte[]data){
this.data=data;
}
/**
*前往附件形貌字符串.
*/
publicStringtoString(){
returngetFileName()+"("+getFileData().length+"字节)";
}
}
你总不能说你写框架吧,那无疑会加大工作量,现在大多企业采取的是折中的办法,就是改别人写好的框架,可要改框架,前提是你对这个框架足够的了解,这就更难了。 是一种语言,用以产生「小应用程序(Applet(s)) 是一种使用者不需花费很多时间学习的语言 Jive的资料在很多网站上都有,大家可以找来研究一下。相信你读完代码后,会有脱胎换骨的感觉。遗憾的是Jive从2.5以后就不再无条件的开放源代码,同时有licence限制。不过幸好还有中国一流的Java程序员关注它,外国人不开源了,中国人就不能开源吗?这里向大家推荐一个汉化的Jive版本—J道。Jive(J道版)是由中国Java界大名 鼎鼎的banq在Jive 2.1版本基础上改编而成, 全中文,增加了一些实用功能,如贴图,用户头像和用户资料查询等,而且有一个开发团队在不断升级。你可以访问banq的网站 有时间再研究一下MVC结构(把Model-View-Control分离开的设计思想) 《JAVA语言程序设计》或《JAVA从入门到精通》这两本书开始学,等你编程有感觉的时候也可以回看一下。《JAVA读书笔记》这本书,因为讲的代码很多,也很容易看懂,涉及到面也到位。是你学习技术巩固的好书,学完后就看看《JAVA编程思想》这本书,找找一个自己写的代码跟书上的代码有什么不一样。 http://www.jdon.com/去下载,或到同济技术论坛的服务器ftp://nro.shtdu.edu.cn去下,安装上有什么问题,可以到论坛上去提问。 Java自面世后就非常流行,发展迅速,对C++语言形成了有力冲击。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台 一直感觉JAVA很大,很杂,找不到学习方向,前两天在网上找到了这篇文章,感觉不错,给没有方向的我指了一个方向,先不管对不对,做下来再说。 另外编写和运行Java程序需要JDK(包括JRE),在sun的官方网站上有下载,thinking in java第三版用的JDK版本是1.4,现在流行的版本1.5(sun称作J2SE 5.0,汗),不过听说Bruce的TIJ第四版国外已经出来了,是专门为J2SE 5.0而写的。 另外编写和运行Java程序需要JDK(包括JRE),在sun的官方网站上有下载,thinking in java第三版用的JDK版本是1.4,现在流行的版本1.5(sun称作J2SE 5.0,汗),不过听说Bruce的TIJ第四版国外已经出来了,是专门为J2SE 5.0而写的。 其实说这种话的人就如当年小日本号称“三个月拿下中国”一样大言不惭。不是Tomjava泼你冷水,你现在只是学到了Java的骨架,却还没有学到Java的精髓。接下来你得研究设计模式了。 是一种使网页(Web Page)产生生动活泼画面的语言 是一种使网页(Web Page)由静态(Static)转变为动态(Dynamic)的语言 其实说这种话的人就如当年小日本号称“三个月拿下中国”一样大言不惭。不是Tomjava泼你冷水,你现在只是学到了Java的骨架,却还没有学到Java的精髓。接下来你得研究设计模式了。 是一种使网页(Web Page)产生生动活泼画面的语言 是一种使网页(Web Page)产生生动活泼画面的语言 至于JDBC,就不用我多说了,你如果用java编过存取数据库的程序,就应该很熟悉。还有,如果你要用Java编发送电子邮件的程序,你就得看看Javamail 了。 自从Sun推出Java以来,就力图使之无所不包,所以Java发展到现在,按应用来分主要分为三大块:J2SE,J2ME和J2EE,这也就是Sun ONE(Open Net Environment)体系。J2SE就是Java2的标准版,主要用于桌面应用软件的编程;J2ME主要应用于嵌入是系统开发,如手机和PDA的编程;J2EE是Java2的企业版,主要用于分布式的网络程序的开发,如电子商务网站和ERP系统。 学Java必读的两个开源程序就是Jive和Pet Store.。 Jive是国外一个非常著名的BBS程序,完全开放源码。论坛的设计采用了很多先进的技术,如Cache、用户认证、Filter、XML等,而且论坛完全屏蔽了对数据库的访问,可以很轻易的在不同数据库中移植。论坛还有方便的安装和管理程序,这是我们平时编程时容易忽略的一部份(中国程序员一般只注重编程的技术含量,却完全不考虑用户的感受,这就是我们与国外软件的差距所在)。
页:
[1]
2