2015-03-06 3 views
2

Я пытаюсь отправить некоторые сгенерированный отчет по электронной почте, и я получаю следующее исключениеНе удалось отправить вложения в почте

javax.mail.MessagingException: Exception reading response; 
    nested exception is: 
     java.net.SocketException: Connection reset 
     at com.sun.mail.smtp.SMTPTransport.readServerResponse(SMTPTransport.java:1764) 
     at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1523) 
     at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:453) 
     at javax.mail.Service.connect(Service.java:291) 
     at javax.mail.Service.connect(Service.java:172) 
     at javax.mail.Service.connect(Service.java:121) 
     at javax.mail.Transport.send0(Transport.java:190) 
     at javax.mail.Transport.send(Transport.java:120) 
     at centina.sa.server.system.SystemManager$6$1.call(SystemManager.java:1872) 
     at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303) 
     at java.util.concurrent.FutureTask.run(FutureTask.java:138) 
     at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) 
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) 
     at java.lang.Thread.run(Thread.java:662) 
Caused by: java.net.SocketException: Connection reset 
     at java.net.SocketInputStream.read(SocketInputStream.java:168) 
     at com.sun.mail.util.TraceInputStream.read(TraceInputStream.java:106) 
     at java.io.BufferedInputStream.fill(BufferedInputStream.java:218) 
     at java.io.BufferedInputStream.read(BufferedInputStream.java:237) 
     at com.sun.mail.util.LineInputStream.readLine(LineInputStream.java:84) 
     at com.sun.mail.smtp.SMTPTransport.readServerResponse(SMTPTransport.java:1742) 

код:

MimeBodyPart att = new MimeBodyPart(); 
FileDataSource fileData = new FileDataSource(attachment){ 
    public String getContentType(){ 
     return "application/octet-stream"; 
    } 
}; 
att.setDataHandler( new DataHandler(fileData)); 

и я получаю ошибка в строке att.setDataHandler, которая является номером номера 1872 диспетчера системы. Может кто-нибудь объяснить, почему я получаю эту ошибку.

+1

Похоже, вы не можете подключиться к SMTP-серверу. Дважды проверьте свои настройки. – fateddy

+0

Можете ли вы отправить почту без приложения? – user1516873

+0

Какой почтовый сервер вы используете сейчас? – zawhtut

ответ

0

Если, я пытаюсь отправить одно вложение, то он работает нормально, с помощью этого кода. Постарайтесь сопоставить его с тем, что у вас есть. Похоже, есть некоторые недостатки в настройках. Хотя я использую сервер gmail, чтобы отправить почту, используя эту программу.

import java.util.*; 
import javax.activation.*; 
import javax.mail.*; 
import javax.mail.internet.*; 
import javax.mail.Authenticator; 
import javax.mail.PasswordAuthentication; 

public class SendMailExample { 

    private String from; 
    private String to; 
    private String subject; 
    private String messageBody; 
    private String fileName; 
    private String host; 

    private Properties properties; 

    private MimeMessage message; 
    private BodyPart messageBodyPart; 
    private Multipart multipart; 

    private Authenticator authenticator; 

    public SendMailExample() { 
     from = "[email protected]"; 
     to = "[email protected]"; 
     subject = "Subject Testing"; 
     messageBody = "<html><body><h1>HAVE FAITH, AND STAY" + 
        " CALM :-) I AM WITH YOU, OKAY :-)</h1></body></html>"; 
     fileName = "Test.txt"; 
     host = "smtp.gmail.com"; 

     authenticator = new SMTPAuthenticator(); 
     properties = System.getProperties(); 
     properties.put ("mail.smtp.host", host); 
     properties.put ("mail.smtp.starttls.enable", "true"); 
     properties.put ("mail.smtp.port", "587"); 
     properties.put ("mail.smtp.auth", "true"); 
    } 

    private void sendMail (String from, String to, 
        String subject, String messageBody, String fileName) { 
     try { 
      Session session = Session.getDefaultInstance (properties, authenticator); 
      message = new MimeMessage (session); 
      message.setFrom (new InternetAddress (from)); 
      message.addRecipient (Message.RecipientType.TO, 
           new InternetAddress (to)); 
      message.setSubject (subject); 

      multipart = new MimeMultipart(); 
      messageBodyPart = new MimeBodyPart(); 
      messageBodyPart.setContent (messageBody, "text/html"); 
      multipart.addBodyPart (messageBodyPart); 

      messageBodyPart = new MimeBodyPart(); 
      DataSource source = new FileDataSource (fileName); 
      messageBodyPart.setDataHandler (new DataHandler (source)); 
      messageBodyPart.setFileName (fileName); 
      multipart.addBodyPart (messageBodyPart); 

      message.setContent (multipart); 

      Transport.send (message); 
      System.out.println ("Message send successfully...."); 
     } catch (Exception me) { 
      me.printStackTrace(); 
     } 
    } 

    private void performTask() { 
     sendMail (from, to, subject, messageBody, fileName); 
    } 

    public static void main (String[] args) { 
     new SendMailExample().performTask(); 
    } 
} 

/** 
    * SimpleAuthenticator is used to do simple authentication 
    * when the SMTP server requires it. 
    */ 

class SMTPAuthenticator extends Authenticator { 

    private static final String SMTP_AUTH_USER = "[email protected]"; 
    private static final String SMTP_AUTH_PASSWORD = "password"; 

    public PasswordAuthentication getPasswordAuthentication() { 
     String username = SMTP_AUTH_USER; 
     String password = SMTP_AUTH_PASSWORD; 

     return new PasswordAuthentication(username, password); 
    } 
} 
0

Начать с этого JavaMail FAQ entry for debugging connection problems.

Скорее всего у вас есть брандмауэр или антивирусная программа, препятствующая подключению.

+1

Он подключился. Ошибка возникает при чтении ответа. Может быть, вложение было слишком большим? – EJP

+0

Хорошо, смотря на трассировку стека более тщательно, он, кажется, терпит неудачу при подключении к SMTP-серверу и чтении ответа с сервера. Мне все равно хотелось бы видеть вывод отладки. Возможно, это не удается, поскольку для SSL-порта выполняется не SSL-соединение. –

+0

Я получаю эту ошибку, только если вложение состоит из больших данных, таких как 6 000 000 строк. если вложение имеет меньше данных до 1 000 000 строк, почта была успешно отправлена. – user3607869

0

Если вы отправляете письма с небольшим вложением, проблема не в вашем коде.

java.net.SocketException: сброс соединения

Эта ошибка означает, сервер падает соединение, а не клиента. Я предполагаю, что это происходит, когда вы отправляете слишком большую привязанность. К сожалению, это проблема на стороне сервера, и вы не можете решить ее на стороне клиента. Попробуйте как-то уменьшить размер вложений (запишите его или используйте другой формат отчета). Может быть, лучше отправить прямую ссылку на скачивание, а не полный отчет.

Смежные вопросы