java.net.SocketException:软件导致连接中止:套接字写入错误

我正在创建一个应用程序来发送带附件的邮件。 当我附加一个小的zip文件时,它工作得很好但是当我附加一个更大的(> 1mb)zip文件时,它返回错误“java.net.SocketException:软件导致连接中止:套接字写入错误”,我的应用程序挂起。

我附加文件的代码是:

protected void addAtachments(String[] attachments, Multipart multipart) throws MessagingException, AddressException { System.out.println("attaching"); for (int i = 0; i <= attachments.length - 1; i++) { String filename = attachments[i]; MimeBodyPart attachmentBodyPart = new MimeBodyPart(); //use a JAF FileDataSource as it does MIME type detection DataSource source = new FileDataSource(filename); attachmentBodyPart.setDataHandler(new DataHandler(source)); attachmentBodyPart.setFileName(filename); //add the attachment multipart.addBodyPart(attachmentBodyPart); System.out.println("attachment added: " +attachments[i]); } 

另外,有没有办法使用javamail更快地附加文件? 发送附加消息需要花费太多时间。

堆栈跟踪:

 DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc] DEBUG SMTP: useEhlo true, useAuth true DEBUG SMTP: trying to connect to host "smtp.gmail.com", port 25, isSSL false 220 mx.google.com ESMTP g16sm81301847ibs.8 DEBUG SMTP: connected to host "smtp.gmail.com", port: 25 EHLO vishal 250-mx.google.com at your service, [122.178.231.153] 250-SIZE 35882577 250-8BITMIME 250-STARTTLS 250 ENHANCEDSTATUSCODES DEBUG SMTP: Found extension "SIZE", arg "35882577" DEBUG SMTP: Found extension "8BITMIME", arg "" DEBUG SMTP: Found extension "STARTTLS", arg "" DEBUG SMTP: Found extension "ENHANCEDSTATUSCODES", arg "" STARTTLS 220 2.0.0 Ready to start TLS EHLO vishal 250-mx.google.com at your service, [122.178.231.153] 250-SIZE 35882577 250-8BITMIME 250-AUTH LOGIN PLAIN XOAUTH 250 ENHANCEDSTATUSCODES DEBUG SMTP: Found extension "SIZE", arg "35882577" DEBUG SMTP: Found extension "8BITMIME", arg "" DEBUG SMTP: Found extension "AUTH", arg "LOGIN PLAIN XOAUTH" DEBUG SMTP: Found extension "ENHANCEDSTATUSCODES", arg "" DEBUG SMTP: Attempt to authenticate AUTH LOGIN 334 VXNlcm5hbWU6 dmlzaGFscmsuMDU1QGdtYWlsLmNvbQ== 334 UGFzc3dvcmQ6 dmlzaGFsQG9yYWNsZQ== 235 2.7.0 Accepted DEBUG SMTP: use8bit false MAIL FROM: 250 2.1.0 OK g16sm81301847ibs.8 RCPT TO: 250 2.1.5 OK g16sm81301847ibs.8 DEBUG SMTP: Verified Addresses DEBUG SMTP: xyz@yahoo.co.in DATA ------=_Part_1_25068634.1322105586140 Content-Type: application/octet-stream; name="C:\\Documents and Settings\\Vishal Kulkarni\\MyDocuments\\akon.zip" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="C:\\Documents and Settings\\Vishal Kulkarni\\My Documents\\akon.zip" UEsDBBQACAAIAGJMcj8AAAAAAAAAAAAAAAAkAAAARW1pbmVtLSAwMSAtIFB1YmxpYyBBbm5vdW5j ZW1lbnQubXAz1LtlVBxB1y46DK7BneDu7u7uHmRw9+AwgxNcg7tb8BAgBCe4S7AQCBIkuATtm7zf e++Pc3/cX3etc2qtvaa6q2s/PU937X6qa7eyHC886G+B95XVVFf/WyH5a7Zu9iAHHx8PEU5OVw9e DnsviKtrAIfXWz1lPZ6/zfh/TeutlYujNZW0m5v7WzdrW1dbNx89HVnVvy3gv8atZyyv8/cX8V9d WFhYT1ZT47+bTNyCzHrSajJ/q1h/TdfF0ZVK1wFiE0ClpqWlo2zwdx8jCGSozqlua+MIkXWBeHtr eTm6QrwClOVAn0Ms52h/7qhGlyiVszDJvf5vB+b/pYOurbW7m83/dPlfy3+7/MXWsoU4G0Bc3tqC XqD/z34cEEja19YLYm+rZutr6wJSwwSB9LTkuf82If81eVdHN1vX/5fT/3ML8JiC8P91jJHj3/sB 

输出在15或20分钟后保持打印这个加密数据它给出错误

 java.net.SocketException: Software caused connection abort: socket write error at java.net.SocketOutputStream.socketWrite0(Native Method) at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92) at java.net.SocketOutputStream.write(SocketOutputStream.java:136) at com.sun.net.ssl.internal.ssl.OutputRecord.writeBuffer(OutputRecord.java:283) at com.sun.net.ssl.internal.ssl.OutputRecord.write(OutputRecord.java:272) at com.sun.net.ssl.internal.ssl.SSLSocketImpl.writeRecord(SSLSocketImpl.java:665) at com.sun.net.ssl.internal.ssl.AppOutputStream.write(AppOutputStream.java:59) at com.sun.mail.util.TraceOutputStream.write(TraceOutputStream.java:101) at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:65) at java.io.BufferedOutputStream.write(BufferedOutputStream.java:109) at com.sun.mail.util.CRLFOutputStream.write(CRLFOutputStream.java:87) at com.sun.mail.smtp.SMTPOutputStream.write(SMTPOutputStream.java:74) at com.sun.mail.util.CRLFOutputStream.write(CRLFOutputStream.java:65) at com.sun.mail.util.BASE64EncoderStream.encode(BASE64EncoderStream.java:182) at com.sun.mail.util.BASE64EncoderStream.write(BASE64EncoderStream.java:135) at com.sun.mail.util.BASE64EncoderStream.write(BASE64EncoderStream.java:96) at javax.activation.DataHandler.writeTo(DataHandler.java:293) at javax.mail.internet.MimeBodyPart.writeTo(MimeBodyPart.java:1350) at javax.mail.internet.MimeBodyPart.writeTo(MimeBodyPart.java:845) at javax.mail.internet.MimeMultipart.writeTo(MimeMultipart.java:361) at com.sun.mail.handlers.multipart_mixed.writeTo(multipart_mixed.java:85) at javax.activation.ObjectDataContentHandler.writeTo(DataHandler.java:868) at javax.activation.DataHandler.writeTo(DataHandler.java:301) at javax.mail.internet.MimeBodyPart.writeTo(MimeBodyPart.java:1350) at javax.mail.internet.MimeMessage.writeTo(MimeMessage.java:1683) at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:585) at escape.SendMailUsingAuthentication.postMail(SendMailUsingAuthentication.java:131) at escape.SendMailFrame.sendButtonActionPerformed(SendMailFrame.java:427) at escape.SendMailFrame.access$300(SendMailFrame.java:29) at escape.SendMailFrame$4.actionPerformed(SendMailFrame.java:135) at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995) at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318) at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387) at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242) at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236) at java.awt.Component.processMouseEvent(Component.java:6038) at javax.swing.JComponent.processMouseEvent(JComponent.java:3260) at java.awt.Component.processEvent(Component.java:5803) at java.awt.Container.processEvent(Container.java:2058) at java.awt.Component.dispatchEventImpl(Component.java:4410) at java.awt.Container.dispatchEventImpl(Container.java:2116) at java.awt.Component.dispatchEvent(Component.java:4240) at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4322) at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3986) at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3916) at java.awt.Container.dispatchEventImpl(Container.java:2102) javax.mail.MessagingException: IOException while sending message; nested exception is: at java.awt.Window.dispatchEventImpl(Window.java:2429) at java.awt.Component.dispatchEvent(Component.java:4240) java.net.SocketException: Software caused connection abort: socket write error at java.awt.EventQueue.dispatchEvent(EventQueue.java:599) at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:625) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273) at escape.SendMailUsingAuthentication.postMail(SendMailUsingAuthentication.java:131) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183) at escape.SendMailFrame.sendButtonActionPerformed(SendMailFrame.java:427) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173) at escape.SendMailFrame.access$300(SendMailFrame.java:29) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168) at escape.SendMailFrame$4.actionPerformed(SendMailFrame.java:135) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160) at java.awt.EventDispatchThread.run(EventDispatchThread.java:121) at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995) at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318) at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387) at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242) at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236) at java.awt.Component.processMouseEvent(Component.java:6038) at javax.swing.JComponent.processMouseEvent(JComponent.java:3260) at java.awt.Component.processEvent(Component.java:5803) at java.awt.Container.processEvent(Container.java:2058) at java.awt.Component.dispatchEventImpl(Component.java:4410) at java.awt.Container.dispatchEventImpl(Container.java:2116) at java.awt.Component.dispatchEvent(Component.java:4240) at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4322) at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3986) at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3916) at java.awt.Container.dispatchEventImpl(Container.java:2102) at java.awt.Window.dispatchEventImpl(Window.java:2429) at java.awt.Component.dispatchEvent(Component.java:4240) at java.awt.EventQueue.dispatchEvent(EventQueue.java:599) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160) at java.awt.EventDispatchThread.run(EventDispatchThread.java:121) Caused by: java.net.SocketException: Software caused connection abort: socket write error at java.net.SocketOutputStream.socketWrite0(Native Method) at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92) at java.net.SocketOutputStream.write(SocketOutputStream.java:136) at com.sun.net.ssl.internal.ssl.OutputRecord.writeBuffer(OutputRecord.java:283) at com.sun.net.ssl.internal.ssl.OutputRecord.write(OutputRecord.java:272) at com.sun.net.ssl.internal.ssl.SSLSocketImpl.writeRecord(SSLSocketImpl.java:665) at com.sun.net.ssl.internal.ssl.AppOutputStream.write(AppOutputStream.java:59) at com.sun.mail.util.TraceOutputStream.write(TraceOutputStream.java:101) at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:65) at java.io.BufferedOutputStream.write(BufferedOutputStream.java:109) at com.sun.mail.util.CRLFOutputStream.write(CRLFOutputStream.java:87) at com.sun.mail.smtp.SMTPOutputStream.write(SMTPOutputStream.java:74) at com.sun.mail.util.CRLFOutputStream.write(CRLFOutputStream.java:65) at com.sun.mail.util.BASE64EncoderStream.encode(BASE64EncoderStream.java:182) at com.sun.mail.util.BASE64EncoderStream.write(BASE64EncoderStream.java:135) at com.sun.mail.util.BASE64EncoderStream.write(BASE64EncoderStream.java:96) at javax.activation.DataHandler.writeTo(DataHandler.java:293) at javax.mail.internet.MimeBodyPart.writeTo(MimeBodyPart.java:1350) at javax.mail.internet.MimeBodyPart.writeTo(MimeBodyPart.java:845) IOException while sending message at javax.mail.internet.MimeMultipart.writeTo(MimeMultipart.java:361) at com.sun.mail.handlers.multipart_mixed.writeTo(multipart_mixed.java:85) at javax.activation.ObjectDataContentHandler.writeTo(DataHandler.java:868) at javax.activation.DataHandler.writeTo(DataHandler.java:301) at javax.mail.internet.MimeBodyPart.writeTo(MimeBodyPart.java:1350) at javax.mail.internet.MimeMessage.writeTo(MimeMessage.java:1683) at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:585) ... 29 more 

如果附件很小,它可以正常工作,但需要10到11分钟才能发送邮件

我正在使用Jfilechooser来选择要附加的文件

服务器可能正在超时连接,因为将消息发送到服务器所花费的时间太长。 打开会话调试 ,协议跟踪可能会提供更多信息。

zip文件存储在哪里? 它是否在运行JavaMail应用程序的本地磁盘上?