Click or drag to resize

대량 메일 전달하기

데이터베이스에 저장되어 있는 메일 주소를 읽어 대량 메일을 발송하는 경우 아래에 제시된 가이드 라인에 따라 프로그래밍해야 탭스 메일러 서버와 통신을 최소화하면서 메일을 빠르게 전달할 수 있습니다.

대량 메일 발송

데이터베이스에 저장된 각 수신자에게 개별 메일을 생성해서 발송하기 위해 수신자 별로 SecurePdfMail 오브젝트를 생성한 후 메일 데이터를 설정하고 탭스 메일러와 연결해서 메일을 전송할 수 있습니다. 이 방식은 탭스 메일러와의 연결을 반복해서 맺었다가 끊게 되므로 통신 효율이 떨어지게 됩니다. 탭스 메일러와 연결을 유지한 상태에서 Send 메서드를 반복해서 호출하는 방식이 가장 효율적입니다.

탭스 메일러와 연결 후 데이터베이스로부터 발송할 레코드셋을 읽습니다. 레코드셋에 포함된 레코드를 반복해서 조회하면서 수신자 구성, 메시지 구성, PDF 구성을 한 후 Send 메서드를 호출해 메일 데이터를 탭스 메일러로 전달합니다. Send 메서드는 이전에 지정된 수신자, PDF 문서를 자동으로 지워서 초기화 해주므로 별다른 처리 없이 AddToAddr, AddPdfDocument를 호출해 새로운 수신자와 PDF 문서를 지정할 수 있습니다. AddHeader로 추가한 사용자 정의 헤더 값도 함께 초기화됩니다.

실질적인 메시지 구성과 PDF 문서 구성은 탭스 메일러 서버 내에서 이루어지므로 구성 데이터만이 전송되는 PDF 보안 메일 전달은 매우 빠르게 진행됩니다.

ASP
Dim secMail, pdfDoc, result

Set secMail = Server.CreateObject("TABSMailer4.SecurePdfMail")
Set pdfDoc = Server.CreateObject("TABSMailer4.PdfDocument")

'메일 발송자 정보를 지정합니다.
secMail.FromAddress = "master@fromdomain.com"
secMail.FromName = "발송자 이름"

secMail.Encoding = "base64"
secMail.Charset = "utf-8"

'메일 본문 및 PDF 문서 내용 HTML을 읽습니다.
bodyHtml = secMail.LoadTextFromFile("C:\Template\mail.htm")
pdfContent = secMail.LoadTextFromFile("C:\Template\content.htm")

Set result = secMail.Connect()
If result.Type = 0 Then
    Dim conn, rs, count
    Set conn = Server.CreateObject("ADODB.COnnection")
    conn.Open connStr

    '데이터베이스에서 발송할 메일 주소를 읽습니다.
    count = 0
    Set rs = conn.Execute("SELECT email, name, password FROM TargetMembers")
    Do While Not rs.EOF
        '메일 수신자 및 제목, 본문을 지정합니다.
        '사용자 별로 다른 제목과 본문을 구성해서 지정 가능합니다.
        secMail.AddToAddr rs(0), rs(1)
        secMail.Subject = rs(1) & "님 안녕하세요."
        secMail.BodyHtml = bodyHtml

        '메일에 첨부될 PDF 문서를 지정합니다.
        pdfDoc.FileName = "테스트.pdf"
        '사용자별로 다른 PDF 내용을 구성해서 지정 가능합니다.
        pdfDoc.AddTocHtml pdfContent
        pdfDoc.UserPassword = rs(2)
        secMail.AddPdfDocument pdfDoc

        Set result = secMail.Send()
        If result.Type <> 0 Then
            Response.Write "오류 종류:" & result.Type & "<br>오류 코드:" & result.Code & "<br>오류 설명:" & result.Description
        End If

        count = count + 1
        If (count Mod 100) = 0 Then 
            Response.Write count & "개 전달했습니다.<br>"
        End If

        rs.MoveNext
    Loop

    Response.Write "전체 " & count & "개 전달했습니다.<br>"

    rs.Close
    conn.Close
    secMail.Close
Else
    Response.Write "오류 종류:" & result.Type & "<br>오류 코드:" & result.Code & "<br>오류 설명:" & result.Description
End If
Java
SecurePdfMail secMail = new SecurePdfMail();
PdfDocument pdfDoc = new PdfDocument();

// 메일 발송자 정보를 지정합니다.
secMail.setFromAddress("master@fromdomain.com");
secMail.setFromName("발송자 이름");

secMail.setEncoding("base64");
secMail.setCharset("utf-8");

// 메일 본문 및 PDF 문서 내용 HTML을 읽습니다.
String bodyHtml = "", pdfContent = "";
try
{
    bodyHtml = secMail.loadTextFromFile("D:\\Develop\\TAB\\app\\Peridot4\\Service\\tabsmailer3\\test\\template2.htm");
    pdfContent = secMail.loadTextFromFile("D:\\Develop\\TAB\\app\\Peridot4\\Service\\tabsmailer3\\test\\template3.htm");
} catch (Exception e)
{            
}

try
{
    secMail.connect();

    Connection conn = null;                
    PreparedStatement pstmt = null;  
    try 
    {
        // 데이터베이스에서 발송할 메일 주소를 읽습니다.
        conn = DriverManager.getConnection("jdbc:sqlserver://testserver;databaseName=testdb", "sa", "****");
        pstmt = conn.prepareStatement("SELECT email, name, password FROM TargetMembers");
        ResultSet rs = pstmt.executeQuery();
        int count = 0;
        while (rs.next())
        {
            // 메일 수신자 및 제목, 본문을 지정합니다.
            // 사용자 별로 다른 제목과 본문을 구성해서 지정 가능합니다.
            secMail.addToAddr(rs.getString(1), rs.getString(2));
            secMail.setSubject(rs.getString(2) + "님 안녕하세요.");
            secMail.setBodyHtml(bodyHtml);

            // 메일에 첨부될 PDF 문서를 지정합니다.
            pdfDoc.setFileName("테스트.pdf");
            // 사용자별로 다른 PDF 내용을 구성해서 지정 가능합니다.
            pdfDoc.addTocHtml(pdfContent);
            pdfDoc.setUserPassword(rs.getString(3));
            secMail.addPdfDocument(pdfDoc);

            secMail.send();

            count++;
            if (count % 100 == 0)
            {
                System.out.println(String.format("%d개 전달했습니다.", count));
            }
        }

        System.out.println(String.format("전체 %d개 전달했습니다.", count));
    }
    catch (SQLException e1) 
    {
    }
    finally
    {
        try {
            if (pstmt != null) pstmt.close();
            if (conn != null) conn.close();
        } catch (SQLException e) {
        }
    }    

}
catch (SecurePdfMailErrorException e)
{
    System.out.println("오류 종류:" + e.getType());
    System.out.println("오류 코드:" + e.getCode());
    System.out.println("오류 설명:" + e.getDescription());
}
finally
{
    secMail.close();
}