4

I am creating an application to send mail with an attachment. When I attach a small zip file it is working perfectly but when i attach a larger (> 1mb) zip file it is returning the error "java.net.SocketException: Software caused connection abort: socket write error" and my application is hanging.

my code to attach the files is:

 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]);
        }

Also, is there any way to attach the file faster using javamail? It is taking too much time to send attached message.

Stack Trace:

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:<xyz@gmail.com>
250 2.1.0 OK g16sm81301847ibs.8
RCPT TO:<xyz@yahoo.co.in>
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

the out put keeps on printong this encrypted data after 15 or 20 minutes it give error

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

if attached file is small it is working but taking 10 to 11 minutes to send mail

I am using Jfilechooser to select files to attach

user1061117
  • 51
  • 1
  • 1
  • 3
  • Do you have access to the mail server you're sending to? It's very likely it is refusing the data, and closing your connection. Also, can we see a complete stack trace of the "socket write error"? – ziesemer Nov 23 '11 at 18:18
  • I am using gmail server to send mails and it is working perfectly alright when i attach small sized files.but it is giving error when i tried to attach bigger files. I have pasted the complete stack trace. – user1061117 Nov 24 '11 at 06:18

1 Answers1

0

The server may be timing out the connection because it's taking too long to send the message to the server. Turn on session debugging and the protocol trace may provide more information.

Where is the zip file stored? Is it on the local disk where the JavaMail application is running?

Bill Shannon
  • 29,579
  • 6
  • 38
  • 40
  • HI I have added the stack trace to my question. I am selecting zip files from my local disk using jfilechooser – user1061117 Nov 24 '11 at 06:11
  • Replace your call to Transport.send with a call to msg.writeTo(new BufferedOutputStream(new FileOutputStream("msg.txt"))). If that is just as slow as sending the message, then the problem is with reading your zip file and/or constructing the message (unlikely). – Bill Shannon Nov 28 '11 at 08:10
  • If that's fast, then the problem is with the network communication involved in sending the message. It might be a delay in the name service looking up the name of the mail server; try replacing the name of the mail server with its IP address. Or the problem might be in your mail server and how quickly it's willing to accept your message. A network-level protocol trace might help you find out where the delay is. 10 minutes to send a single message is not normal. – Bill Shannon Nov 28 '11 at 08:10
  • I downloaded network tracing software i couldn't able to under stand much but it is giving one message as SMTP Server slow response in application layer and TCP slow response in network layer. is this exact cause for the delay in sending messages? – user1061117 Nov 30 '11 at 17:43
  • Sorry, I don't know what that means. I would probably need to see more details of the network trace to understand what it's telling you. – Bill Shannon Nov 30 '11 at 20:28