sp_processmail(Transact-SQL)
xp_findnextmsg, xp_readmail, xp_deletemail 등의 확장 저장 프로시저를 사용하여 Microsoft SQL Server용 받은 편지함에서 들어오는 메일 메시지를 처리할 수 있습니다. 각 메시지의 본문에는 단일 쿼리가 있어야 합니다. 이 프로시저는 xp_sendmail 확장 저장 프로시저를 사용하여 메시지를 보낸 사람에게 결과 집합을 첨부 파일로 반환할 수 있습니다.
중요: |
---|
이 프로시저를 사용하지 마십시오. sp_processmail 프로시저는 알 수 없는 원본으로부터 메일을 통해 보내진 정보를 처리하며 악성 코드를 사용자의 환경에 침투시키는 데 사용될 수 있습니다. 코드를 실행하기 전에 주의 깊게 코드 유효성을 검사해야 합니다. 이 프로시저는 이전 버전과의 호환성을 위해 포함되었지만 설치하려면 SQL 메일을 활성화해야 합니다. |
[!참고] Microsoft SQL Server의 이후 버전에서는 이 기능이 제거됩니다. 새 개발 작업에서는 이 기능을 사용하지 말고, 현재 이 기능을 사용하는 응용 프로그램은 수정하십시오.
구문
sp_processmail [ [ @subject = ] 'subject' ]
[ , [ @filetype = ] 'filetype' ]
[ , [ @separator = ] 'separator' ]
[ , [ @set_user = ] 'user' ]
[ , [ @dbuse = ] 'dbname' ]
인수
- [ @subject=] 'subject'
SQL Server에서 처리할 쿼리 메일로 해석되는 메일 메시지의 제목 줄입니다. subject는 **varchar(255)**이며 기본값은 NULL입니다. 이 인수를 지정하면 sp_processmail은 이 제목 줄이 있는 메시지만 처리합니다. 기본적으로 SQL Server에서는 메시지 본문에 쿼리가 포함된 것처럼 모든 메일 메시지를 처리합니다.
- [ @filetype = ] 'filetype'
메시지를 보낸 사람에게 첨부 파일로 쿼리 결과 집합을 보낼 때 사용할 파일 확장명입니다. filetype은 **varchar(3)**이며 기본값은 "'txt"'입니다.
- [ @separator=] 'separator'
결과 집합의 각 열에 대한 열 구분 기호(필드 종료 문자)입니다. 이 정보는 xp_sendmail 확장 저장 프로시저에 전달되어 메시지를 보낸 사람에게 결과 집합을 반환합니다. separator는 **varchar(3)**이며 기본값은 탭 문자가 열 사이에 사용되는 특별한 경우인 '탭'입니다.
- [ @set_user=] 'user'
쿼리를 실행해야 할 보안 컨텍스트입니다. user는 **varchar(132)**이며 기본값은 guest입니다.
- [ @dbuse = ] 'dbname'
쿼리를 실행해야 할 데이터베이스 컨텍스트입니다. dbname은 **varchar(132)**이며 기본값은 master입니다.
반환 코드 값
0(성공) 또는 1(실패)
결과 집합
없음
주의
들어오는 전자 메일에는 유효한 SQL Server 쿼리 하나가 메시지 텍스트로 포함되어 있어야 합니다. sp_processmail은 읽지 않은 메시지만 처리합니다. 쿼리 결과는 메시지를 보낸 사람에게 반환되며 원본 메시지의 참조 목록에 있는 모든 전자 메일 사용자에게는 복사본이 보내집니다. 메시지는 처리된 후 받은 편지함에서 삭제됩니다. 전자 메일을 서버로 자주 보내는 경우 sp_processmail을 자주 실행해야 합니다. 정기적인 전자 메일 프로세스를 설정하려면 SQL Server 에이전트를 사용하여 sp_processmail 작업을 예약합니다. 이렇게 하면 지정한 빈도로 메일을 처리하고 정보 메시지는 작업 기록에서 처리된 쿼리의 수와 함께 기록합니다.
결과는 첨부 파일로 보냅니다. 보낸 파일의 전체 이름은 Sql356.txt와 같이 "Sql" 뒤에 임의의 숫자 문자열이 오고 그 뒤에 지정된 파일 형식 확장명이 오도록 구성됩니다.
중요: |
---|
메일 메시지에 적합한 아이콘을 첨부하려면 파일 형식이 제대로 연결되어 있는지 확인하십시오. 파일을 연결하려면 바탕 화면에서 내 컴퓨터를 두 번 클릭하고 도구 메뉴에서 폴더 옵션을 선택합니다. 폴더 옵션 대화 상자의 파일 형식 탭에서 파일을 열 때 사용할 응용 프로그램을 지정합니다. |
다른 sp_processmail 작업은 다른 데이터베이스에서 쿼리로 설정될 수 있습니다. 예를 들어 AdventureWorks 데이터베이스의 쿼리는 "SQL:AdventureWorks"라는 제목을 가진다는 규칙을 수용한다면 ****SQL:AdventureWorks의 subject와 AdventureWorks의 dbname을 지정하는 sp_processmail을 실행할 수 있습니다. 다른 데이터베이스 쿼리 및 그룹화는 다른 서식 구조를 가질 수 있습니다. 예를 들어 배포 작업에 SQL:distribution의 subject와 ****distribution의 dbname이 있을 수 있습니다. 이러한 모든 작업은 SQL Server 에이전트로 예약될 수 있습니다.
sp_helptext 시스템 저장 프로시저로 프로시저의 텍스트를 검색하고 Transact-SQL 코드를 수정하고 동작을 사용자 지정하여 새 프로시저를 만드는 등 여러 가지 방법으로 sp_processmail 시스템 저장 프로시저를 사용자 지정할 수 있습니다. 가능한 값은 다음과 같습니다.
- @type 매개 변수를 xp_findnextmsg 확장 저장 프로시저와 함께 사용하여 특정 사용자 지정 메시지 유형만 처리합니다.
- 메시지를 read로 표시하고 처리 후 메시지를 삭제하지 않습니다. peek를 false로 설정하고 xp_readmail을 다시 실행합니다.
- attach_result를 false로 설정하여 xp_sendmail을 호출하고 attachments 매개 변수를 제거하여 전자 메일 메시지의 본문으로 쿼리 결과를 보냅니다.
- 보안 컨텍스트를 설정하여 메시지를 보낸 사람을 기준으로 한 사용자 컨텍스트에서 쿼리를 실행합니다. 전자 메일 사용자 이름이 SQL Server 사용자 이름과 같으면 간단하게 set_user**=@originator**를 사용하는 xp_sendmail로 호출을 변경하면 됩니다. 메일 사용자 이름이 중간에 공백이 있는 등 유효한 SQL Server 사용자 이름이 아닌 경우 테이블 조회 또는 문자 대체를 하여 적절한 SQL Server 사용자 이름을 찾아 xp_sendmail로 전달할 수 있습니다.
사용 권한
sysadmin 고정 서버 역할의 멤버만 이 프로시저를 실행할 수 있습니다.
예
다음 예에서는 받은 편지함에 있는 모든 메시지를 AdventureWorks 데이터베이스의 쿼리로 처리합니다. CSV
(쉼표로 구분된 값) 형식으로 결과 집합이 클라이언트에 반환됩니다.
EXEC sp_processmail
@filetype = 'CSV',
@separator = ',',
@dbuse = 'AdventureWorks' ;
참고 항목
참조
시스템 저장 프로시저(Transact-SQL)
xp_deletemail(Transact-SQL)
xp_findnextmsg(Transact-SQL)
xp_readmail(Transact-SQL)
xp_sendmail(Transact-SQL)
데이터베이스 메일 및 SQL 메일 저장 프로시저(Transact-SQL)