我现在的程序可以接受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();希望高手帮忙!!多谢!!正解满分相赠!!!
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();希望高手帮忙!!多谢!!正解满分相赠!!!
java.io.UnsupportedEncodingException: 134
邮件信息在jmali里面有自己的解编码工具,MimeUtility可以参考这个 http://www.java2000.net/viewthread.jsp?tid=177
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(); 希望高手帮忙!!多谢!!正解满分相赠!!!
java.io.UnsupportedEncodingException: 134
邮件信息在jmali里面有自己的解编码工具
问题是msg.getContent()的时候怎么可能出错???????
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);
}
能告诉我是哪个地方的编码问题吗?多谢
Properties props = new Properties();
props.put("mail.smtp.port", port);