2014-03-03 3 views
3

스트레치에서 최소 200 개의 메시지를 보내야합니다.클라이언트의 Javamail 속도를 초과했습니다

메시지 오류 :

com.sun.mail.smtp.SMTPSendFailedException: 421 4.4.2 Message submission rate for this client has exceeded the configured limit 

내가 할 수있는 일 프로그램이 시작되면, 15 또는 17에 성공적으로 메일을 보내, 나는이 오류가?

CODE JAVA

public void mandarEmail(String correos, String mensaje, String asunto) { 
    Message message; 
    Properties props = new Properties(); 
    props.put("mail.smtp.auth", "true"); 
    props.put("mail.smtp.starttls.enable", "true"); 
    props.put("mail.transport.protocol", "smtp"); 
    props.setProperty("mail.smtp.port", "587"); 
    props.put("mail.smtp.host", "pod51004.outlook.com"); 
    props.put("mail.smtp.debug", "true"); 

    Session session = Session.getInstance(props, new javax.mail.Authenticator() { 
     @Override 
     protected PasswordAuthentication getPasswordAuthentication() { 
      return new PasswordAuthentication("[email protected]", "docpass"); 
     } 
    }); 

    try { 
     message = new MimeMessage(session); 
     message.setFrom(new InternetAddress("USMP - FN <[email protected]>")); 
     message.setSubject(asunto); 
     message.addRecipients(Message.RecipientType.TO, InternetAddress.parse(correos)); 
     message.addRecipients(Message.RecipientType.BCC, new InternetAddress[]{new InternetAddress("[email protected]")}); 
     message.setContent(mensaje, "text/html; charset=utf-8"); 
     Transport transport = session.getTransport("smtp"); 
     transport.connect("[email protected]", "docpass"); 
     transport.sendMessage(message, message.getAllRecipients()); 
     transport.close(); 
    } catch (MessagingException e) { 
     throw new RuntimeException(e); 
    } finally { 
     props = null; 
     message = null; 
    } 
} 
+1

너무 많은 메일을 한 번에 보내지 마십시오. 이 서버는 스팸 함을 알리는 서버입니다. –

+0

그래서 ... 내가 뭘 할 수 있니? – Ivan

+0

기본적으로 스팸을 중지합니다. 요금은 outlook.com의 한도를 초과하지 않도록 보내는 이메일을 제한합니다. –

답변

3
당신이에 연결하는 서버의

, 그리고 클라이언트 문제 . Here's a doc에서 SMTP 코드를 서버에서 구문 분석하는 방법에 대해 설명합니다.

A mail server will reply to every request a client (such as your email program) makes with a return code. This code consists of three numbers.

귀하의 경우에는 421이 표시됩니다.

+0

기사에서 : 421 - 서비스를 사용할 수없고 연결이 닫힙니다. 그래서 .. 나는 아무것도 할 수 없다는 뜻입니까? – Ivan

+0

나는 그것이 사실이라고 생각한다. 스로틀 귀하의 보내는 좋은 첫 번째 apprach 될 –

+0

하지만 .. 내게 단서를주고 ... 제발 좀 더 구체적으로하십시오. – Ivan

0

메일 서버 공급 업체의 "비즈니스"계정에 비용을 지불해야 더 많은 이메일을 보낼 수 있습니다.

+0

일단 위의 코드를 사용하여 for (i = 0; i <300) 내에서 300 개의 전자 메일을 보내십시오. 문제는 그것이 안전하지 않다는 것입니다 ... 때로는 발신자가 아닌 다른 사람. 내 코드에 문제가 있다고 생각했습니다. 그게 문제입니다. 내 코드가 아니라면 내 서버가 내 서버가 아니어야합니다. 느린 배송을해야합니다. – Ivan

1

200 개의 클라이언트에게 단일 전자 메일을 보내려는 경우. u보다 크기가 50 인 수신자의 전자 메일 주소 배열을 추가 할 수 있습니다. 하지만 각 이메일마다 다른 msg를 보내려고합니다. 그런 다음 이메일을 보내고 15 초에 새 연결을 만들어야하는 것으로 계산되는 카운터를 사용하여 이메일 서버에 대한 새 연결을 만들 수 있습니다.

코드 사용을 테스트하려면 mailtrap.io

+0

나는 당신의 대답이 (추상적 인 프레임에서) 모두의 최고라고 생각하지만, 코드를보고 싶습니다. 예를 들어 .... 내 코드에 나타나는 "세션"변수에는 "닫기"메소드가 없으므로 닫을 수없는 경우 다른 연결을 여는 방법을 알지 못합니다. – Ivan

+0

이메일을 보내려면 sendGrid를 사용하는 것이 좋습니다. SendGrid는 전자 메일 서비스 분야의 세계적인 선도 업체입니다.여기에 무료 계정으로 u 20000 매일 이메일을 보낼 수 있습니다 또한 200 시간의 두 번째 시간. –

+0

SendGrid는 문제 발생시 java에서 작동합니까? – Ivan

관련 문제