2011-11-28 2 views
0

JavaMail API를 사용하여 대량 메일을 보내는 더 좋은 방법이 있습니까? 아래 접근 방식을 사용합니다. JavaMail API를 사용하여 대량 메일을 보내는 더 나은 방법

enter code here Transport tr = session.getTransport("smtp"); 
tr.connect(smtphost, username, password); 
tr.sendMessage(msg, msg.getAllRecipients()); 

제가

'동일한 연결을 사용하는 메일의 n'number를 전송하는데 사용. 대량 메일을 보내는 다른 방법이 있습니다. 더 나은 해결책을 얻으려면 여기를 클릭하십시오.

+0

내 제안은 Apache 메일 API와 같은 자바 메일 API를 사용하는 것입니다. –

답변

0

"더 나은"방법을 원하십니까?

메일 서버가 허용하는 최대 한도까지 여러 개의 스레드를 사용하여 더 많은 메시지를 병렬로 보낼 수 있습니다 ( ).

+0

다른 메시지 세트가있는 경우 단일 푸시로 보내는 방법을 가정 해 보겠습니다. 하나씩 보내는 대신. – vairam

+0

"다른 메시지 집합"을 이해하지 못합니다. 메시지의받는 사람 머리글에 메시지의받는 사람을 나열하려면 각받는 사람 또는받는 사람의 집합마다 다른 메시지를 보내야합니다. 받는 사람을 포함시키지 않으면 (메시지가 스팸처럼 보일 것임) sendMessage의 두 번째 인수로받는 사람을 전달하여 많은받는 사람에게 단일 메시지를 보낼 수 있습니다. –

+0

송장 번호 1 통지를 5 명에게 보내야하고 송장 2를 다른 5 명 세트로 보낼 필요가 있습니다. 이 시나리오를 가정 해 보겠습니다. sendMessage 메서드를 사용하여 하나씩 보내지 않고이 두 집합을 단일 푸시로 보내야합니다. 나는이 메시지를 한번에 보낼 방법이있다. – vairam

0

아주 좋은 성능을 제공하므로 스레드 풀링을 사용할 수 있습니다. 아래 코드 스 니펫을 구현하고 공유했습니다.

try { 
    ExecutorService executor = Executors.newFixedThreadPool("no. of threads");  
    // no. of threads is depend on your cpu/memory usage it's better to test with diff. no. of threads. 
    Runnable worker = new MyRunnable(message); 
    // message is the javax.mail.Message 
    executor.execute(worker); 
    executor.shutdown();  
    executor.awaitTermination(Long.MAX_VALUE, TimeUnit.MILLISECONDS); 
} 
+0

답안에 코드를 올바르게 포맷 해주십시오. 감사합니다. –