simplereceiver测试
让我们对simplereceiver做一次测试。为了让它有东西可以接收,我发送图4所示的消息(注意:消息由文本和一个附件组成)
图4 用于simplereceiver的测试消息
一旦接收到消息,就把该消息认为是一个多部分消息。打印的文本如下:
from: tony loton
subject: number 1
[ multipart message ]
content:text/plain;
charset="iso-8859-1"
attachment 1
from tony loton.
-----------------------------
把你的消息送出去
为了有趣一点,并且说明javamail apis的一个新颖的用法,我现在简要介绍一下我的谈话email项目。在做这个试验之前你需要得到lotontalk.jar文件,并把它加到你的classpath中去,添加方法如下:
set classpath=%classpath%;lotontalk.jar
你也需要在simplereceiver类中两个地方做代码修改。首先在receive()方法里面,把以下代码:
// -- get the message wrappers and process them --
message[] msgs = folder.getmessages();
for (int msgnum = 0; msgnum < msgs.length; msgnum++)
{
printmessage(msgs[msgnum]);
}
替换为:
// -- get the message wrappers and process them --
message[] msgs = folder.getmessages();
for (int msgnum = 0; msgnum < msgs.length; msgnum++)
{
printmessage(msgs[msgnum]);
speakmessage(msgs[msgnum]);
}
现在增加以下的新方法speakmessage(),它与最初的printmessage()方法相似。
/**
* "speakmessage", a talking version of printmessage().
*/
public static void speakmessage(message message)
{
string speech="";
try
{
com.lotontech.talk.lotontalk speaker=new com.lotontech.talk.lotontalk();
string from=((inte.netaddress)message.getfrom()[0]).getpersonal();
if (from==null) from=((inte.netaddress)message.getfrom()[0]).getaddress();
speech=speech+"from "+from+", ";
string subject=message.getsubject();
speech=speech+"subject "+subject+", ";
// -- get the message part (i.e., the message itself) --
part messagepart=message;
object content=messagepart.getcontent();
// -- ...or its first body part if it is a multipart message --
if (content instanceof multipart)
messagepart=((multipart)content).getbodypart(0);
string contenttype=messagepart.getcontenttype();
if (contenttype.startswith("text/plain") contenttype.startswith("text/html"))
{
inputstream is = messagepart.getinputstream();
bufferedreader reader=new bufferedreader(new inputstreamreader(is));
string thisline=reader.readline();
while (thisline!=null)
{
speech=speech+thisline+". ";
thisline=reader.readline();
}
// -- speak --
speaker.speak(speech,true);
}
}
catch (exception ex)
{
ex.printstacktrace();
}
}
因为在说话之前,你正在把整个消息积累到一个字符串中,所以这个方案可能只适合小的消息。作为一种选择,你可以读一行然后再讲一行。
当然,我不可能把结果显示给你看,因此你必须亲自来做实验。
你还可以做一些小的试验,当然不是在这个试验中,来发现语音合成的一些有趣的特征:怎样处理数字,以及怎样把全部大些的单词假想成只取首字母的缩写词,然后一个一个字母地把它们拼出来。
结论
我们已经通过对发送和接收email消息的应用程序的各个基本构造块分别讲解,涉及到了收发email的方方面面。如果你是第一次接触javamail,是不是发现在应用程序中收发email不是一件困难的事情。
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器