我现在的程序可以接受QQ和163上的邮件,但是不能接受sina或是hotmail邮件,在用户名和密码正确的情况下报:
javax.mail.AuthenticationFailedException: EOF on socket
at com.sun.mail.pop3.POP3Store.protocolConnect(POP3Store.java:104)
at javax.mail.Service.connect(Service.java:234)
at javax.mail.Service.connect(Service.java:135)
at com.peony.office.mail.JavaMailImpl.receiveMail(JavaMailImpl.java:78)
at com.peony.office.mail.JavaMailFactory.receiveMail(JavaMailFactory.java:41)
at com.peony.office.mail.JavaMailForm.getMailList(JavaMailForm.java:29)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:324)
at com.peony.frame.struts.BeanAction.execute(BeanAction.java:125)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:421)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:226)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1164)
at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:397)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:740)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at weblogic.servlet.internal.ServletStubImpl$ServletInvocationAction.run(ServletStubImpl.java:996)
at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:419)
at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:315)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:6452)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:118)
at weblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppServletContext.java:3661)
at weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestImpl.java:2630)
at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:219)
at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:178)
个人怀疑是不是验证的问题?代码如下:(如有需要我再贴)
Properties prop = new Properties();
prop.put("mail.pop3.host", entry.getPop3());
Session session = Session.getDefaultInstance(prop);
Store store = session.getStore("pop3");
store.connect(entry.getPop3(), entry.getName(), entry.getPass());
还有个小问题,就是在接收邮件的时候会报这个错误:
java.io.UnsupportedEncodingException: 134
at sun.io.Converters.getConverterClass(Converters.java:215)
at sun.io.Converters.newConverter(Converters.java:248)
at sun.io.ByteToCharConverter.getConverter(ByteToCharConverter.java:64)
at sun.nio.cs.StreamDecoder$ConverterSD.<init>(StreamDecoder.java:223)
at sun.nio.cs.StreamDecoder$ConverterSD.<init>(StreamDecoder.java:209)
at sun.nio.cs.StreamDecoder.forInputStreamReader(StreamDecoder.java:76)
at java.io.InputStreamReader.<init>(InputStreamReader.java:83)
at com.sun.mail.handlers.text_plain.getContent(text_plain.java:65)
at javax.activation.DataSourceDataContentHandler.getContent(DataHandler.java:755)
at javax.activation.DataHandler.getContent(DataHandler.java:511)
at javax.mail.internet.MimeMessage.getContent(MimeMessage.java:1259)
at com.peony.office.mail.JavaMailImpl.handleMultipart(JavaMailImpl.java:116)
at com.peony.office.mail.JavaMailImpl.receiveMail(JavaMailImpl.java:90)
at com.peony.office.mail.JavaMailFactory.receiveMail(JavaMailFactory.java:41)
at com.peony.office.mail.JavaMailForm.getMailList(JavaMailForm.java:29)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:324)
at com.peony.frame.struts.BeanAction.execute(BeanAction.java:125)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:421)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:226)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1164)
at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:397)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:740)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at weblogic.servlet.internal.ServletStubImpl$ServletInvocationAction.run(ServletStubImpl.java:996)
at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:419)
at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:315)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:6452)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:118)
at weblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppServletContext.java:3661)
at weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestImpl.java:2630)
at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:219)
at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:178)
具体原因不清,但好像是附件或是内容转换的时候,代码大体如下:JavaMailEntry entry = new JavaMailEntry();
String disposition;
BodyPart part = null;
entry.setTitle(msg.getSubject());
if(msg.getFrom()[0].toString().startsWith("=?GBK?B?") || msg.getFrom()[0].toString().startsWith("=?gb2312?") || msg.getFrom()[0].toString().startsWith("=?gbk?B")){
entry.setAuthor(MimeUtility.decodeText(msg.getFrom()[0].toString()));
}else{
entry.setAuthor(msg.getFrom()[0].toString());
}
entry.setDate(msg.getSentDate().toString());Object obj = msg.getContent();  //就是这句报错
if(!(obj instanceof Multipart)){}else{
Multipart mp = (Multipart) msg.getContent();
// Miltipart的数量,用于除了多个part,比如多个附件
int mpCount = mp.getCount();希望高手帮忙!!多谢!!正解满分相赠!!!

解决方案 »

  1.   

    lz  pop3试一试BASE64编码啦
      

  2.   

    pop3 的编码很多的 gb2312 BASE64 很多,慢慢每个都试一试。问题可能出在这里
      

  3.   

    Session session = Session.getDefaultInstance(prop);应该是身份验证没有通过,另外建立一个扩张自Authenticator的子类使用你的用户名和密码获取一个PasswordAuthentication(username,password)对象,然后session=Session.getDefaultInstance(prop,auth)并且加上prop.setProperty("mail.pop3.auth","true");加上session.setDebug(true);你可以看到连接过程,有利于查到错误。
      

  4.   

    javax.mail.AuthenticationFailedException: EOF on socket 发送邮件认证失败,楼上的方法请尝试
    java.io.UnsupportedEncodingException: 134 
    邮件信息在jmali里面有自己的解编码工具,MimeUtility可以参考这个 http://www.java2000.net/viewthread.jsp?tid=177
      

  5.   

    老大们啊,那个问题是解决了,但是这个问题又来了,我自己吧第一个问题又给搞定了,现在就莫名其妙的出这个小问题,就是在接收邮件的时候会报这个错误: 
    java.io.UnsupportedEncodingException: 134 
    at sun.io.Converters.getConverterClass(Converters.java:215) 
    at sun.io.Converters.newConverter(Converters.java:248) 
    at sun.io.ByteToCharConverter.getConverter(ByteToCharConverter.java:64) 
    at sun.nio.cs.StreamDecoder$ConverterSD. <init>(StreamDecoder.java:223) 
    at sun.nio.cs.StreamDecoder$ConverterSD. <init>(StreamDecoder.java:209) 
    at sun.nio.cs.StreamDecoder.forInputStreamReader(StreamDecoder.java:76) 
    at java.io.InputStreamReader. <init>(InputStreamReader.java:83) 
    at com.sun.mail.handlers.text_plain.getContent(text_plain.java:65) 
    at javax.activation.DataSourceDataContentHandler.getContent(DataHandler.java:755) 
    at javax.activation.DataHandler.getContent(DataHandler.java:511) 
    at javax.mail.internet.MimeMessage.getContent(MimeMessage.java:1259) 
    at com.peony.office.mail.JavaMailImpl.handleMultipart(JavaMailImpl.java:116) 
    at com.peony.office.mail.JavaMailImpl.receiveMail(JavaMailImpl.java:90) 
    at com.peony.office.mail.JavaMailFactory.receiveMail(JavaMailFactory.java:41) 
    at com.peony.office.mail.JavaMailForm.getMailList(JavaMailForm.java:29) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:324) 
    at com.peony.frame.struts.BeanAction.execute(BeanAction.java:125) 
    at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:421) 
    at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:226) 
    at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1164) 
    at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:397) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:740) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:853) 
    at weblogic.servlet.internal.ServletStubImpl$ServletInvocationAction.run(ServletStubImpl.java:996) 
    at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:419) 
    at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:315) 
    at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:6452) 
    at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321) 
    at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:118) 
    at weblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppServletContext.java:3661) 
    at weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestImpl.java:2630) 
    at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:219) 
    at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:178) 
    具体原因不清,但好像是附件或是内容转换的时候,代码大体如下: JavaMailEntry entry = new JavaMailEntry(); 
    String disposition; 
    BodyPart part = null; 
    entry.setTitle(msg.getSubject()); 
    if(msg.getFrom()[0].toString().startsWith("=?GBK?B?")  ¦ ¦ msg.getFrom()[0].toString().startsWith("=?gb2312?")  ¦ ¦ msg.getFrom()[0].toString().startsWith("=?gbk?B")){ 
    entry.setAuthor(MimeUtility.decodeText(msg.getFrom()[0].toString())); 
    }else{ 
    entry.setAuthor(msg.getFrom()[0].toString()); 

    entry.setDate(msg.getSentDate().toString());Object obj = msg.getContent();  //就是这句报错 
    if(!(obj instanceof Multipart)){ }else{ 
    Multipart mp = (Multipart) msg.getContent(); 
    // Miltipart的数量,用于除了多个part,比如多个附件 
    int mpCount = mp.getCount(); 希望高手帮忙!!多谢!!正解满分相赠!!!
      

  6.   

    是Object obj = msg.getContent();这句话有问题啊,
    java.io.UnsupportedEncodingException: 134  
    邮件信息在jmali里面有自己的解编码工具
    问题是msg.getContent()的时候怎么可能出错???????
      

  7.   

    UnsupportedEncodingException 就是那个编码问题啊,pop3的编码应该是用BASE64,lz可以到网上查到。
      

  8.   

    UnsupportedEncodingException: 134  编码问题
      

  9.   

    哦,可是我已经编码了,我贴一下,麻烦帮忙看看好吗?
    private void handleMultipart(Message msg,List list,HttpServletRequest request) throws Exception {
    JavaMailEntry entry = new JavaMailEntry();
    String disposition;
    BodyPart part = null;
    entry.setTitle(msg.getSubject());
    if(msg.getFrom()[0].toString().startsWith("=?GBK?B?") || msg.getFrom()[0].toString().startsWith("=?gb2312?") || msg.getFrom()[0].toString().startsWith("=?gbk?B")){
    entry.setAuthor(MimeUtility.decodeText(msg.getFrom()[0].toString()));
    }else{
    entry.setAuthor(msg.getFrom()[0].toString());
    }
    entry.setDate(msg.getSentDate().toString());
    Object obj = msg.getContent();
    if(!(obj instanceof Multipart)){

    }else{
    Multipart mp = (Multipart) msg.getContent();
    // Miltipart的数量,用于除了多个part,比如多个附件
    int mpCount = mp.getCount();
    for (int m = 0; m < mpCount; m++) {
    part = mp.getBodyPart(m);
    disposition = part.getDisposition();
    // 判断是否有附件
    if (disposition != null && disposition.equals(Part.ATTACHMENT)) {
    // 保存附件
    String temp = part.getFileName();
    // 除去发送邮件时,对中文附件名编码的头和尾,得到正确的附件名
    String s;
    String fileName;
    if(temp.startsWith("=?GBK?B?") ||temp.startsWith("=?gbk?B")){
    s = temp.substring(8, temp.indexOf("?="));
    fileName = base64Decoder(s);
    }else if(temp.startsWith("=?gb2312?B?")){
    s = temp.substring(11,temp.indexOf("?="));
    fileName = base64Decoder(s);
    }else{
    s = temp;
    fileName = s;
    System.out.println("temp"+temp);
    }
    // 文件名经过了base64编码,下面是解码
     


    InputStream in = part.getInputStream();
    FileOutputStream writer = new FileOutputStream(new File(request.getSession().getServletContext().getRealPath("/")+"/downAttachment/"+ fileName));
    entry.setAttachment(fileName);
    byte[] content = new byte[255];
    int read = 0;
    while ((read = in.read(content)) != -1) {
    writer.write(content);
    }
    writer.close();
    in.close();
    } else {
    // 不是附件,就只显示文本内容 entry.setContent(part.getContent().toString());
    }
    }
    }
    list.add(entry);
    }
    能告诉我是哪个地方的编码问题吗?多谢
      

  10.   

    int port = 225 ;
    Properties props = new Properties();
    props.put("mail.smtp.port", port);