WSS/MOSS 알림 메일 커스터마이징

간단한 MOSS 메일 알림 커스터마이징 하는 방법입니다.

아래 KB 내용에 대한 설명입니다. 

How to create a custom e-mail alert handler in Microsoft Office SharePoint Server

https://support.microsoft.com/kb/948321/en-us

아래 순서로 진행하시면 됩니다..

 

1. 커스텀 메일 알림 처리기의 개발

이 처리기는 실제로 알림 메일을 보내는 주체입니다.

아래 샘플 코드를 입력하셔서 클래스를 빌드하시고, GAC 에 등록합니다.

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using Microsoft.SharePoint.Utilities;

using Microsoft.SharePoint;

using System.Web;

namespace MOSSAlert

{

public class CustomMailAlert : IAlertNotifyHandler

{

#region IAlertNotifyHandler Members

public bool OnNotification(SPAlertHandlerParams ahp)

{

SPSite site = null;

SPWeb web = null;

try

{

//System.Diagnostics.Debugger.Break(); // 디버그 붙이려면 주석해제..

site = new SPSite(ahp.siteUrl + ahp.webUrl);

web = site.OpenWeb();

SPList list = web.Lists[ahp.a.ListID];

SPListItem item = list.GetItemById(ahp.eventData[0].itemId);

string FullPath = HttpUtility.UrlPathEncode(ahp.siteUrl + "/" + ahp.webUrl + "/" + list.Title + "/" + item.Name);

string ListPath = HttpUtility.UrlPathEncode(ahp.siteUrl + "/" + ahp.webUrl + "/" + list.Title);

string webPath = HttpUtility.UrlPathEncode(ahp.siteUrl + "/" + ahp.webUrl);

string build = "";

string eventType="";

if (ahp.eventData[0].eventType == 1)

eventType = "Added";

else if (ahp.eventData[0].eventType == 2)

eventType = "Changed";

else if (ahp.eventData[0].eventType == 3)

eventType = "Deleted";

// 이 아래 부분이 실제 알림 메일의 내용 부분입니다.

build =

"<style type=\"text/css\">.style1 { font-size: small; border: 1px solid #000000;" +

"background-color: #DEE7FE;}.style2 { border: 1px solid #000000;}</style></head>" +

"<p><strong>아이템 이름 -> " + item.Name.ToString() + "</strong> has been " + eventType + "</p>" +

"<table style=\"width: 100%\" class=\"style2\"><tr><td style=\"width: 25%\" class=\"style1\">" +

"<a href=" + webPath + "/_layouts/mysubs.aspx>Modify my Settings</a></td>" +

"<td style=\"width: 25%\" class=\"style1\"> <a href=" + FullPath + ">View " + item.Name + "</a></td>" +

"<td style=\"width: 25%\" class=\"style1\"><a href=" + ListPath + ">View " + list.Title + "</a></td>" +

" </tr></table>";

string subject = list.Title.ToString();

SPUtility.SendEmail(web, true, false, ahp.headers["to"].ToString(), subject, build);

return false;

}

catch (System.Exception ex)

{

return false;

}

finally

{

if (web != null)

web.Dispose();

if (site != null)

site.Dispose();

}

}

#endregion

}

}

2. 기본 알림 템플릿의 수정

C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\12\Template\Xml 에 있는 기본 알림 템플릿을 수정해야 합니다.

우선 기본 알림 템플릿인 alerttemplates.xml 을 복사해서 CustomAlertTemplates.xml을 만듭니다.

복잡한 XML 내용을 조금 정리해서 표시하면 내용을 보면 대략 아래와 같은 구조입니다.

각 블록들을 보시면 문서 라이브러리나, 커스텀 리스트, 공지사항, 연락처 등등에 각기 다른 알림 메일 형식을 붙일 수 있음을 알 수 있습니다.

여기에서는 공지사항의 알림만을 바꾸어 보도록 하겠습니다.

공지사항 부분(위 그림의 Name = SPAlertTemplateType.Announcements)을 찾아서 프로퍼티 태그를 찾습니다.

<Properties>

<ImmediateNotificationExcludedFields>ID;Author;Editor;Modified_x0020_By;Created_x0020_By;_UIVersionString;ContentType;TaskGroup;IsCurrent;Attachments;NumComments;</ImmediateNotificationExcludedFields>

<DigestNotificationExcludedFields>ID;Author;Editor;Modified_x0020_By;Created_x0020_By;_UIVersionString;ContentType;TaskGroup;IsCurrent;Attachments;NumComments;</DigestNotificationExcludedFields>

프로퍼티 태그의 위 태그 뒤쪽에 아래 부분을 붙입니다. 클래스 이름이나 퍼블릭 키 토큰은 빌드하신 대로 바꾸셔야 합니다.

<NotificationHandlerAssembly>MOSSAlert, Version=1.0.0.0, Culture=neutral, PublicKeyToken=f693eecbef42f40b</NotificationHandlerAssembly>

<NotificationHandlerClassName>MOSSAlert.CustomMailAlert</NotificationHandlerClassName>

<NotificationHandlerProperties></NotificationHandlerProperties>

 

3. 커스텀 알림 처리기를 등록하기

제작된 알림 처리기를 MOSS 에 등록해주는 과정입니다. STSADM 을 이용합니다.

알림 템플릿의 업데이트 명령입니다. https://mossdev 사이트의 메일 알림 템플릿을 바꾸고 있습니다.

stsadm -o updatealerttemplates -url https://mossdev -filename "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\12\TEMPLATE\XML\CustomAlertTemplates.xml"

테스트를 좀 더 원활히 하기 위해 MOSS 타이머 서비스의 설정 변경이 필요합니다. 아래 명령어는 MOSS 서비스가 알림을 보내기 위해 체크하는 시간 간격을 설정합니다. 1분 단위로 바꾸고 있습니다. ( https://technet2.microsoft.com/windowsserver/WSS/en/library/0eb072fe-8321-483b-9d1e-3412e3f42a481033.mspx?mfr=true )

stsadm -o setproperty -pn job-immediate-alerts -pv "every 1 minutes"

iisreset 하고 서비스 관리자를 띄워서 Windows SharePoint Service Timer service 를 재시작 합니다.

 

4. 테스트

공지사항 리스트에서 메일 알림을 설정하고 (변경 사항 즉시 보내기) 공지사항에 글을 올리면 아래와 같은 메일 알림을 수신할 수 있습니다.

5. 기타

- 위 테스트를 하시려면, 나가는 메일 설정이 되어 있어야 합니다.

- Windows 2008 에서는 POP3 가 없기 때문에, 테스트를 위하여 공짜 SMTP/POP3 서버를 다운로드 하셔서 활용하시기 바랍니다.

Ex : https://www.download.com/ArGoSoft-Mail-Server-Freeware/3000-2165_4-10364910.html

추가 사항 :  

알림 설정이 신규 추가되거나 변경되었을 경우의 이벤트를 처리하려면 IAlertUpdateHandler Interface (Microsoft.SharePoint) 를 사용하셔야 합니다.

전체적인 아키텍쳐의 설명은 아래 블로그를 참고하시기 바랍니다.

Customizing Alert Notifications and Alert Templates in Windows SharePoint Services 3.0

How To: Customizing alert emails using IAlertNotifyHandler