问题
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
回答1:
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?
来源:https://stackoverflow.com/questions/8247119/java-net-socketexception-software-caused-connection-abort-socket-write-error