百分啼血求教,一个星期了,请大家帮我看看,这里到底哪错了,高人们赐教

wangyunfeng1989 2004-09-02 11:18:11
我在练习一个javamail的小程序,下面是我的源码,很简单,请大家看看
SendMail.html
<html>
<BODY>  
<p>  
<FORM action="SendMail.jsp" method="post">
<TABLE align="center">    
<TR>
<TD width="50%">
收件人:<input name="to" size="25">
</TD>     
<TD width="50%">
寄信人:<input name="from" size="25">
</TD>
</TR>    
<TR>
<TD colspan="2">
主题:<BR><input name="subject" size="50">
</TD>
</TR>
<TR>
<TD colspan="2">
<p>邮件正文:
<TEXTAREA name="text" rows=25 cols=85>
</TEXTAREA>
</p>
</TD>
</TR>
</TABLE>    
<input type="submit" name="cb_submit" value="发送">    
<input type="reset" name="cb_reset" value="重写">
</FORM>  
</BODY>
</HTML>

下面是SendMail.jsp
<%@ page import="javax.mail.*,javax.mail.internet.*,javax.activation.*,java.util.*"%>

<html>

<head>

<TITLE>JavaMail 电子邮件发送系统</TITLE>

</HEAD>

<BODY>

<%
try{
Properties props = new Properties();

Session sendMailSession;

Store store;

Transport transport;

sendMailSession = Session.getInstance(props, null);

props.put("mail.smtp.host", "smtp.163.com");

Message newMessage = new MimeMessage(sendMailSession);

newMessage.setFrom(new InternetAddress(request.getParameter("from")));

newMessage.setRecipient(Message.RecipientType.TO, new InternetAddress(request.getParameter("to")));

newMessage.setSubject(request.getParameter("subject"));

newMessage.setSentDate(new Date());

newMessage.setText(request.getParameter("text"));

transport = sendMailSession.getTransport("smtp");

transport.send(newMessage);
%>
<p>你的邮件已发送,请返回。</p>
<%
}
catch(MessagingException m)
{
out.println(m.toString());
}
%>   
</BODY>
</HTML>
运行后提示信息:
javax.mail.SendFailedException: Sending failed; nested exception is: javax.mail.MessagingException: Could not connect to SMTP host: smtp.163.com, port: 25; nested exception is: java.net.SocketException: Network is unreachable: connect   

我是通过单位的代理上网,每次新打开一个浏览器时,总要提示输入密码用户名,但运行本地程序时,是不通过代理的,是不是和这有关?
...全文
310 点赞 收藏 15
写回复
15 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
mbh0210 2004-10-18
学习
回复
Bluecatr 2004-09-02
我就是使用局域网代理上网的,给我的是局域网的IP,我做的一个sendmail的小程序,没有一点问题
回复
craks 2004-09-02
代理是不行的,他不支持代理的
回复
Bluecatr 2004-09-02
你将授权的Authenticator加上去,163好像是要授权才能发的,不知道是不是这个原因,但从你的异常看又好像和你说的那个有关
回复
umbrella1984 2004-09-02
连接不上smtp主机
回复
bluesky35 2004-09-02
用代理的话估计是不行
回复
Bluecatr 2004-09-02
还有一个种授权方式是:

..........................

Transport trans=sess.getTransport();
trans.connect(smtpserver,userName,userPassword);
trans.sendMessage(msg,InternetAddress.parse(m_to));
trans.close();

不同的smtp服务器有的用上面那个行,有的用下面这个行,为什么我也不是很清楚,但多数用我给的第一个好使!
回复
Bluecatr 2004-09-02
Properties props = new Properties();
props.put("mail.smtp.host", "smtp.tom.com");
props.put("mail.smtp.auth", "true");
SmtpAuthenticator sa = new SmtpAuthenticator(sendUserBean.getSendUser(),
sendUserBean.getSendUserPassword());
Session mailConnection = Session.getInstance(props, sa);

............................................


//授权用的子类
class SmtpAuthenticator extends Authenticator {
String userName;
String userPassword;

public SmtpAuthenticator(String userName, String userPassword) {
this.userName = userName;
this.userPassword = userPassword;
}

protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication
(userName, userPassword);
}
}
回复
wangyunfeng1989 2004-09-02
Bluecatr(蓝夜猫儿)不好意思水平不够能告诉我在哪加授权呀谢谢
回复
BillyW 2004-09-02
你需要装一个ccproxy,这样的话通过设置你本地的代理端口
回复
Bluecatr 2004-09-02
已经帮你测试通过了我就改了smtp.163.com,不是你程序问题,是你这个局域网的问题,但是现在的smtp都需要授权,如下:

javax.mail.SendFailedException: Sending failed; nested exception is: class javax.mail.MessagingException: 553 You are not authorized to send mail as >, authentication is required

当加上授权信息后,就可以发信了。
回复
Bluecatr 2004-09-02
楼上说的好像有可能,从程序上看你的程序好像没有什么问题
回复
tnt_tnt 2004-09-02
估计原因是在端口上,可能你们那里的网络端口被封掉了.25端口被禁用,你可以自己装一个服务器,然后在局域网内部调试这个程序.
回复
walkie 2004-09-02
收藏!
回复
wangyunfeng1989 2004-09-02
Bluecatr(蓝夜猫儿)拿你能帮我看看我的程序有问题码
回复
相关推荐
发帖
Web 开发
创建于2007-09-28

8.0w+

社区成员

Java Web 开发
申请成为版主
帖子事件
创建了帖子
2004-09-02 11:18
社区公告
暂无公告