用JavaMail,qq邮箱发邮件遇到问题了,实在解决不了,向各位请教!!!

yangPSO 2008-01-10 11:37:10
用jsp+javamail做发邮件的小程序:

登陆页面JavaMail.html如下:

<html>
<head>
<title>JavaMail.html</title>
<meta http-equiv="Content-Type" content="text/html;charset=GB2312">
</head>
<body>

<h2>利用JavaMail来发送电子邮件</h2>

<form name="form" method="POST" action="JavaMail.jsp">
<p>寄信人:<input type="text" name="From" size="35" maxlength="35"></p>
<p>收信人:<input type="text" name="To" size="35" maxlength="35"></p>
<p>主题: <input type="text" name="Subject" size="35" maxlength="35"></p>
<p>内容:<textarea name="Message" cols="30" rows="5"></textarea></p>
<input type="submit" value="发送">
<input type="reset" value="清除">
</form>
</body>
</html>




邮件发送的处理页面JavaMail.jsp如下:


<%@ page import="javax.mail.*" %>
<%@ page import="javax.mail.internet.*" %>
<%@ page import="javax.activation.*" %>
<%@ page import="java.util.*,java.io.*" %>
<%@ page contentType="text/html;charset=GB2312" %>

<html>
<head>
<title>JavaMail.jsp</title>
</head>
<body>

<h2>利用JavaMail来传送电子邮件 </h2>
<%

InternetAddress[] address = null;

request.setCharacterEncoding("GB2312");

Authenticator auth = (Authenticator)
new com.yang.PopupAuthenticator("251887663","8888");

String mailserver = "smtp.qq.com";
String From = request.getParameter("From");
String to = request.getParameter("To");
String Subject = request.getParameter("Subject");
String messageText = request.getParameter("Message");

boolean sessionDebug = false;

try {

// 设定所要用的Mail 服务器和所使用的传输协议
java.util.Properties props = System.getProperties();
props.put("mail.host",mailserver);
props.put("mail.transport.protocol","smtp");

// 产生新的Session 服务
javax.mail.Session mailSession = javax.mail.Session.getDefaultInstance(props,auth);
mailSession.setDebug(sessionDebug);
Message msg = new MimeMessage(mailSession);

// 设定传送邮件的发信人
msg.setFrom(new InternetAddress(From));

// 设定传送邮件至收信人的信箱
address = InternetAddress.parse(to,false);
msg.setRecipients(Message.RecipientType.TO, address);

// 设定信中的主题
msg.setSubject(Subject);
// 设定送信的时间
msg.setSentDate(new Date());

// 设定传送信的MIME Type
msg.setText(messageText);

// 送信
Transport.send(msg);

out.println("邮件已顺利传送");

}
catch (MessagingException mex) {

mex.printStackTrace();
}

%>

</body>
</html>


PopupAuthenticator类的代码如下:


package com.yang;

import javax.mail.*;
import java.util.*;

public class PopupAuthenticator extends Authenticator {

String username, password;

public PopupAuthenticator(String username, String password) {
this.username = username;
this.password = password;
}

public PasswordAuthentication getPasswordAuthentication() {

return new PasswordAuthentication(username, password);
}
}


执行时报错:
com.sun.mail.smtp.SMTPSendFailedException: 503 Error: need EHLO and AUTH first !
我估计身份验证失败,但我已经将qq邮箱的smtp/pop开关打开了,我的用户名(就是qq号吧),密码应该没问题吧。问题在哪里呢?改用163邮箱时,又出了下面的问题:
javax.mail.MessagingException: Unknown SMTP host: smtp.163.com ;
nested exception is:
java.net.UnknownHostException: smtp.163.com
at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1389)
at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:412)
at javax.mail.Service.connect(Service.java:288)
at javax.mail.Service.connect(Service.java:169)
at javax.mail.Service.connect(Service.java:118)
at javax.mail.Transport.send0(Transport.java:188)
at javax.mail.Transport.send(Transport.java:118)
at org.apache.jsp.JavaMail_jsp._jspService(JavaMail_jsp.java:116)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:393)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:263)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:584)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Thread.java:595)
Caused by: java.net.UnknownHostException: smtp.163.com
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:177)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:364)
at java.net.Socket.connect(Socket.java:507)
at java.net.Socket.connect(Socket.java:457)
at com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:233)
at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:189)
at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1359)
... 25 more
实在不知道如何解决,只好问各位了。

另外,有没有不用smtp验证的服务器?
...全文
14889 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
haiming507906 2012-10-25
  • 打赏
  • 举报
回复
顶,对我很有用
flyswatter_cyc 2008-10-31
  • 打赏
  • 举报
回复
再添加一个属性设置 props.put("mail.smtp.auth", "true");
打开验证功能..不然默认值是false..仍然不会进行验证

av168659700 2008-07-22
  • 打赏
  • 举报
回复
我也想知道这个问题的答案啊!!!!!!!
霹雳火-piliskys 2008-03-24
  • 打赏
  • 举报
回复
把false设置成true就行了
nowitzki41 2008-01-10
  • 打赏
  • 举报
回复
关注

81,116

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧