21-1
F:\book\tools\james\bin>run
Avalon runner
parser : org.apache.xerces.parsers.SAXParser
configurationPath : ../conf/
logFile : ../logs/avalon.log
libPath : ../lib/
blockPath : ./blocks/
Scanning jars for new Blocks...
Found new jar: Avalon.jar
Installing Avalon configuration file into ../conf/ from template
Found new jar: JAMES.jar
Installing JAMES configuration file into ../conf/ from template
Templates installed in ../conf/
If you need to fill templates with values or overwrite default you can do it now
and then press then Enter to continue
Reading configuration
Avalon 2.2-dev
2001.11.02 10:10:19 831 Channel default opened
21-2
E:\>telnet localhost 4555
root <回车>
fujie<回车>
help<回车> 此时显示命令列表
adduser mellon 1234<回车>
可能的输出如下:
JAMES RemoteAdministration Tool 1.2.1rc2
Please enter your login and password
Welcome root. HELP for a list of commands
unknown command htlp
Currently implemented commans:
help display this help
adduser [username] [password] add a new user
deluser [username] delete existing user
listusers display existing accounts
countusers display the number of existing accounts
verify [username] verify if specified user exist
quit close connection
Existing accounts 0
User mellon added
Existing accounts 1
user: mellon
21-3
/*****************************************************************************
* Copyright (C) The Apache Software Foundation. All rights reserved. *
* ------------------------------------------------------------------------- *
* This software is published under the terms of the Apache Software License *
* version 1.1, a copy of which has been included with this distribution in *
* the LICENSE file. *
*****************************************************************************/
package org.apache.james.smtpserver;
import java.io.*;
import java.net.*;
import java.util.*;
import org.apache.mailet.*;
import org.apache.avalon.blocks.*;
import org.apache.james.*;
import org.apache.james.core.*;
import org.apache.avalon.*;
import org.apache.james.util.*;
import Javax.mail.*;
import Javax.mail.internet.*;
public class SMTPHandler implements Composer, Configurable, Stoppable, TimeServer.Bell, Contextualizable
{
//常量声明
public final static String SERVER_NAME = "SERVER_NAME";
public final static String SERVER_TYPE = "SERVER_TYPE";
public final static String REMOTE_NAME = "REMOTE_NAME";
public final static String REMOTE_IP = "REMOTE_IP";
public final static String NAME_GIVEN = "NAME_GIVEN";
public final static String CURRENT_HELO_MODE = "CURRENT_HELO_MODE";
public final static String SENDER = "SENDER_ADDRESS";
public final static String RCPT_VECTOR = "RCPT_VECTOR";
public final static String SMTP_ID = "SMTP_ID";
public final static char[] SMTPTerminator = {'\r','\n','.','\r','\n'};
//私有变量声明
//与socket相关变量
private Socket socket;
private DataInputStream in;
private InputStream socketIn;
private PrintWriter out;
//与远程地址相关的变量声明
private String remoteHost;
private String remoteHostGiven;
private String remoteIP;
private String messageID;
private String smtpID;
//与上下文相关的变量声明
private ComponentManager comp;
private Configuration conf;
private Context context;
private Logger logger;
private TimeServer timeServer;
private MailServer mailServer;
//工具与提示信息变量声明
private String servername;
private String softwaretype = "JAMES SMTP Server " + Constants.SOFTWARE_VERSION;
private static long count;
private Hashtable state;
private Random random;
//设置配置组件
public void setConfiguration(Configuration conf)
{
this.conf = conf;
}
//设置上下文组件
public void setContext(Context context)
{
this.context = context;
}
//设置组件管理器
public void setComponentManager(ComponentManager comp) {
this.comp = comp;
}
//初始化log日志,mail服务器,时间服务器,随机数,状态表
public void init() throws Exception
{
logger = (Logger) comp.getComponent(Interfaces.LOGGER);
mailServer = (MailServer) comp.getComponent(Interfaces.MAIL_SERVER);
timeServer = (TimeServer) comp.getComponent(Interfaces.TIME_SERVER);
servername = (String) context.get(Constants.HELO_NAME);
state = new Hashtable();
random = new Random();
}
//请求解析
public void parseRequest(Socket socket)
{
try
{
//得到输入输出流
this.socket = socket;
socketIn = new BufferedInputStream(socket.getInputStream(), 1024);
in = new DataInputStream(socketIn);
out = new InternetPrintWriter(socket.getOutputStream(), true);
//得到主机地址
remoteHost = socket.getInetAddress ().getHostName ();
remoteIP = socket.getInetAddress ().getHostAddress ();
smtpID = Math.abs(random.nextInt() % 1024) + "";
//提取状态信息
state.clear();
state.put(SERVER_NAME, this.servername );
state.put(SERVER_TYPE, this.softwaretype );
state.put(REMOTE_NAME, remoteHost);
state.put(REMOTE_IP, remoteIP);
state.put(SMTP_ID, smtpID);
}
catch (Exception e)
{
//返回错误代码
}
public void run()
{
try
{
// 初始化连接
timeServer.setAlarm(this.toString(),
this, conf.getConfiguration("connectiontimeout").getValueAsLong(120000));
out.println("220 " + this.servername + " SMTP Server (" + softwaretype + ") ready " + RFC822DateFormat.toString(new Date()));
//解析命令
while (parseCommand(in.readLine()))
{
timeServer.resetAlarm(this.toString());
}
socket.close();
timeServer.removeAlarm(this.toString());
}
catch (SocketException e)
{
//返回错误代码
}
catch (InterruptedIOException e)
{
//返回错误代码
}
catch (IOException e)
{
//返回错误代码
}
catch (Exception e)
{
//返回错误代码
}
finally
{
try
{
socket.close();
}
catch (IOException e)
{
//返回错误代码
}
}
}
//连接超时
public void wake(String name, String memo)
{
logger.log("Connection timeout on socket", "SMTP", logger.ERROR);
try
{
out.println("Connection timeout. Closing connection");
socket.close();
} catch (IOException e) {
//返回错误代码
}
}
//命令解析
private boolean parseCommand(String command)
throws Exception
{
//命令为空,返回失败
if (command == null) return false;
logger.log("Command received: " + command, "SMTP", logger.INFO);
//解析命令和命令的参数
StringTokenizer commandLine = new StringTokenizer(command.trim(), " :");
int arguments = commandLine.countTokens();
if (arguments == 0)
{
//返回错误代码
return true;
}
else if(arguments > 0)
{
command = commandLine.nextToken();
}
String argument = (String) null;
if(arguments > 1)
{
argument = commandLine.nextToken();
}
String argument1 = (String) null;
if(arguments > 2)
{
argument1 = commandLine.nextToken();
}
// HELO 命令
if (command.equalsIgnoreCase("HELO"))
{
if (state.containsKey(CURRENT_HELO_MODE))
{
//返回错误代码
)
retur
没有合适的资源?快使用搜索试试~ 我知道了~
JAVA TCP-IP应用开发详解
共200个文件
java:121个
txt:34个
htm:6个
4星 · 超过85%的资源 需积分: 10 95 下载量 141 浏览量
2008-12-20
10:44:10
上传
评论 3
收藏 298KB RAR 举报
温馨提示
JAVA TCP-IP应用开发详解JAVA TCP-IP应用开发详解JAVA TCP-IP应用开发详解JAVA TCP-IP应用开发详解JAVA TCP-IP应用开发详解JAVA TCP-IP应用开发详解
资源推荐
资源详情
资源评论
收起资源包目录
JAVA TCP-IP应用开发详解 (200个子文件)
FUJIE.CER 790B
SERVER.CER 562B
SIGNTEST.DSA 1KB
firstPolicy 387B
chatgui.form 210B
fujiekeystore 1KB
fujiekeystore2 2KB
home_title.gif 8KB
dukeWaveRed.gif 2KB
test.txt.gz 41B
JSSE 1_0_2 Guide.htm 178KB
INDEX.HTM 2KB
INDEX.HTM 294B
INDEX.HTM 230B
viewimage.htm 103B
INDEX.HTM 101B
readme.html 11KB
AppletWriteFileTest.html 135B
EchoClientGUI2.html 129B
EchoClientGUI3.html 129B
TextDemo.html 124B
httpskeystore 1KB
TEST.JAR 4KB
STEST2.JAR 2KB
STEST.JAR 2KB
STEST.JAR 2KB
TEST2.JAR 1KB
JDialog.java 21KB
FtpClient.java 10KB
FtpdHandler.java 10KB
GUIClient.java 9KB
HTTPServer.java 7KB
GlassPaneDemo.java 6KB
HTTPServer.java 6KB
AbsoluteLayout.java 6KB
GetMailTest.java 6KB
Ping.java 5KB
HttpProxy.java 5KB
LayeredPaneDemo.java 5KB
ComputeEngine_Stub.java 5KB
HttpProxy.java 4KB
AbsoluteConstraints.java 4KB
ChatProtocol.java 4KB
SendMailTest.java 4KB
registerViewBean.java 3KB
EchoClientGUI2.java 3KB
EchoClientGUI1.java 3KB
EmployProtocol.java 3KB
EchoClientGUI3.java 3KB
ComputeEngine_Skel.java 3KB
QuoteUDPServer.java 3KB
UDPTest.java 3KB
Grep.java 2KB
dataTest.java 2KB
msgsend.java 2KB
register.java 2KB
PushbackTest.java 2KB
signSend.java 2KB
Zipper.java 2KB
Pi.java 2KB
test.java 2KB
ServerThread.java 2KB
Broadcast.java 2KB
signReceive.java 2KB
Print1.java 2KB
GUIGZipper.java 2KB
SortThread.java 2KB
EchoClient.java 2KB
fileFilter.java 2KB
Word.java 2KB
Ftp.java 2KB
TextDemo.java 2KB
ChatServer.java 2KB
EchoServer.java 2KB
GetMail.java 2KB
sHTTPServer.java 1KB
searchtest.java 1KB
Sum.java 1KB
MyCheckedException.java 1KB
EmployServer.java 1KB
ZipTest.java 1KB
EchoServer.java 1KB
TimeServer2.java 1KB
SecureEchoServer.java 1KB
EchoClientBase.java 1KB
Browser.java 1KB
Sequence.java 1KB
TimeQuery.java 1KB
checkTest.java 1KB
testInstall.java 1KB
MulticastServerThread.java 1KB
BufferedTest2.java 1KB
BufferedTest.java 1KB
TimeServer.java 1KB
Copy.java 1KB
Browser.java 1KB
TopLevelDemo.java 1KB
EchoMultiServerThread.java 1KB
ReverseThread.java 1KB
Copy2.java 1KB
共 200 条
- 1
- 2
jiajiushizhuai
- 粉丝: 0
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
前往页