JAVA网站制作之基于JAVAMAIL包的邮件发送程序----kang...
你通过从书的数量和开发周期及运行速度来证明:net和ruby要比java简单。程序JavaMailAPI是一个用于浏览、编写和发送电子动静的可选包(尺度扩大),能够用来创建基于尺度的电子邮件客户机,它设置了各类因特网邮件协,包含SMTP、POP、IMAP和MIME,还包含相干的NNTP、S/MIME及别的协定。一般开辟JavaMail程序还必要有Sun的JavaBeansActivationFramework(JAF)。JavaBeansActivationFramework的运转很庞大,这里复杂的说就是JavaMail的运转必需得依附于它的撑持,好比JavaMail使用JavaBeansActivationFramework来处置MIME编码的邮件附件。JavaMail接口包括在javax.mail及其子包中,JavaBeansActivationFramework接口包括在javax.activation包中,JAF标准是"Glasgow"JavaBeans标准的一部分,关于JAF的更多细节,请参考JAF指南:
http://java.sun.com/beans/glasgow/jaf.html
中心JavaMailAPI由七个类构成:Session、Message、Address、Authenticator、Transport、Store及Folder,它们都来自javax.mail、即JavaMailAPI顶级包。能够用这些类完成大批罕见的电子邮件义务,包含发送动静、检索动静、删除动静、认证、复兴动静、转发动静、办理附件、处置基于HTML文件格局的动静和搜刮或过滤邮件列表。有关JavaMail的更多信息,请参考JavaMail指南:
http://java.sun.com/products/javamail/
相似的用javamail完成的sendmail程序,网上有良多。但笔者发明多数有一点成绩。我的code鄙人面。调式前请断定您的机子已安装好JDK1.4javamial1.3.2和JAF。假如没有安装请按以下步骤安装:
1从www.java.sun.com网站上猎取最新的JDK。然后设置java情况变量。
假如是Win95/98,在autoexec.bat的最初面增加以下3行语句:
JAVA_HOME=c:j2sdk1.4.2
PATH=%JAVA_HOME%in;%PATH%
CLASSPATH=.;%JAVA_HOME%lib
看好了CLASSPATH中第一个“.”,这个代表以后目次,良多人HelloWorld没有运转起来年夜多是这个缘故原由。
假如是Win2000大概XP,利用鼠标右击“我的电脑”->属性->初级->情况变量
体系变量->新建->变量名:JAVA_HOME变量值:c:j2sdk1.4.2
体系变量->编纂->变量名:Path在变量值的最后面加上:%JAVA_HOME%in;
体系变量->新建->变量名:CLASSPATH变量值:.;%JAVA_HOME%lib ools.jar;%JAVA_HOME%libdt.jar;
CLASSPATH后面的谁人"."和下面的意义是一样的。
请调式一个helloworld来考证安装是不是乐成?
2http://java.sun.com/products/javamail/下载最新的javamail。
setCLASSPATH=%CLASSPATH%;c:downloadjavamail-1.3.2mail.jar;.
3http://java.sun.com/products/javabeans/glasgow/jaf.html下载JAF。
setCLASSPATH=%CLASSPATH%;c:downloadactivationactivation.jar
4ok。终究能够先喘口吻了。接上去入手下手程序部分。把if(themail.setTo("########")==false)return;中的#####号改成你本人的邮箱。再把if(themail.addFileAffix("#######")==false)return;中#####写为当地的一个文件路径。也可空着。为了更多的人进修,请人人不要修正sendMail@163.com暗码:sendcode本邮箱只在程序测试中利用!!
然后,在DOS中
javacsendMail.java
javasendMail
呵呵乐成!!!我的主机DOS显现
D:>javasendMail
设置体系属性:mail.smtp.host=smtp.163.com
筹办猎取邮件会话对象!
筹办创立MIME邮件对象!
设置smtp身份认证:mail.smtp.auth=true
设置邮件主题!
设置邮件体魄式
设置收信人
设置发信人!
增添邮件附件:D:endMail.java
程序失掉用户名与暗码
正在发送邮件....
发送邮件乐成!
*************************************************************************
/**
*@authorkangkang
*http://corncc.ikdiy.com
*2005.4.14
*/
importjava.util.*;
importjavax.mail.*;
importjavax.mail.internet.*;
importjava.util.Date;
importjavax.activation.*;
importjava.io.*;
publicclasssendMail
{
//21-30行把本程序所用变量举行界说。详细在main中对它们赋植。
privateMimeMessagemimeMsg;//MIME邮件对象
privateSessionsession;//邮件会话对象
privatePropertiesprops;//体系属性
privatebooleanneedAuth=false;//smtp是不是必要认证
privateStringusername="";//smtp认证用户名和暗码
privateStringpassword="";
privateMultipartmp;//Multipart对象,邮件内容,题目,附件等外容均增加到个中后再天生//MimeMessage对象
publicsendMail(Stringsmtp)
{
setSmtpHost(smtp);
createMimeMessage();
}
/**
*@paramhostNameString
*/
publicvoidsetSmtpHost(StringhostName)
{
System.out.println("设置体系属性:mail.smtp.host="+hostName);
if(props==null)props=System.getProperties();//取得体系属性对象
props.put("mail.smtp.host",hostName);//设置SMTP主机
}
/**
*@returnboolean
*/
publicbooleancreateMimeMessage()
{
try{
System.out.println("筹办猎取邮件会话对象!");
session=Session.getDefaultInstance(props,null);//取得邮件会话对象
}
catch(Exceptione)
{
System.err.println("猎取邮件会话对象时产生毛病!"+e);
returnfalse;
}
System.out.println("筹办创立MIME邮件对象!");
try{
mimeMsg=newMimeMessage(session);//创立MIME邮件对象
mp=newMimeMultipart();//mp一个multipart对象
//Multipartisacontainerthatholdsmultiplebodyparts.
returntrue;
}
catch(Exceptione)
{
System.err.println("创立MIME邮件对象失利!"+e);
returnfalse;
}
}
/**
*@paramneedboolean
*/
publicvoidsetNeedAuth(booleanneed){
System.out.println("设置smtp身份认证:mail.smtp.auth="+need);
if(props==null)props=System.getProperties();
if(need){
props.put("mail.smtp.auth","true");
}else{
props.put("mail.smtp.auth","false");
}
}
/**
*@paramnameString
*@parampassString
*/
publicvoidsetNamePass(Stringname,Stringpass)
{
System.out.println("程序失掉用户名与暗码");
username=name;
password=pass;
}
/**
*@parammailSubjectString
*@returnboolean
*/
publicbooleansetSubject(StringmailSubject){
System.out.println("设置邮件主题!");
try{
mimeMsg.setSubject(mailSubject);
returntrue;
}
catch(Exceptione){
System.err.println("设置邮件主题产生毛病!");
returnfalse;
}
}
/**
*@parammailBodyString
*/
publicbooleansetBody(StringmailBody)
{
try
{
System.out.println("设置邮件体魄式");
BodyPartbp=newMimeBodyPart();
bp.setContent("<metahttp-equiv=Content-Typecontent=text/html;charset=gb2312>"
+mailBody,"text/html;charset=GB2312");
mp.addBodyPart(bp);
returntrue;
}
catch(Exceptione)
{
System.err.println("设置邮件注释时产生毛病!"+e);
returnfalse;
}
}
/**
*@paramnameString
*@parampassString
*/
publicbooleanaddFileAffix(Stringfilename){
System.out.println("增添邮件附件:"+filename);
try{
BodyPartbp=newMimeBodyPart();
FileDataSourcefileds=newFileDataSource(filename);
bp.setDataHandler(newDataHandler(fileds));
bp.setFileName(fileds.getName());
mp.addBodyPart(bp);
returntrue;
}
catch(Exceptione){
System.err.println("增添邮件附件:"+filename+"产生毛病!"+e);
returnfalse;
}
}
/**
*@paramnameString
*@parampassString
*/
publicbooleansetFrom(Stringfrom){
System.out.println("设置发信人!");
try{
mimeMsg.setFrom(newInternetAddress(from));//设置发信人
returntrue;
}
catch(Exceptione)
{returnfalse;}
}
/**
*@paramnameString
*@parampassString
*/
publicbooleansetTo(Stringto)
{
System.out.println("设置收信人");
if(to==null)returnfalse;
try
{
mimeMsg.setRecipients(Message.RecipientType.TO,InternetAddress.parse(to));
returntrue;
}
catch(Exceptione)
{returnfalse;}
}
/**
*@paramnameString
*@parampassString
*/
publicbooleansetCopyTo(Stringcopyto)
{
System.out.println("发送附件到");
if(copyto==null)returnfalse;
try{
mimeMsg.setRecipients(Message.RecipientType.CC,(Address[])InternetAddress.parse(copyto));
returntrue;
}
catch(Exceptione)
{returnfalse;}
}
/**
*@paramnameString
*@parampassString
*/
publicbooleansendout()
{
try
{
mimeMsg.setContent(mp);
mimeMsg.saveChanges();
System.out.println("正在发送邮件....");
SessionmailSession=Session.getInstance(props,null);
Transporttransport=mailSession.getTransport("smtp");//???
transport.connect((String)props.get("mail.smtp.host"),username,password);
transport.sendMessage(mimeMsg,mimeMsg.getRecipients(Message.RecipientType.TO));
//transport.send(mimeMsg);
System.out.println("发送邮件乐成!");
transport.close();
returntrue;
}
catch(Exceptione)
{
System.err.println("邮件发送失利!"+e);
returnfalse;
}
}
/**
*Justdoitasthis
*/
publicstaticvoidmain(String[]args)
{
Stringmailbody="hello.Thisisatesting.";
sendMailthemail=newsendMail("smtp.163.com");
themail.setNeedAuth(true);
if(themail.setSubject("dkjjf")==false)return;
if(themail.setBody(mailbody)==false)return;
if(themail.setTo("########")==false)return;
if(themail.setFrom("senfMail@163.com")==false)return;
if(themail.addFileAffix("#######")==false)return;//附件在当地机子上的相对路径
themail.setNamePass("sendMail","javacode");//用户名与暗码
if(themail.sendout()==false)return;
}
}
*************************************************************************
TIPS:
A程序前部只是一个笼统的界说。在main函数中给出了详细的参数。
B好好使用System.out.println察看程序的实行历程。
C浏览javamailldocsjavadocsindex.html
JAVA是一种可以撰写跨平台应用软件的面向对象的程序设计语言,由升阳(SunMicrosystems)公司的詹姆斯·高斯林(JamesGosling)等人于1990年代初开发。 是一种使网页(Web Page)由静态(Static)转变为动态(Dynamic)的语言 应用在电视机、电话、闹钟、烤面包机等家用电器的控制和通信。由于这些智能化家电的市场需求没有预期的高,Sun公司放弃了该项计划。随着1990年代互联网的发展 http://www.jdon.com/去下载,或到同济技术论坛的服务器ftp://nro.shtdu.edu.cn去下,安装上有什么问题,可以到论坛上去提问。 应用在电视机、电话、闹钟、烤面包机等家用电器的控制和通信。由于这些智能化家电的市场需求没有预期的高,Sun公司放弃了该项计划。随着1990年代互联网的发展 Sun公司看见Oak在互联网上应用的前景,于是改造了Oak,于1995年5月以Java的名称正式发布。Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。 Pet Store.(宠物店)是SUN公司为了演示其J2EE编程规范而推出的开放源码的程序,应该很具有权威性,想学J2EE和EJB的朋友不要 错过了。 Java是一种计算机编程语言,拥有跨平台、面向对java Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。 Java自面世后就非常流行,发展迅速,对C++语言形成了有力冲击。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台 在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。 Jive的资料在很多网站上都有,大家可以找来研究一下。相信你读完代码后,会有脱胎换骨的感觉。遗憾的是Jive从2.5以后就不再无条件的开放源代码,同时有licence限制。不过幸好还有中国一流的Java程序员关注它,外国人不开源了,中国人就不能开源吗?这里向大家推荐一个汉化的Jive版本—J道。Jive(J道版)是由中国Java界大名 鼎鼎的banq在Jive 2.1版本基础上改编而成, 全中文,增加了一些实用功能,如贴图,用户头像和用户资料查询等,而且有一个开发团队在不断升级。你可以访问banq的网站 一般学编程语言都是从C语开始学的,我也不例外,但还是可能不学过程语言而直接学面向对象语言的,你是刚接触语言,还是从C开始学比较好,基础会很深点,如果你直接学习JAVA也能上手,一般大家在学语言的时候都记一些语言的关键词,常有的包和接口等。再去做逻辑代码的编写,以后的学习过程都是从逻辑代码编写中提升的,所以这方面都是经验积累的。你要开始学习就从 Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。 J2SE开发桌面应用软件比起 VC,VB,DEPHI这些传统开发语言来说,优势好象并不明显。J2ME对于初学者来说,好象又有点深奥,而且一般开发者很难有开发环境。 至于JDBC,就不用我多说了,你如果用java编过存取数据库的程序,就应该很熟悉。还有,如果你要用Java编发送电子邮件的程序,你就得看看Javamail 了。 科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。 设计模式是高级程序员真正掌握面向对象核心思想的必修课。设计模式并不是一种具体"技术",它讲述的是思想,它不仅仅展示了接口或抽象类在实际案例中的灵活应用和智慧 是一种使用者不需花费很多时间学习的语言 你就该学一学Servlet了。Servlet就是服务器端小程序,他负责生成发送给客户端的HTML文件。JSP在执行时,也是先转换成Servlet再运行的。虽说JSP理论上可以完全取代Servlet,这也是SUN推出JSP的本意,可是Servlet用来控制流程跳转还是挺方便的,也令程序更清晰。接下来你应该学习一下Javabean了,可能你早就看不管JSP在HTML中嵌Java代码的混乱方式了,这种方式跟ASP又有什么区别呢?
页:
[1]