2012-02-16 5 views
1

웹 사이트가 있고 한 번에 700 개의 이메일을 보낼 때 문제가 발생했습니다. 나는 100 번 이메일을 7 번 보내는 것이 더 낫다고 생각하지만 어떤 방법을 택해야합니까?하나의 대량 전자 메일을 여러 개로 나누기

  • for 루프를 사용하여 이메일을 7 회 보낼 수는 있지만이 접근 방식에는 문제가 있습니다. 이메일 양이 두 배라면?
  • 스레딩, 내가 익숙하고 시간이 좀 걸립니다.

    protected void btnClick_Send(object sender, EventArgs e) 
    { 
        MailMessage mailObj = new MailMessage(); 
        mailObj.Bcc.Add(txtReciever.Text.Trim()); 
        mailObj.ReplyToList.Add("[email protected]"); 
        mailObj.SubjectEncoding = System.Text.Encoding.UTF8; 
        mailObj.BodyEncoding = System.Text.Encoding.UTF8; 
        mailObj.Subject = txtSubject.Text; 
        mailObj.Body += Environment.NewLine; 
        mailObj.Body = txtContent.Text; 
        mailObj.Body += Environment.NewLine; 
        SmtpClient SMTPServer = new SmtpClient(); 
        SMTPServer.Send(mailObj); 
    } 
    

    다른 아이디어 :

여기 내 코드입니까?

+0

어떤 .NET 버전을 사용하고 있습니까? –

+0

나는 현재 2.0에 있지만 필요한 경우 4로 업그레이드 할 수 있다고 생각합니다. – Niklas

답변

1

이것은 병렬성에서 큰 이점을 얻을 수있는 것은 embarrassingly parallel problems 중 하나입니다.

.NET 4.0에서는 단순히 Parallel.ForEach 메서드를 사용하여 해당 코드를 병렬로 실행할 수 있습니다. messagesReceiver, Subject 및 송신하는 전자 메일의 Body를 포함하는 객체의 순서라고 가정

이 예는 자동 가능한 자원 주어진 병행 가능한 그만큼 를 보낼 Task Parallel Library 사용 컴퓨터에 : 물론

Parallel.ForEach(messages, message => 
{ 
    MailMessage mailObj = new MailMessage(); 
    mailObj.Bcc.Add(message.Receiver); 
    mailObj.ReplyToList.Add("[email protected]"); 
    mailObj.SubjectEncoding = System.Text.Encoding.UTF8; 
    mailObj.BodyEncoding = System.Text.Encoding.UTF8; 
    mailObj.Subject = message.Subject; 
    mailObj.Body += Environment.NewLine; 
    mailObj.Body = message.Body; 
    mailObj.Body += Environment.NewLine; 
    SmtpClient SMTPServer = new SmtpClient(); 
    SMTPServer.Send(mailObj); 
} 

, 당신은 수동으로 다른 스레드에서 발송하는 이메일을 예약 할 ThreadPool.QueueUserWorkItem 방법을 사용하여 예를 들어,뿐만 아니라 .NET 2.0 같은 솔루션을 구현하지만, 수 확실히 더 많은 노력이 필요할 것입니다.

+0

this와 for 루프의 차이점은 무엇입니까? 내가 모르기 때문에 묻기 ... – Niklas

+0

기존의 루프는 항목을 순차적으로 처리합니다 * 한 번에 하나씩 *. [병렬 루프] (http://msdn.microsoft.com/en-us/library/dd989744.aspx)는 자동으로 목록을 청크로 분할하고 동시에 * 처리합니다. 청크의 수와 크기는 CPU 코어의 수와 같이 시스템에서 사용 가능한 리소스에 따라 다릅니다. –

관련 문제