2011-11-23 65 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分鐘發送單條短信是不正常的。 –

相關問題