首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JavaMail:套接字读取超时

JavaMail:套接字读取超时
EN

Stack Overflow用户
提问于 2011-09-26 15:43:09
回答 1查看 15.5K关注 0票数 0

我正在使用JavaMail,我希望它通过代理为每个线程工作(我有多线程应用程序)。为此,我使用了SMTPTransport.connect(套接字套接字)。

下面是套接字初始化:

代码语言:javascript
复制
socket = new Socket();
socket.setSoTimeout(10000);
socket.connect(new InetSocketAddress(smtpHost, smtpPort));

下面是SMTPTransport调用:

代码语言:javascript
复制
SMTPTransport transport = null;
try
    {
     transport = (SMTPTransport) mail.getTransport("smtp");
     transport.connect(socket);
     System.out.println("ok");

诸若此类。但我会犯这样的错误:

调试:成功加载资源:/META/javamail.default.Provider调试:按类名列出的提供程序表:{com.sun.mail.smtp.SMTPSSLTransport=javax.mail.ProviderTRANSPORT,smtps,com.sun.mail.smtp.SMTPSSLTransport,smtps,Inc,com.sun.mail.smtp.SMTPTransport=javax.mail.ProviderTRANSPORT,smtp com.sun.mail.smtp.SMTPTransport,smtps,Inc,com.sun.mail.imap.IMAPSSLStore=javax.mail.ProviderSTORE,imaps,Sun Microsystems,Inc,com.sun.mail.pop3.POP3SSLStore=javax.mail.ProviderSTORE,pop3s,com.sun.mail.pop3.POP3SSLStore,Sun,Inc,com.sun.mail.imap.IMAPStore=javax.mail.ProviderSTORE,imap,com.sun.mail.imap.IMAPStore,Sun,Inc,com.sun.mail.pop3.POP3Store=javax.mail.ProviderSTORE,pop3,com.sun.mail.pop3.POP3Store,Sun,Inc}除错:按协议列出的提供者:{imaps=javax.mail.ProviderSTORE,com.sun.mail.imap.IMAPSSLStore,Sun Microsystems,Inc,imap=javax.mail.ProviderSTORE,imap,com.sun.mail.imap.IMAPStore,Sun Microsystems,Inc,smtps=javax.mail.ProviderTRANSPORT,smtps,com.sun.mail.smtp.SMTPSSLTransport,Sun Microsystems,Inc,pop3=javax.mail.ProviderSTORE,pop3,com.sun.mail.pop3.POP3Store,Sun Microsystems,Inc,pop3s=javax.mail.ProviderSTORE,pop3s,com.sun.mail.pop3.POP3SSLStore,smtps,Inc. smtp=javax.mail.ProviderTRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,successfully,Inc}调试:成功加载资源:/META/javamail.default.address.map调试: getProvider()返回javax.mail.ProviderTRANSPORT、smtp、com.sun.mail.smtp.SMTPTransport、Sun Microsystems、调试SMTP: useEhlo true、useAuth真正调试SMTP: useEhlo true、useAuth真正调试SMTP:主机"smtp.googlemail.com",端口465调试SMTP:异常读取响应: java.net.SocketTimeoutException:读取超时异常读取响应javax.mail.MessagingException:异常读取响应;嵌套例外是:在com.sun.mail.smtp.SMTPTransport.readServerResponse(SMTPTransport.java:2153) at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1956) at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:636) at javax.mail.Service.connect(Service.java:317) at javax.mail.Service.connect(Service.java:176)在javax上读取超时com.sun.mail.smtp.SMTPTransport.connect(SMTPTransport.java:274),lsmtpc.CheckAccount.run(CheckAccount.java:203),java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471),java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334),java.util.concurrent.FutureTask.run(FutureTask.java:166),java.util.concurrent.ThreadPoolExecutor.runWorker( java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) at java.lang.Thread.run(Thread.java:722) )由:java.net.SocketTimeoutException引起的: java.net.SocketTimeoutException:在java.net.SocketInputStream.read(SocketInputStream.java:121) at com.sun.mail.util.TraceInputStream.read的java.net.SocketInputStream.socketRead0(原生方法)读超时( java.io.BufferedInputStream.fill(BufferedInputStream.java:235) )在java.io.BufferedInputStream.read(BufferedInputStream.java:254) at java.io.BufferedInputStream.read(BufferedInputStream.java:254) at com.sun.mail.util.LineInputStream.readLine(LineInputStream.java:89) at com.sun.mail.smtp.SMTPTransport.readServerResponse(SMTPTransport.java:2131) . 13

因此,正如我所看到的,JavaMail不能从套接字中读取。那我做错什么了?如果我尝试使用transport.connect()方法而没有在构造函数中使用套接字,那么所有这些都能很好地工作,并且smtpHost/smtpPort可以从telnet访问,并且没有任何防火墙/防病毒。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-09-26 15:50:58

来自com.sun.mail.smtp.SMTPTransport的文档:

一般来说,应用程序不需要直接使用这个包中的类。相反,他们应该使用javax.mail包(和子包)定义的API。应用程序不应该直接构造SMTPTransport实例。相反,他们应该使用Session方法getTransport来获取一个适当的传输对象。

警告:这个包特有的API应该被认为是实验性的。它们将来可能会以与使用当前API的应用程序不兼容的方式进行更改。

JavaMail教程:http://java.sun.com/developer/onlineTraining/JavaMail/contents.html

可能是您没有传递身份验证信息。可能是使用普通套接字连接到安全主机。您可能希望阅读链接的教程,以获得使用JavaMail的最佳方式。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7557655

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档