转旧贴,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>  大家帮忙看看,这事搞得头痛啊

解决方案 »

  1.   

    因为邮件服务是你本地的。你到网关看看25端口(smtp发送端口)开放没有,端口25不开放的话是发不出去的。
      

  2.   

    lemon5366
    谢谢端口是開的,我只是通过比如我的服务器:dg.xxx..com.tw 发送到xxx.163.com测试过只能送到dg.xxx..com.tw 这个域名的邮箱,如[email protected]发送到163,或者,21cn邮箱就出错误 :Invalid address  
      

  3.   

    dg.xxx..com.tw是你局域网陪得服务器名称吧,没有域名解析估计不能发送
      

  4.   

    这个域名已经解析的了,在domino邮件服务器上用了几年了
      

  5.   

    RCPT TO:<[email protected]>
    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
      

  6.   

    com.sun.mail.smtp.SMTPAddressFailedException: 554 Relay rejected for policy reasons.原因可能是:
    1 你的邮件账户没有向外网发送邮件的权限,你可以问问你们那得邮件管理员。
    2 你所发送的邮箱地址可能设置了过滤规则。
      

  7.   

    应该不是,因为我通过domino发送到这个邮箱是没问题的,呵呵,我就是邮件管理员,接触jsp不久,一直从事lotus开发,现上级要求搞个商务系统b/S用到jsp发邮件,通过重重困难,就差这一步了,,郁闷
      

  8.   

    javamail api实现起来更简单!!!
    服务器地址都是不一样的
    smtp.qq.com
    smtp.sina.com ==
      

  9.   

    我写了类似的代码,用的账号是qq的,发送到163邮箱,是可以的。
    楼主用qq的账号试一试,qq的smtp host 是smtp.qq.com.
      

  10.   

    这个应该没问题啊,几年前,我在家里用javamail搞了个发送邮件的测试程序,都行的啊,不过发出去的邮件,都被对方当做“垃圾邮件”了。现在那点知识都快忘记了,有时间得再整理整理。
      

  11.   

    DEBUG: setDebug: JavaMail version 1.4.3
    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出现这样的错误 ,是不是认证错误 
      

  12.   

    用我这个吧。 写一个工具类。package org.wg.test;import java.util.Properties;
    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("邮件发送成功");
    }
    }
      

  13.   

    RSET
    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  也不行
      

  14.   

     
    yjflinchong  我写在页面里,有问题吗?应该是一样的吧  
      

  15.   

    把代码贴出来让大家帮忙分析,,谢谢try{ 
       
        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()); 
      

  16.   

    Transport.send(msg,msg.getAllRecipients());
    不要用Transport的静态方法,用你创建的对象transport.sendMessage(msg,msg.getAllRecipients());
      

  17.   

    lemon5366  非常感谢,改成这样可以了
    transport.sendMessage(msg,msg.getAllRecipients());