转旧贴,rainboy1026的,大家看看我的错在那里,认证方法,在我的本地邮件服务器是可以发送的,只能发送给本服务器上的用户,
可是新浪,163上(免费邮箱)就不行了,
<%@page contentType= "text/html;charset=gb2312 "%>
<%@page errorPage= "errpage.jsp "%>
<%@page import= "java.util.* "%>
<%@page import= "javax.mail.* "%>
<%@page import= "javax.mail.internet.* "%>
<%@page import= "javax.activation.* "%> <html>
<head>
<title> send </title>
<meta http-equiv= "Content-Type " content= "text/html; charset=gb2312 ">
</head>
<body>
<%
String host = "myhost ";
String from = "mymail ";
String to = "testmymail ";
String username = "user ";
String password = "mima "; Properties props = new Properties(); props.put( "mail.smtp.host ", host);
props.put( "mail.smtp.auth ", "true ");
%>
<%
Session mailsession = Session.getDefaultInstance(props,null);
%>
<%
// session.setDebug(true);
try
{
//Define message
MimeMessage message = new MimeMessage(mailsession);
message.setFrom(new InternetAddress(from));
message.addRecipient(Message.RecipientType.TO,new InternetAddress(to));
message.setSubject( "Hello JavaMail ");
message.setText( "Welcome to JavaMail "); // Send message
message.saveChanges();
Transport transport = mailsession.getTransport( "smtp ");
transport.connect(host, username, password);
transport.sendMessage(message, message.getAllRecipients());
transport.close();
out.println( "sending mail is ok! ");
}
catch(Exception e)
{
out.println( "sending failed! <br> ");
out.println(e.toString());
}
%> </body>
</html> 大家帮忙看看,这事搞得头痛啊
可是新浪,163上(免费邮箱)就不行了,
<%@page contentType= "text/html;charset=gb2312 "%>
<%@page errorPage= "errpage.jsp "%>
<%@page import= "java.util.* "%>
<%@page import= "javax.mail.* "%>
<%@page import= "javax.mail.internet.* "%>
<%@page import= "javax.activation.* "%> <html>
<head>
<title> send </title>
<meta http-equiv= "Content-Type " content= "text/html; charset=gb2312 ">
</head>
<body>
<%
String host = "myhost ";
String from = "mymail ";
String to = "testmymail ";
String username = "user ";
String password = "mima "; Properties props = new Properties(); props.put( "mail.smtp.host ", host);
props.put( "mail.smtp.auth ", "true ");
%>
<%
Session mailsession = Session.getDefaultInstance(props,null);
%>
<%
// session.setDebug(true);
try
{
//Define message
MimeMessage message = new MimeMessage(mailsession);
message.setFrom(new InternetAddress(from));
message.addRecipient(Message.RecipientType.TO,new InternetAddress(to));
message.setSubject( "Hello JavaMail ");
message.setText( "Welcome to JavaMail "); // Send message
message.saveChanges();
Transport transport = mailsession.getTransport( "smtp ");
transport.connect(host, username, password);
transport.sendMessage(message, message.getAllRecipients());
transport.close();
out.println( "sending mail is ok! ");
}
catch(Exception e)
{
out.println( "sending failed! <br> ");
out.println(e.toString());
}
%> </body>
</html> 大家帮忙看看,这事搞得头痛啊
谢谢端口是開的,我只是通过比如我的服务器:dg.xxx..com.tw 发送到xxx.163.com测试过只能送到dg.xxx..com.tw 这个域名的邮箱,如[email protected]发送到163,或者,21cn邮箱就出错误 :Invalid address
554 Relay rejected for policy reasons.
DEBUG SMTP: Invalid Addresses
DEBUG SMTP: [email protected]
DEBUG SMTP: Sending failed because of invalid destination addresses
RSET
250 Reset state
javax.mail.SendFailedException: Invalid Addresses;
nested exception is:
com.sun.mail.smtp.SMTPAddressFailedException: 554 Relay rejected for policy reasons. at com.sun.mail.smtp.SMTPTransport.rcptTo(SMTPTransport.java:1607)
at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:887)
at javax.mail.Transport.send0(Transport.java:191)
at javax.mail.Transport.send(Transport.java:142)
at org.apache.jsp.prdiscuss.dis_005faddsql_jsp._jspService(dis_005faddsql_jsp.java:412)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:237)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:214)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:198)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:152)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:118)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:929)
at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705)
at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683)
at java.lang.Thread.run(Thread.java:534)
Caused by: com.sun.mail.smtp.SMTPAddressFailedException: 554 Relay rejected for policy reasons. at com.sun.mail.smtp.SMTPTransport.rcptTo(SMTPTransport.java:1505)
... 34 more
QUIT
221 dg.xxx.com.tw SMTP Service closing transmission channel
1 你的邮件账户没有向外网发送邮件的权限,你可以问问你们那得邮件管理员。
2 你所发送的邮箱地址可能设置了过滤规则。
服务器地址都是不一样的
smtp.qq.com
smtp.sina.com ==
楼主用qq的账号试一试,qq的smtp host 是smtp.qq.com.
DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc]
DEBUG SMTP: useEhlo true, useAuth false
DEBUG SMTP: trying to connect to host "mail.qq.com", port 25, isSSL false用QQ出现这样的错误 ,是不是认证错误
import javax.mail.*;
import javax.mail.internet.*;public class MailExample {
public static void main(String args[]) throws Exception, MessagingException {
String host = "smtp.163.com";//发送邮件服务器
String from = "发送者的邮箱地址";
String to = "接受者的邮箱地址"; // new properties
Properties props = new Properties(); // Setup mail server
props.put("mail.smtp.host", host);// 设置smtp主机 props.put("mail.smtp.auth", "true");// 使用smtp身份验证 // Get session
Session session = Session.getDefaultInstance(props, null); // Define message
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress(from));
message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
message.setSubject("test");//标题
message.setText("http://www.baidu.com/"+"This is test JavaMail");//内容
//http协议部分会自动转换成超链接
message.saveChanges(); // Send message
Transport transport = session.getTransport("smtp");
System.out.println("正在连接");
transport.connect(host, "发送者邮箱地址/用户名", "发送者密码");
System.out.println("正在发送");
transport.sendMessage(message, message.getAllRecipients());
System.out.println("邮件发送成功");
}
}
250 Ok
com.sun.mail.smtp.SMTPSendFailedException: 503 Error: need EHLO and AUTH first ! at com.sun.mail.smtp.SMTPTransport.issueSendCommand(SMTPTransport.java:1829)
at com.sun.mail.smtp.SMTPTransport.mailFrom(SMTPTransport.java:1368)
at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:886)
at javax.mail.Transport.send0(Transport.java:191)
at javax.mail.Transport.send(Transport.java:142)
at org.apache.jsp.prdiscuss.dis_005faddsql_jsp._jspService(dis_005faddsql_jsp.java:419)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:237)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:214)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:198)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:152)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:118)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:929)
at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705)
at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683)
at java.lang.Thread.run(Thread.java:534)
QUIT
221 Bye谢谢各位,我晕了..用了smtp.qq.com 也不行
yjflinchong 我写在页面里,有问题吗?应该是一样的吧
String to="[email protected]";
String from="[email protected]";
String host="smtp.qq.com";
String username="xxx";
String password="xxxx";
String cc="";
String bcc="";
//String subject="E-commerce System:Hello, Please check,Tks!";
//subject = new String(subject.getBytes("iso-8859-1"));
//byte[] subjectTemp=request.getParameter("subject").getBytes("ISO8859_1");
//String subject=new String(subjectTemp);
String messageText= " 訂單號:"+s_sono+"<br><br> 內容:"+s_discuss+"<br><br> 網址鏈接:http://pesidg.com:8080 ";
//messageText=new String(messageText.getBytes("iso-8859-1"),"Base64");
//byte[] messageTextTemp="";
boolean sessionDebug = true;
BodyPart messageBodyPart = new MimeBodyPart();
Multipart multipart = new MimeMultipart();
//Properties props = System.getProperties();
Properties props=new Properties();
//SMTP
//props.put("mail.transport.protocol", "smtp");
//props.put("mail.smtp.port","25");
//props.put("mail.smtp.starttls.enable","true");
//props.put("mail.smtp.socketFactory.port", "465");
props.put("mail.smtp.host",host);
props.put("mail.smtp.auth ","true");
//這樣將確定接收方的郵件服務器主機
//props.put("mail.host",host);
//設置郵件傳輸協議方式
//props.put("mail.transport.protocol","smtp");
//獲取郵件會話對象
//Session mailSession = Session.getInstance(props);
Session mailSession = Session.getDefaultInstance(props, null);
//Session mailSession = Session.getInstance(props, null);
mailSession.setDebug(sessionDebug);
//try{
//MIME
Message msg = new MimeMessage(mailSession);
//發件人
msg.setFrom(new InternetAddress(from));
//basce64編碼轉換
sun.misc.BASE64Encoder enc = new sun.misc.BASE64Encoder();
//收件人
//String toList = getMailList(to);
//msg.setSubject("=?BIG5?B?"+enc.encode(subject.getBytes())+"?=");
InternetAddress[] addressTo = new InternetAddress().parse(to);
//InternetAddress[] addressTo1 ={new InternetAddress(tto)};
//InternetAddress[] addressTo = new InternetAddress[1];
//addressTo[0]=new InternetAddress(to[0]);
//addressTo[1]=new InternetAddress(to[1]);
msg.setRecipients(Message.RecipientType.TO,addressTo);
//抄送人
if(cc.trim().length()!=0){
InternetAddress[] addressCc = {new InternetAddress(cc)};
msg.setRecipients(Message.RecipientType.CC,addressCc);
}
//暗送人
if(bcc.trim().length()!=0){
InternetAddress[] addressBcc = {new InternetAddress(bcc)};
msg.setRecipients(Message.RecipientType.BCC,addressBcc);
}
//主旨與標題中文轉換
String subject="[ 商務系統提示 ]:您好,您有訂單需回復,請查看(測試)";
msg.setSubject("=?BIG5?B?"+enc.encode(subject.getBytes())+"?=");
msg.setSentDate(new Date());
//msg.setText(messageText);
//msg.setText("=?BIG5?B?"+enc.encode(messageText.getBytes())+"?=");
messageBodyPart.setContent(messageText,"text/html;charset=big5");
multipart.addBodyPart(messageBodyPart);
msg.setContent(multipart);
msg.saveChanges();
Transport transport = mailSession.getTransport("smtp");
transport.connect(host, username, password);
//發送郵件
Transport.send(msg,msg.getAllRecipients());
}
catch(Exception ex){
out.println(ex.getMessage());
不要用Transport的静态方法,用你创建的对象transport.sendMessage(msg,msg.getAllRecipients());
transport.sendMessage(msg,msg.getAllRecipients());