파일을 첨부해 보내기

데이터베이스를 이용한 메일 발송에서는 첨부 파일을 전송하기 위해 두 가지 방식을 제공합니다.

  Caution

메일에 대용량 파일을 첨부하기는 다소 어려운 점이 있습니다. 첨부 파일 크기의 총합이 30MB를 초과할 경우 많은 메일 서버가 수신 거부하기 때문입니다. 대용량 파일은 메일에 직접 첨부하는 대신 https를 통한 다운로드 링크를 메일 본문에 삽입하는 방식으로 처리할 것을 권장합니다.

파일 첨부 메일 발송 1

파일 데이터를 직접 테이블에 추가하는 방식으로 최대 두 개까지 파일을 첨부할 수 있습니다. 그 이상을 필요로 할 경우는 zip 파일 등으로 압축해서 첨부해야 합니다. 첨부 파일 이름과 첨부 파일의 바이너리 데이터를 테이블에 추가하면 첨부 파일이 포함된 메일로 인코딩해서 메일을 발송합니다.

파일에서 바이너리 데이터 버퍼를 얻기 위해 Stream 오브젝트를 사용합니다. 스트림 형식에 adTypeBinary를 지정한 후 LoadFromFile, Read를 호출하면 첨부 파일 내용이 저장된 바이너리 데이터 버퍼를 얻을 수 있습니다.

준비된 바이너리 데이터 버퍼를 sm_attach1_data 또는 sm_attach2_data에 지정하고, sm_attach1_name 또는 sm_attach2_name에 파일 이름을 지정해서 레코드를 삽입합니다.

ASP에서 발송할 경우 CreateObject() 대신 Server.CreateObject()를 사용해야 합니다.

파일 첨부 1
Dim conn, connStr, rs, stream
Dim fromName, fromAddr, toName, toAddr, subject, htmlbody, charset, attachFile, attachData

'메시지 구성 데이터를 지정합니다.
fromName = "기술지원"
fromAddr = "help@tabslab.com"
toName = "홍길동"
toAddr = "hong@poporo.co.kr"
subject = "테스트 메일입니다."
htmlbody = "<html><body><h1>테스트 메일입니다.</h1></body></html>"
charset = "utf-8"
attachFile = "tulip.jpg"

'Stream 오브젝트를 사용해 파일을 읽어 바이너리 버퍼를 구성합니다.
Set stream = CreateObject("ADODB.Stream")
stream.Type = adTypeBinary
stream.Open
stream.LoadFromFile "c:\files\" & attachFile
attachData = stream.Read

'데이터베이스에 연결합니다.
connStr = "PROVIDER=SQLOLEDB;Data Source=(local)\TabsMailer4;Initial Catalog=TabsMailer4;User ID=sa;Password=your_pwd;"
Set conn = CreateObject("ADODB.Connection")
conn.Open connStr

'테이블을 오픈해 새로운 레코드를 추가합니다.
Set rs = CreateObject("ADODB.Recordset")
rs.Open "SendMessage", conn, adOpenDynamic, adLockPessimistic, adCmdTable
rs.AddNew
'메일 발송 정보를 지정합니다.
rs.Fields("sm_fromname").Value = fromName
rs.Fields("sm_fromaddr").Value = fromAddr
rs.Fields("sm_toname").Value = toName
rs.Fields("sm_toaddr").Value = toAddr
rs.Fields("sm_subject").Value = subject
rs.Fields("sm_htmlbody").Value = htmlbody
rs.Fields("sm_charset").Value = charset
rs.Fields("sm_attach1_name").Value = attachFile
rs.Fields("sm_attach1_data").Value = attachData
rs.Update

rs.Close
conn.Close

파일 첨부 메일 발송 2

파일 첨부 메일 발송 1 방식은 파일 데이터를 직접 테이블에 저장하기 때문에 첨부 파일 크기가 클 경우 데이터베이스에 많은 부하를 발생시킵니다. 파일 크기가 크고 개수가 많으며 메일 수신자가 동일한 첨부 파일을 수신하는 경우라면 아래에서 설명하는 방식을 사용할 것을 권장합니다.

첨부할 파일을 탭스 메일러 설치 폴더 아래에 있는 DbAttachment 폴더에 미리 복사합니다.

sm_attachlist에 복사한 파일 이름을 지정합니다. 경로는 지정할 수 없으며 파일 이름만 지정합니다. 다수의 파일을 첨부한다면 ;으로 구분해 지정합니다.

ASP에서 발송할 경우 CreateObject() 대신 Server.CreateObject()를 사용해야 합니다.

파일 첨부 2
Dim conn, connStr, rs
Dim fromName, fromAddr, toName, toAddr, subject, htmlbody, charset, attachFile, attachData

'메시지 구성 데이터를 지정합니다.
fromName = "기술지원"
fromAddr = "help@tabslab.com"
toName = "홍길동"
toAddr = "hong@poporo.co.kr"
subject = "테스트 메일입니다."
htmlbody = "<html><body><h1>테스트 메일입니다.</h1></body></html>"
charset = "utf-8"
'지정한 첨부 파일은 DbAttachment 폴더에 저장되어 있어야 합니다.
attachFile = "견적서1.pdf;견적서2.pdf"

'데이터베이스에 연결합니다.
connStr = "PROVIDER=SQLOLEDB;Data Source=(local)\TabsMailer4;Initial Catalog=TabsMailer4;User ID=sa;Password=your_pwd;"
Set conn = CreateObject("ADODB.Connection")
conn.Open connStr

'테이블을 오픈해 새로운 레코드를 추가합니다.
Set rs = CreateObject("ADODB.Recordset")
rs.Open "SendMessage", conn, adOpenDynamic, adLockPessimistic, adCmdTable
rs.AddNew
'메일 발송 정보를 지정합니다.
rs.Fields("sm_fromname").Value = fromName
rs.Fields("sm_fromaddr").Value = fromAddr
rs.Fields("sm_toname").Value = toName
rs.Fields("sm_toaddr").Value = toAddr
rs.Fields("sm_subject").Value = subject
rs.Fields("sm_htmlbody").Value = htmlbody
rs.Fields("sm_charset").Value = charset
rs.Fields("sm_attachllist").Value = attachFile
rs.Update

rs.Close
conn.Close

  Caution

DbAttachment 폴더에 저장된 파일은 자동으로 삭제되지 않습니다. 더 이상 사용되지 않는 파일은 직접 삭제하도록 합니다.