出现的异常是javax.mail.AuthenticationFailedException

解决方案 »

  1.   

    <%@ page contentType="text/html;charset=GB2312" %> 
    <%request.setCharacterEncoding("gb2312");%><!--中文处理代码--> <!--引入要用到的类库--> 
    <%@ page import="java.util.*,javax.mail.*"%> 
    <%@ page import="javax.mail.internet.*"%> <html> 
    <head> 
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> 
    <title>发送成功</title> 
    </head> <body> 
    <% 
    try{ //从html表单中获取邮件信息 
    String tto=request.getParameter("to"); 
    String ttitle=request.getParameter("title"); 
    String tcontent=request.getParameter("content"); Properties props=new Properties();//也可用Properties props = System.getProperties(); //System.setProperty("http.proxyHost","192.168.0.1"); //设置代理上网
    //System.setProperty("http.proxyPort","80");//设置代理上网端口
    //System.setProperty("http.proxyUser","wangh");
    //System.setProperty("http.proxyPassword","1234");
    //props.put("mail.smtp.host","10.10.1.11");//存储发送邮件服务器的信息 props.put("mail.smtp.host","smtp.21cn.com");//存储发送邮件服务器的信息 
    props.put("mail.smtp.auth","true");//同时通过验证 
    Session s=Session.getInstance(props);//根据属性新建一个邮件会话 
    s.setDebug(true); MimeMessage message=new MimeMessage(s);//由邮件会话新建一个消息对象 //设置邮件 
    InternetAddress from=new InternetAddress("[email protected]"); 
    message.setFrom(from);//设置发件人 
    InternetAddress to=new InternetAddress(tto); 
    message.setRecipient(Message.RecipientType.TO,to);//设置收件人,并设置其接收类型为TO 
    message.setSubject(ttitle);//设置主题 
    message.setText(tcontent);//设置信件内容 
    message.setSentDate(new Date());//设置发信时间 //发送邮件 
    message.saveChanges();//存储邮件信息 
    Transport transport=s.getTransport("smtp"); 
    transport.connect("smtp.21cn.com","xxxx","111111");//以smtp方式登录邮箱 
    transport.sendMessage(message,message.getAllRecipients());//发送邮件,其中第二个参数是所有 
    //已设好的收件人地址 
    transport.close(); %> 
    <div align="center"> 
    <p><font color="#FF6600">发送成功!</font></p> 
    <p><a href="recmail.jsp">去看看我的信箱</a><br> 
    <br> 
    <a href="index.htm">再发一封</a> </p> 
    </div> 
    <% 
    }catch(MessagingException e){ 
    out.println(e.toString()); 

    %> 
    </body> 
    </html> 你试一下,看看行不行?不过自己还要写个页面传几个参数,要不直接在此页面赋值也行。
      

  2.   

    to iwo99:
        
            老错误!
      

  3.   

    看这个http://community.csdn.net/Expert/topic/3332/3332816.xml?temp=9.296817E-02
      

  4.   


    /**
     * <p>Title: 郵件服務</p>
     * <p>Description: </p>
     * <p>Copyright: qyzj</p>
     * <p>Company: </p>
     * @author wanghx 2004/08
     * @version 1.0
     */import java.net.*;
    import java.io.*;
    public class SendMail {
      private Socket sc;
      private int PORT = 25;
      private BufferedReader in;
      private PrintWriter out;
      private String smtpServer;
      public void setSmtpServer(String smtpServer) {
        this.smtpServer = smtpServer;
      }
      public boolean createConnect() {
        if (smtpServer == null) {
          smtpServer = "localhost";
        }
        try {
          sc = new Socket(smtpServer, PORT);
          in = new BufferedReader(new InputStreamReader(sc.getInputStream()));
          out = new PrintWriter(sc.getOutputStream());
        } catch (IOException e) {
          return false;
        }
        return true;
      }
      public String do_command(String s) throws IOException {
        if (s != null) {
          out.print(s);
          out.flush();
        }
        String line;
        if ((line = in.readLine()) != null) {
          return line;
        } else {
          return "";
        }
      }  public boolean send(String to,String from,String subject,String message){
        subject = Base64Encode(subject);
        subject = "=?GB2312?B?" + subject + "?=";
        message = Base64Encode(message);
        try {
          String line;
          do_command(null);
          if (-1 == (line = do_command("HELO " + smtpServer + "\r\n")).indexOf("250")){
            return false;
          }
          if (-1 == (line = do_command("MAIL FROM: " + from + "\r\n")).indexOf("250")){
            return false;
          }
          if (-1 == (line = do_command("RCPT TO: " + to + "\r\n")).indexOf("250")){
            return false;
          }
          if (-1 == (line = do_command("DATA\r\n")).indexOf("354")){
            return false;
          }
          message = "Content-Type: text/html\r\n\r\n" + message;
          message = "Subject: " + subject + "\r\n" + message;
          message = "To: " + to + "\r\n" + message;
          message = "Content-Transfer-Encoding: base64\r\n" + message;
          message = "MIME-Version: 1.0\r\n" + message;
          message = "From: " + from + "\r\n" + message;
          out.print(message + "\r\n");      if (-1 == (line = do_command("\r\n.\r\n")).indexOf("250")){
            return false;
          }
          in.close();
          out.close();
          sc.close();
        } catch (IOException e) {
          return false;
        }
        return true;
      }
      public boolean send(String to,String from,String subject,String message,String username,String passwd) {
        username = Base64Encode(username);
        passwd = Base64Encode(passwd);
        subject = Base64Encode(subject);
        subject = "=?GB2312?B?" + subject + "?=";
        message = Base64Encode(message);
        try {
          String line;
          do_command(null);
          if (-1 == do_command("EHLO " + smtpServer + "\r\n").indexOf("250")) return false;
          while (true) {
            if (-1 != in.readLine().indexOf("250 ")){
              break;
            }
          }
          if (-1 == do_command("AUTH LOGIN\r\n").indexOf("334")){
            return false;
          }
          if (-1 == do_command(username + "\r\n").indexOf("334")){
            return false;
          }
          if (-1 == do_command(passwd + "\r\n").indexOf("235")){
            return false;
          }
          if (-1 == do_command("MAIL FROM: " + from + "\r\n").indexOf("250")){
            return false;
          }
          if (-1 == do_command("RCPT TO: " + to + "\r\n").indexOf("250")){
            return false;
          }
          if (-1 == do_command("DATA\r\n").indexOf("354")){
            return false;
          }
          message = "Content-Type: text/html\r\n\r\n" + message;
          message = "Subject: " + subject + "\r\n" + message;
          message = "To: " + to + "\r\n" + message;
          message = "Content-Transfer-Encoding: base64\r\n" + message;
          message = "MIME-Version: 1.0\r\n" + message;
          message = "From: " + from + "\r\n" + message;
          out.print(message + "\r\n");
          if (-1 == do_command("\r\n.\r\n").indexOf("250")){
            return false;
          }
          in.close();
          out.close();
          sc.close();
        } catch (IOException e) {
          return false;
        }
        return true;
      }
      public static String Base64Encode(String s) {
        if (s == null || s.length() == 0) return "";
        String EncodingTable = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
        byte[] Buffer = s.getBytes();
        int ReadNow, i, res;
        char[] WriteBuf = new char[4];
        char[] Buf = new char[3];
        String EncodedStr = "";
        int ReadIndex = 0;
        int Len = Buffer.length;
        boolean isEnd;
        int BytesWritten = 0;
        ReadNow = 0;
        do {
          isEnd = false;
          for (i = 0; i < 3; i++) {
            if (ReadIndex >= Len) {
              isEnd = true;
              ReadNow = i;
              break;
            }
            Buf[i] = (char) (((byte)Buffer[ReadIndex]) & 0x00FF);
            ReadIndex = ReadIndex + 1;
          }
          if (isEnd) break;
          WriteBuf[0] = EncodingTable.charAt((Buf[0] >> 2) & 0x003F);
          WriteBuf[1] = EncodingTable.charAt(((Buf[0] & 3) << 4 | (Buf[1] >> 4)) & 0x003F);
          WriteBuf[2] = EncodingTable.charAt(((Buf[1] & 15) << 2 | (Buf[2] >> 6)) & 0x003F);
          WriteBuf[3] = EncodingTable.charAt((Buf[2] & 63) & 0x003F);
          for (i = 0; i < 4; i++)
            EncodedStr = EncodedStr + WriteBuf[i];
          BytesWritten = BytesWritten + 4;
          if ((BytesWritten % 76) == 0) {
            EncodedStr = EncodedStr + "\r\n";
          }
        }
        while (ReadNow != 3);
        if (ReadNow < 3) {
          switch (ReadNow) {
            case 1 :
              WriteBuf[0] = EncodingTable.charAt((Buf[0] >> 2) & 0x003F);
              WriteBuf[1] = EncodingTable.charAt(((Buf[0] & 3) << 4) & 0x003F);
              WriteBuf[2] = '=';
              WriteBuf[3] = '=';
              for (i = 0; i < 4; i++){
                EncodedStr = EncodedStr + WriteBuf[i];
              }
              break;
            case 2 :
              WriteBuf[0] = EncodingTable.charAt((Buf[0] >> 2) & 0x003F);
              WriteBuf[1] = EncodingTable.charAt(((Buf[0] & 3) << 4 | (Buf[1] >> 4)) & 0x003F);
              WriteBuf[2] = EncodingTable.charAt(((Buf[1] & 15) << 2) & 0x003F);
              WriteBuf[3] = '=';
              for (i = 0; i < 4; i++){
                EncodedStr = EncodedStr + WriteBuf[i];
              }
              break;
            default : break;
          }
        }
        return (EncodedStr);
      }
      public static void main(String[] args) {
        SendMail sm = new SendMail();
        sm.setSmtpServer("192.168.1.1");
        if (sm.createConnect()) {
          String to = "[email protected]";
          String from = "[email protected]";
          String subject = "魔鬼";
          String message = "我要吃了你!";
          String user = "123";
          String pw = "123";
          //System.out.print(sm.send(to, from, subject, message) + "\n");
          System.out.print(sm.send(to,from,subject,message,user,pw));
        } else {
          System.out.println("爲何連接不上SMTP服務器\u554A?\r\n");
          return;
        }
      }
    }测试没有问题....不知对楼主有没有帮助......
      

  5.   


    <%@ page contentType="text/html;charset=gb2312"%>
    <%@ page import="java.util.*"%>
    <%@ page import="javax.mail.*"%>
    <%@ page import="javax.mail.internet.*"%>
    <%@ page import="javax.activation.*"%> 
    <html>
    <head>
    <title>sendmail.jsp</title>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    </head>
    <body>
    <%
      //邮件服务器的IP地址,注意此时使用的是SMTP 邮件服务器
      //String host="202.102.240.76";
      //获取用户信息
      String to=request.getParameter("to");
      String from=request.getParameter("from");
      String cc=request.getParameter("cc");
      String bcc=request.getParameter("bcc");
      //结合本程序的第一句,共同起显示汉字体的功能
      String subject=request.getParameter("subject");
      subject = new java.lang.String(subject.getBytes("iso-8859-1"));
      //以上方法等同于以下两句,原理相同
      //byte[] subjectTemp=request.getParameter("subject").getBytes("ISO8859_1");
      //String subject=new String(subjectTemp);
     byte[] messageTextTemp=request.getParameter("body").getBytes("ISO8859_1");
      String messageText= new String(messageTextTemp);
      boolean sessionDebug = false;
      //验证所填写的邮件是否正确
     if((to.trim().indexOf("@")==-1)||(to.trim().length()<5)){
    %>
     <jsp:forward page="err.jsp"/>
    <%
      }
      if((from.trim().indexOf("@")==-1)||(from.trim().length()<5)){
    %>
      <jsp:forward page="err.jsp"/>
    <%
      }
      //获得系统属性对象,用下两句的任一句均可
      //Properties props = System.getProperties();
      Properties props=new Properties();
      Session mailSession;
      Transport transport;  //设置SMTP主机 
      //以下一句是对任意的SMTP 邮件服务器均可,并且有了这一句,将不用设置传输协议了
    props.put("mail.smtp.host", "smtp.163.com"); 
    props.put("mail.smtp.auth","true"); //这样将确定接收方的邮件服务器主机,
     //props.put("mail.host",host);   
      //设置邮件传输协议方式
      //props.put("mail.transport.protocol","smtp");
     //获取邮件会话对象
    mailSession = Session.getInstance(props, null);
    mailSession.setDebug(true);;  try{
      //创建MIME邮件对象
            Message msg = new MimeMessage(mailSession);
            //设置发信人
             msg.setFrom(new InternetAddress(from));
             //设置收信人
             InternetAddress[] addressTo = {new InternetAddress(to)};
             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);
                }
                 msg.setSubject(subject);
                 msg.setSentDate(new Date());
                msg.setText(messageText);         //发送邮件
    transport = mailSession.getTransport("smtp");
    transport.connect("smtp.163.com","xxx","xxx");
    transport.sendMessage(msg,msg.getAllRecipients());
    transport.close();
    out.print("kk");
             }
             catch(Exception ex){
             out.println("sending failed!");
      }
    %></body>
    </html>我成功发送了。。你看看吧
      

  6.   

    楼主把transport.send(newMessage);
    改为transport.sendMessage(newMessage,newMessage.getAllRecipients());
      

  7.   

    import java.util.*;
    import java.io.*;
    import javax.mail.*;
    import javax.mail.internet.*;
    import javax.activation.*;public class SendMail {
      public SendMail() {
      }  private String smtphost; //SMTP转发服务器
      private String smtpuser; //SMTP转发用户名
      private String smtppassword; //SMTP转发的用户密码
      private String from; //发件人
      private String to; //收件人
      private String subject; //邮件标题
      private String body; //邮件内容
      private String bodystyle = "text/plain;charset=gb2312"; //邮件内容的格式
      private String filename; //附件的文件名;
      private Vector file = new Vector(); //用于保存发送附件的文件名的集合  //用于返回邮件SMTP转发服务器
      public String getSmtphost() {
        return smtphost;
      }  //用于设置邮件SMTP转发服务器
      public void setSmtphost(String inString) {
        smtphost = inString;
      }  //用于返回邮件SMTP转发的用户名
      public String getSmtpuser() {
        return smtpuser;
      }  //用于设置邮件SMTP转发的用户名
      public void setSmtpuser(String inString) {
        smtpuser = inString;
      }  //用于返回邮件SMTP转发的用户密码
      public String getSmtppassword() {
        return smtppassword;
      }  //用于设置邮件SMTP转发的用户密码
      public void setSmtppassword(String inString) {
        smtppassword = inString;
      }  //用于返回邮件发件人
      public String getFrom() {
        return from;
      }  //用于设置邮件发件人
      public void setFrom(String inString) {
        from = inString;
      }  //用于返回邮件收件人
      public String getTo() {
        return to;
      }  //用于设置邮件收件人
      public void setTo(String inString) {
        to = inString;
      }  //用于返回邮件标题
      public String getSubject() {
        return subject;
      }  //用于设置邮件标题
      public void setSubject(String inString) {
        subject = inString;
      }  //用于返回邮件内容
      public String getBody() {
        return body;
      }  //用于设置邮件内容
      public void setBody(String inString) {
        body = inString;
      }  //用于设置邮件格式
      public void setBodyStyle(String inString) {
        bodystyle = inString;
      }  //用于收集附件名
      public void attachfile(String fname) {
        file.addElement(fname);
      }  //用于邮件发送返回结果
      public boolean send() {
        boolean result;    if (smtphost == "" || smtphost == null) {
          System.out.println("邮件SMTP转发服务器未定义");
          return false;
        }
        if (from == "" || from == null) {
          System.out.println("邮件发送方未定义");
          return false;
        }
        if (to == "" || to == null) {
          System.out.println("邮件接收方未定义");
          return false;
        }
        if (subject == "" || subject == null) {
          System.out.println("邮件标题未定义");
          return false;
        }    Properties props = System.getProperties();
        if (smtpuser == "" || smtpuser == null || smtppassword == "" ||
            smtppassword == null) {
          props.put("mail.smtp.host", smtphost);
        }
        else {
          props.put("mail.smtp.auth", "true");
        }
        Session session = Session.getInstance(props, null);
        try {
          MimeMessage msg = new MimeMessage(session);
          msg.setFrom(new InternetAddress(from));
          InternetAddress[] address = {
              new InternetAddress(to)};
          msg.setRecipients(Message.RecipientType.BCC, InternetAddress.parse(to));
          msg.setSubject(subject);      Multipart mp = new MimeMultipart(); //后面的BodyPart将加入到此处创建的Multipart中      Enumeration efile = file.elements(); //利用枚举器方便的遍历集合
          while (efile.hasMoreElements()) {
            MimeBodyPart mbp = new MimeBodyPart();
            filename = efile.nextElement().toString(); //选择出每一个附件名
            FileDataSource fds = new FileDataSource(filename); //得到数据源
            mbp.setDataHandler(new DataHandler(fds)); //得到附件本身并置入BodyPart        mbp.setFileName(fds.getName()); //得到文件名同样置入BodyPart
            mp.addBodyPart(mbp);
          }
          file.removeAllElements(); //移走集合中的所有元素
          MimeBodyPart mbp_body = new MimeBodyPart();
          mbp_body.setContent(body, bodystyle); //加入邮件正文
          mp.addBodyPart(mbp_body);
          msg.setContent(mp); //Multipart加入到邮件
          msg.setSentDate(new Date()); //设置信件头的发送时间      if (smtpuser == "" || smtpuser == null || smtppassword == "" ||
              smtppassword == null) {
            Transport.send(msg); //发送邮件
          }
          else {
            Transport trans = session.getTransport("smtp");
            trans.connect(smtphost, smtpuser, smtppassword);
            trans.sendMessage(msg, msg.getAllRecipients()); //发送邮件
            trans.close();
          }
          result = true;
        }
        catch (MessagingException mex) {
          mex.printStackTrace();
          Exception ex = null;
          if ( (ex = mex.getNextException()) != null) {
            ex.printStackTrace();
          }
          result = false;
        }
        return result;
      }  public static void main(String[] args) throws InterruptedException {
        
        SendMail mymail = new SendMail();
        mymail.setSmtphost("邮件服务器");
        mymail.setSmtpuser("帐号");
        mymail.setSmtppassword("密码");
        mymail.setFrom("我的信箱");
        mymail.setTo("对方信箱");
        mymail.setSubject("标题");
        mymail.setBody("正文");
        mymail.setBodyStyle("text/plain;charset=gb2312");
        mymail.attachfile("附件");
        mymail.send();
        }
      }
    }
      

  8.   

    楼主是不是少一个包呀:我的程序可以测试通过.
    你是不是用到:activation.jar
      

  9.   

    如果你仍然有这个问题javax.mail.AuthenticationFailedException有可能你的邮箱不能发送,我看我自己原来可以的运行的程序,将邮箱换成chinamail的就是不行,我用126.com的就可以,而且错误跟你的说的错误一样,希望对你有帮助。
      

  10.   

    这个问题解决了,谢谢大家,
    还有一个问题,
    props.put("mail.smtp.host", "smtp.163.com");
    以上这句批定了用163.com的smtp服务器,那么是不是要这样的局限:
    邮件的发送方必须是[email protected],
    有这个疑问是因为我试了一下,如果用其他发送地址如[email protected]就不能发送,
    请大家赐教!!!