나같은 경우는 서버에 이런저런 프로그램을 설치하는 걸 그리 좋아하지 않는다.

 

Sql서버에 Outlook을 설치하여 메일 발송을 할 수 있지만,

 

SMTP를 이용해 프로시져 만으로 메일 발송하는 설명서다.

 

출처 : MSDN

 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 

HOWTO: SQL Server에서 SQL 메일을 사용하지 않고 전자 메일 보내기

적용 대상

이 문서는 이전에 다음 ID로 출판되었음: KR312839

작업 내용

요약

Windows NT ServerCDO(CDONTS)사용하는방법

스마트호스트구성CDONTS전자메일을보내는저장프로시저만들기

Windows 2000용 CDO(CDOSYS)를 사용하는 방법

CDOSYS메일을보내는저장프로시저만들기

참조

요약

SQL 메일을 사용하면 SQL Server에서 손쉽게 전자 메일을 보내거나 읽을 수 있지만 SQL 메일이 메시징 응용 프로그래밍 인터페이스(MAPI) 응용 프로그램이므로 서버에 MAPI 하위 시스템이 있어야 합니다. Microsoft Windows 2000에서는 MAPI 하위 시스템이 제공되지 않습니다(Microsoft Windows NT 4.0에서는 Windows Messaging을 설치할 때 MAPI 하위 시스템이 설치됨). 따라서 SQL 메일을 사용하려면 Microsoft Outlook과 같은 MAPI 클라이언트를 설치해야 합니다. Windows NT Server용 CDO(CDONTS)나 Windows 2000용 CDO(CDOSYS)와 같이 SQL Server에서 직접 SMTP(Simple Mail Transport Protocol) 전자 메일을 보내는 다른 방법을sp_OASQL Server OLE 자동화 저장 프로시저와 함께 사용할 수 있습니다. 이 문서에서는 위와 같이 인터넷 메일 서버에 전자 메일을 보내는 기술을 사용하는 방법을 예시를 통해 설명합니다. 이 기술을 한층 더 발전시켜 보다 강력한 메일 시스템을 구축할 수도 있습니다. 예를 들어, 오류 처리 코드를 추가할 수 있습니다. 이 예제에 사용된 방법으로는 전자 메일을 읽거나 처리할 수 없습니다.참고: 이 프로그래밍 예제는 Transact-SQL 내에서 CDO 개체 모델을 호출하는 데 사용할 수 있는 기술을 보여줍니다. 이 예제를 프로그래밍 방식으로 확장하거나 프로덕션 환경에서 코드를 실행하는 데 필요한 스트레스 테스트를 수행할 책임은 사용자에게 있습니다. Microsoft는 모든 보증(상품, 특정 목적에 대한 적합성 및 비침해에 대한 묵시적인 보증을 포함하며 이에 제한되지 않음)을 배제하며 예를 보여주기 위한 목적으로만 이 프로그래밍 예제를 제공합니다. 본 문서의 내용은 프로시저를 작성하고 디버깅하는 데 사용되는 도구 및 여기서 설명하는 프로그래밍 언어에 익숙한 사용자를 대상으로 합니다. Microsoft 기술 지원 담당자는 사용자에게 도움이 되도록 특정 절차에 대한 기능을 설명할 수 있지만 사용자의 특정 목적에 맞도록 예제를 수정하여 추가 기능을 제공하거나 절차를 구성하지는 않습니다. 프로그래밍에 익숙하지 않은 사용자는 MCP(Microsoft Certified Partner)의 도움을 받거나 마이크로소프트 고객기술지원부(02-508-0040)로 문의하십시오. MCP에 대한 자세한 내용은 다음 웹 사이트를 참조하십시오.

http://www.microsoft.com/korea/channel/partner/certified.htm

Microsoft에서 제공하는 지원 서비스에 대한 자세한 내용은 다음 웹 사이트를 참조하십시오.

http://support.microsoft.com/default.aspx?scid=/directory/worldwide/ko/supportnet/default.htm?sd=gn

참고: 용례에 사용된 회사, 기관, 제품, 도메인 이름, 전자 메일 주소, 로고, 사람, 장소 및 이벤트 등은 실제 데이터가 아닙니다. 어떠한 실제 회사, 기관, 제품, 도메인 이름, 전자 메일 주소, 로고, 사람, 장소 또는 이벤트와도 연관시킬 의도가 없으며 그렇게 유추해서도 안됩니다.

Windows NT Server용 CDO(CDONTS)를 사용하는 방법

CDONTS는 웹 기반 응용 프로그램에 메시징 기능을 제공하는 SMTP(Simple Mail Transfer Protocol) 전용 OLE 서버이므로, SQL 메일과 같은 MAPI 기반 응용 프로그램과 달리 HTML 기반 전자 메일을 보내는 기능을 지원합니다. Microsoft Internet Information Server(IIS) 4.0 이상에서는 기본적으로 CDONTS가 설치됩니다. 마찬가지로 Microsoft Windows 2000에서는 기본적으로 Microsoft Internet Information Server(IIS) 5.0이 설치됩니다. CDONTS에 대한 자세한 내용은 Microsoft 기술 자료의 다음 문서를 참조하십시오.

177850INFO: What is the Difference Between CDO 1.2 and CDONTS?

CDONTS는 SMTP를 통해 로컬 서버에 전자 메일을 보냅니다. 로컬 서버에 SMTP 서버가 없으면 IIS에서 설치한 SMTP 가상 서버를 사용하여 SMTP 전자 메일을 해당 SMTP 메일 서버로 라우팅할 수 있습니다. CDONTS를 사용하여 SQL Server 내에서 전자 메일을 보내려면 다음과 같이 하십시오.

1.SQL Server 컴퓨터에 IIS를 설치하여 실행합니다.
2.IIS SMTP 서비스가 로컬 서버에 수신되는 모든 SMTP 전자 메일을 SMTP 메일 서버에 자동으로 라우팅하도록 SMTP 메일 서버를 "스마트 호스트"로 지정합니다.
3.SQL Server에서 전자 메일을 보내는 데 사용할 수 있는 저장 프로시저를 만듭니다.

SQL 메일 대신에 CDONTS를 사용할 때는 SQL Server 컴퓨터에 Microsoft Outlook과 같은 메일 클라이언트를 설치할 필요가 없으며 Microsoft Exchange 서버도 필요하지 않습니다. SMTP 전자 메일을 지원하는 모든 메일 서버를 "스마트 호스트"로 사용할 수 있습니다. 하지만 CDONTS를 사용하면 SQL Server에 수신되는 전자 메일을 읽거나 처리할 수 없으며 SQL 에이전트 메일 기능을 바꿀 수도 없습니다.다음 방법에서는 Microsoft Windows 2000이 사용됩니다. 컴퓨터에 IIS 4.0이 있으면 Microsoft Windows NT 4.0을 다음 방법과 비슷하게 구성할 수 있지만 절차가 약간 다릅니다.Microsoft Windows NT 4.0에서 스마트 호스트를 구성하는 방법에 대한 자세한 내용은 Microsoft 기술 자료의 다음 문서를 참조하십시오.

230235XCON: How to Configure the IIS SMTP Service to Relay SMTP Mail

스마트 호스트 구성

1.작업 표시줄에서시작,프로그램,관리 도구를 차례로 가리킨 다음인터넷 서비스 관리자를 눌러 IIS 관리자를 엽니다.
2.서버 트리를 엽니다.기본 SMTP 가상 서버를 마우스 오른쪽 단추로 누른 다음등록 정보를 누릅니다.
3.배달탭으로 이동한 다음고급을 누릅니다.
4.스마트 호스트입력란에 SMTP 메일 서버의 이름을 입력합니다. SMTP 메일 서버의 이름을 모르면 메일 관리자에게 문의하십시오.

5.SMTP(Simple Mail Transfer Protocol) 서비스가 실행되고 있는지 확인합니다. SMTP 서비스는 IIS 관리 서비스의 일부이므로 IIS 관리 서비스가 실행되고 있어야 합니다.

CDONTS 전자 메일을 보내는 저장 프로시저 만들기

다음과 유사한 코드를 사용하면master데이터베이스에서 SQL Server OLE 자동화 저장 프로시저로 CDONTS 개체 모델을 호출하여 전자 메일을 보내는 저장 프로시저를 만들 수 있습니다.

CREATE PROCEDURE [dbo].[sp_send_cdontsmail]

@From varchar(100),

@To varchar(100),

@Subject varchar(100),

@Body varchar(4000),

@CC varchar(100) = null,

@BCC varchar(100) = null

AS

Declare @MailID int

Declare @hr int

EXEC @hr = sp_OACreate 'CDONTS.NewMail', @MailID OUT

EXEC @hr = sp_OASetProperty @MailID, 'From',@From

EXEC @hr = sp_OASetProperty @MailID, 'Body', @Body

EXEC @hr = sp_OASetProperty @MailID, 'BCC',@BCC

EXEC @hr = sp_OASetProperty @MailID, 'CC', @CC

EXEC @hr = sp_OASetProperty @MailID, 'Subject', @Subject

EXEC @hr = sp_OASetProperty @MailID, 'To', @To

EXEC @hr = sp_OAMethod @MailID, 'Send', NULL

EXEC @hr = sp_OADestroy @MailID

그런 다음 이 저장 프로시저를 사용하고 올바른 매개변수를 제공하십시오.

exec sp_send_cdontsmail 'someone@microsoft.com','someone2@microsoft.com','Test ofCDONTS','It works'

CDONTS는 로컬 SMTP 가상 서버에 전자 메일을 보냅니다. 그러면 로컬 SMTP 가상 서버가스마트 호스트입력란에 지정된 SMTP 메일 서버로 전자 메일을 라우팅합니다. SMTP 메일 서버는 "To" 인수에 지정된 전자 메일 주소(이 예제의 경우 "someone2@microsoft.com")로 메일을 보냅니다. "From" 인수에 지정된 이름은 제목이 "Test of CDONTS"이고 메시지 본문이 "It works"인 전자 메일을 보낸 사람(이 예제의 경우 "someone@microsoft.com")으로 나타납니다. "CC"와 "BCC" 필드에는 인수를 제공하지 않았기 때문에 전자 메일이 아무에게도 복사되지 않습니다. 이 예제를 한층 더 발전시켜 HTML 기반 전자 메일이나 첨부 파일을 보낼 수도 있습니다. CDONTS에 대한 자세한 내용은 다음 웹 사이트를 참조하십시오.MSDN Library왼쪽 창에서Messaging and Collaboration,Collaboration Data Objects,CDO 1.2.1을 차례로 눌러 확장하십시오. SQL Server OLE 자동화 저장 프로시저에 대한 자세한 내용은 Microsoft SQL Server 2000 온라인 설명서를 참조하십시오.맨 위로

Windows 2000용 CDO(CDOSYS)를 사용하는 방법

CDOSYS는 Microsoft Windows 2000에서 메시징 응용 프로그램을 개발하는 데 사용되는 개체 모델을 제공하고 기존의 Windows NT Server용 CDO(CDONTS) 라이브러리 기능을 향상합니다. CDOSYS를 사용하려면 Windows 2000과 로컬 또는 원격 SMTP 서버가 있어야 합니다. 프로그래밍 방식으로 SMTP 서버를 가리키도록 CDOSYS를 구성하여 개발자의 SMTP 서버 구성 작업에 대한 융통성을 높일 수 있습니다. CDOSYS에 대한 자세한 내용은 Microsoft 기술 자료의 다음 문서를 참조하십시오.

195683INFO: Relationship between 1.x CDO Libraries and CDOSYS.DLL

CDOSYS가 원격 SMTP 서버에 전자 메일을 보낼 수 있으므로 SQL Server 컴퓨터에 Internet Information Server를 설치하여 실행할 필요가 없으며 SMTP 가상 서버를 구성할 필요도 없습니다.SQL Server에서 전자 메일을 보내는 데 사용할 수 있는 저장 프로시저를 만들기만 하면 됩니다. SQL 메일 대신에 CDOSYS를 사용할 때는 SQL Server 컴퓨터에 Microsoft Outlook과 같은 메일 클라이언트를 설치할 필요가 없으며 Exchange 서버가 있을 필요도 없습니다. SMTP 메일을 원격 SMTP 메일 서버로 지원하는 모든 메일 서버를 사용할 수 있습니다. 하지만 CDONTS를 사용하면 SQL Server에 수신되는 전자 메일을 읽거나 처리할 수 없으며 SQL 에이전트 메일 기능을 바꿀 수도 없습니다. CDOSYS를 SQL OLE 자동화 개체와 함께 사용하면 SQL Server OLE 자동화를 통해 CDOSYS 개체 모델이 호출되는데, 이는 SQL Server 2000 SP1과 SQL Server 2000 SP2에서 테스트되었습니다. Microsoft는 SQL Server 2000 SP1 이전 버전의 OLE 자동화 저장 프로시저에서 CDOSYS를 호출할 수 있다고 보증하지 않습니다.

CDOSYS 메일을 보내는 저장 프로시저 만들기

다음과 같은 코드를 사용하면master데이터베이스에서 SQL Server OLE 자동화 저장 프로시저로 CDOSYS 개체 모델을 호출하여 전자 메일을 보내는 저장 프로시저를 만들 수 있습니다.

CREATE PROCEDURE [dbo].[sp_send_cdosysmail]

@From varchar(100) ,

@To varchar(100) ,

@Subject varchar(100)=" ",

@Body varchar(4000) =" "

/*********************************************************************

This stored procedure takes the above parameters and sends an e-mail.

All of the mail configurations are hard-coded in the stored procedure.

Comments are added to the stored procedure where necessary.

Reference to the CDOSYS objects are at the following MSDN Web site:

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cdosys/html/_cdosys_messaging.asp

***********************************************************************/

AS

Declare @iMsg int

Declare @hr int

Declare @source varchar(255)

Declare @description varchar(500)

Declare @output varchar(1000)

--************* Create the CDO.Message Object ************************

EXEC @hr = sp_OACreate 'CDO.Message', @iMsg OUT

--***************Configuring the Message Object ******************

-- This is to configure a remote SMTP server.

-- http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cdosys/html/_cdosys_schema_configuration_sendusing.asp

EXEC @hr = sp_OASetProperty @iMsg,'Configuration.fields("http://schemas.microsoft.com/cdo/configuration/sendusing").Value','2'

-- This is to configure the Server Name or IP address.

-- Replace MailServerName by the name or IP of your SMTP Server.

EXEC @hr = sp_OASetProperty @iMsg,'Configuration.fields("http://schemas.microsoft.com/cdo/configuration/smtpserver").Value', 'MailServerName'

-- Save the configurations to the message object.

EXEC @hr = sp_OAMethod @iMsg, 'Configuration.Fields.Update', null

-- Set the e-mail parameters.

EXEC @hr = sp_OASetProperty @iMsg, 'To', @To

EXEC @hr = sp_OASetProperty @iMsg, 'From', @From

EXEC @hr = sp_OASetProperty @iMsg, 'Subject', @Subject

-- If you are using HTML e-mail, use 'HTMLBody' instead of 'TextBody'.

EXEC @hr = sp_OASetProperty @iMsg, 'TextBody', @Body

EXEC @hr = sp_OAMethod @iMsg, 'Send', NULL

-- Sample error handling.

IF @hr <>0

select @hr

BEGIN

EXEC @hr = sp_OAGetErrorInfo NULL, @source OUT, @description OUT

IF @hr = 0

BEGIN

SELECT @output = ' Source: ' + @source

PRINT @output

SELECT @output = ' Description: ' + @description

PRINT @output

END

ELSE

BEGIN

PRINT ' sp_OAGetErrorInfo failed.'

RETURN

END

END

-- Do some error handling after each step if you need to.

-- Clean up the objects created.

EXEC @hr = sp_OADestroy @iMsg

go

그런 다음 이 저장 프로시저를 사용하고 올바른 매개변수를 제공하십시오.

declare @Body varchar(4000)

select @Body = 'This is a Test Message'

exec sp_send_cdosysmail 'someone@microsoft.com','someone2@microsoft.com','Test ofCDOSYS',@Body

CDOSYS는cdoSMTPServerName으로 지정된 원격 SMTP 메일 서버에 전자 메일을 보냅니다. SMTP 메일 서버는 "To" 인수에 지정된 전자 메일 주소(이 예제의 경우 "someone2@microsoft.com")로 메일을 보냅니다. "From" 인수에 지정된 이름은 제목이 "Test of CDOSYS"인 전자 메일과@sHTML변수에 포함된 HTML 형식의 전자 메일을 보낸 사람(이 예제의 경우 "someone@microsoft.com")으로 나타납니다. 이 예제를 한층 더 발전시켜 텍스트 기반 전자 메일이나 첨부 파일을 보낼 수도 있습니다. CDOSYS에 대한 자세한 내용은 다음 웹 사이트를 참조하십시오.MSDN Library왼쪽 창에서Messaging and Collaboration,Collaboration Data Objects,CDO for Windows 2000을 차례로 눌러 확장하십시오.맨 위로

참조

SQL Server 2000 온라인 설명서 항목: "SQL Server OLE Automation stored procedures"맨 위로

 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 

위의 설명을 참고한 프로시져...

 

CREATE PROCEDURE USP_SendCdontsMail
  @From varchar(100)
, @To varchar(100)
, @Subject varchar(100)
, @Body varchar(4000)
, @CC varchar(100) = null
, @BCC varchar(100) = null
, @BodyFormat smallint
, @MailFormat smallint
AS
Declare @MailID int
Declare @hr int
EXEC @hr = sp_OACreate 'CDONTS.NewMail', @MailID OUT
EXEC @hr = sp_OASetProperty @MailID, 'From',@From
EXEC @hr = sp_OASetProperty @MailID, 'Body', @Body
EXEC @hr = sp_OASetProperty @MailID, 'BCC',@BCC
EXEC @hr = sp_OASetProperty @MailID, 'CC', @CC
EXEC @hr = sp_OASetProperty @MailID, 'Subject', @Subject
EXEC @hr = sp_OASetProperty @MailID, 'To', @To
EXEC @hr = sp_OASetProperty @MailID, 'BodyFormat', @BodyFormat
EXEC @hr = sp_OASetProperty @MailID, 'MailFormat', @MailFormat
EXEC @hr = sp_OAMethod @MailID, 'Send', NULL
EXEC @hr = sp_OADestroy @MailID
GO

사용:

exec USP_SendCdontsMail @from='Mail.co.kr', @to='Master@Mail.co.kr', @subject='title2', @body='<body><table border=1><tr><td>aaa</td></tr><tr><td>bbb</td></tr></table></body>', @Mailformat=0, @Bodyformat=0

 

-- @Mailformat=0, @Bodyformat=0으로 하면 html형식으로 나가고 둘중에 하나라도 1로 값을 설정하면 걍 text형식으로 나간다. 모자란 머리로 이거 알아내느라 무쟈게 삽질했다. ㅡ.,ㅡ;

내가 제대로 알아낸건지는 모르겠는데 어쨋던 결과는 내가 요구하는 대로 나온다.

 

 

혹 이거에 대해서 설명해 주실 분~~~~~ 부탁드립니다.

신고
Posted by The.민군


티스토리 툴바