2011-11-23 64 views
4

我正在创建一个应用程序来发送带有附件的邮件。当我附上一个小的zip文件时它工作正常,但是当我附加一个更大(> 1mb)的zip文件时,它返回错误“java.net.SocketException:软件导致连接中止:套接字写入错误”,并且我的应用程序正在挂起。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:<[email protected]> 
250 2.1.0 OK g16sm81301847ibs.8 
RCPT TO:<[email protected]> 
250 2.1.5 OK g16sm81301847ibs.8 
DEBUG SMTP: Verified Addresses 
DEBUG SMTP: [email protected] 
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 

失认沽不断printong 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选择要附加的文件

+0

您有权访问您要发送给的邮件服务器吗?这很可能是拒绝数据并关闭连接。另外,我们可以看到“套接字写入错误”的完整堆栈跟踪吗? – ziesemer

+0

我正在使用gmail服务器发送邮件,并且当我连接小文件时工作完全正常。但是当我尝试附加更大的文件时,它发生错误。我粘贴了完整的堆栈跟踪。 – user1061117

回答

0

服务器可能会将连接超时,因为 将消息发送到服务器的时间太长。打开session debugging和协议 跟踪可能会提供更多信息。

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

+0

HI我已经添加了堆栈跟踪到我的问题。我使用jfilechooser从本地磁盘选择zip文件 – user1061117

+0

用调用msg.writeTo(new BufferedOutputStream(new FileOutputStream(“msg.txt”)))将呼叫替换为Transport.send。如果这与发送邮件一样慢,那么问题在于读取您的zip文件和/或构建邮件(不太可能)。 –

+0

如果这很快,那么问题在于发送消息所涉及的网络通信。名称服务可能会延迟查找邮件服务器的名称;尝试用其IP地址替换邮件服务器的名称。或者问题可能出现在您的邮件服务器上,以及它愿意接受您的邮件的速度有多快。网络级别的协议跟踪可能会帮助您找出延迟的位置。 10分钟发送单条短信是不正常的。 –

相关问题