仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1612|回复: 20
打印 上一主题 下一主题

[学习教程] JAVA编程:当地天生邮件out.eml

[复制链接]
小女巫 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:30:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
令人可喜的是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[n]&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.available()];
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+"字节)";
}

}

你总不能说你写框架吧,那无疑会加大工作量,现在大多企业采取的是折中的办法,就是改别人写好的框架,可要改框架,前提是你对这个框架足够的了解,这就更难了。
灵魂腐蚀 该用户已被删除
沙发
发表于 2015-1-21 08:59:44 | 只看该作者
是一种语言,用以产生「小应用程序(Applet(s))
柔情似水 该用户已被删除
板凳
发表于 2015-1-27 13:23:17 | 只看该作者
是一种使用者不需花费很多时间学习的语言
飘飘悠悠 该用户已被删除
地板
发表于 2015-2-3 05:09:05 | 只看该作者
Jive的资料在很多网站上都有,大家可以找来研究一下。相信你读完代码后,会有脱胎换骨的感觉。遗憾的是Jive从2.5以后就不再无条件的开放源代码,同时有licence限制。不过幸好还有中国一流的Java程序员关注它,外国人不开源了,中国人就不能开源吗?这里向大家推荐一个汉化的Jive版本—J道。Jive(J道版)是由中国Java界大名 鼎鼎的banq在Jive 2.1版本基础上改编而成, 全中文,增加了一些实用功能,如贴图,用户头像和用户资料查询等,而且有一个开发团队在不断升级。你可以访问banq的网站
不帅 该用户已被删除
5#
发表于 2015-2-5 15:16:05 | 只看该作者
有时间再研究一下MVC结构(把Model-View-Control分离开的设计思想)
若相依 该用户已被删除
6#
发表于 2015-2-8 19:54:43 | 只看该作者
《JAVA语言程序设计》或《JAVA从入门到精通》这两本书开始学,等你编程有感觉的时候也可以回看一下。《JAVA读书笔记》这本书,因为讲的代码很多,也很容易看懂,涉及到面也到位。是你学习技术巩固的好书,学完后就看看《JAVA编程思想》这本书,找找一个自己写的代码跟书上的代码有什么不一样。
第二个灵魂 该用户已被删除
7#
发表于 2015-2-15 18:59:36 | 只看该作者
[url]http://www.jdon.com/[/url]去下载,或到同济技术论坛的服务器[url]ftp://nro.shtdu.edu.cn[/url]去下,安装上有什么问题,可以到论坛上去提问。
兰色精灵 该用户已被删除
8#
发表于 2015-2-28 08:49:13 | 只看该作者
Java自面世后就非常流行,发展迅速,对C++语言形成了有力冲击。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台
只想知道 该用户已被删除
9#
发表于 2015-3-9 21:49:57 | 只看该作者
一直感觉JAVA很大,很杂,找不到学习方向,前两天在网上找到了这篇文章,感觉不错,给没有方向的我指了一个方向,先不管对不对,做下来再说。
冷月葬花魂 该用户已被删除
10#
发表于 2015-3-11 22:16:29 | 只看该作者
另外编写和运行Java程序需要JDK(包括JRE),在sun的官方网站上有下载,thinking in java第三版用的JDK版本是1.4,现在流行的版本1.5(sun称作J2SE 5.0,汗),不过听说Bruce的TIJ第四版国外已经出来了,是专门为J2SE 5.0而写的。
海妖 该用户已被删除
11#
发表于 2015-3-17 00:14:27 | 只看该作者
另外编写和运行Java程序需要JDK(包括JRE),在sun的官方网站上有下载,thinking in java第三版用的JDK版本是1.4,现在流行的版本1.5(sun称作J2SE 5.0,汗),不过听说Bruce的TIJ第四版国外已经出来了,是专门为J2SE 5.0而写的。
12#
发表于 2015-3-21 09:37:36 | 只看该作者
其实说这种话的人就如当年小日本号称“三个月拿下中国”一样大言不惭。不是Tomjava泼你冷水,你现在只是学到了Java的骨架,却还没有学到Java的精髓。接下来你得研究设计模式了。
小魔女 该用户已被删除
13#
发表于 2015-3-23 05:18:06 | 只看该作者
是一种使网页(Web Page)产生生动活泼画面的语言
变相怪杰 该用户已被删除
14#
发表于 2015-4-3 22:01:56 | 只看该作者
是一种使网页(Web Page)由静态(Static)转变为动态(Dynamic)的语言
小女巫 该用户已被删除
15#
 楼主| 发表于 2015-4-8 04:17:00 | 只看该作者
其实说这种话的人就如当年小日本号称“三个月拿下中国”一样大言不惭。不是Tomjava泼你冷水,你现在只是学到了Java的骨架,却还没有学到Java的精髓。接下来你得研究设计模式了。
金色的骷髅 该用户已被删除
16#
发表于 2015-4-12 02:57:35 | 只看该作者
是一种使网页(Web Page)产生生动活泼画面的语言
愤怒的大鸟 该用户已被删除
17#
发表于 2015-4-18 02:28:49 | 只看该作者
是一种使网页(Web Page)产生生动活泼画面的语言
蒙在股里 该用户已被删除
18#
发表于 2015-4-22 00:37:24 | 只看该作者
至于JDBC,就不用我多说了,你如果用java编过存取数据库的程序,就应该很熟悉。还有,如果你要用Java编发送电子邮件的程序,你就得看看Javamail 了。
飘灵儿 该用户已被删除
19#
发表于 2015-4-27 08:31:32 | 只看该作者
自从Sun推出Java以来,就力图使之无所不包,所以Java发展到现在,按应用来分主要分为三大块:J2SE,J2ME和J2EE,这也就是Sun ONE(Open Net Environment)体系。J2SE就是Java2的标准版,主要用于桌面应用软件的编程;J2ME主要应用于嵌入是系统开发,如手机和PDA的编程;J2EE是Java2的企业版,主要用于分布式的网络程序的开发,如电子商务网站和ERP系统。
活着的死人 该用户已被删除
20#
发表于 2015-5-2 04:52:35 | 只看该作者
学Java必读的两个开源程序就是Jive和Pet Store.。 Jive是国外一个非常著名的BBS程序,完全开放源码。论坛的设计采用了很多先进的技术,如Cache、用户认证、Filter、XML等,而且论坛完全屏蔽了对数据库的访问,可以很轻易的在不同数据库中移植。论坛还有方便的安装和管理程序,这是我们平时编程时容易忽略的一部份(中国程序员一般只注重编程的技术含量,却完全不考虑用户的感受,这就是我们与国外软件的差距所在)。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-4-28 19:49

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表