SendGrid E-MAIL 서비스로 E-MAIL 보내기

이 글을 읽기 전에 주의 사항 – 이 강좌는 기술적인 내용을 다루기 위하여 작성된 것으로, 여기서 소개하는 내용을 이용하여 스팸 메일을 대량 발송하는데 악용해서는 안됩니다. 또한 필자는 불법적인 소프트웨어 개발 의뢰로 오는 연락에는 회신하지 않습니다. 이 점 주의하여 주십시오.


소셜 네트워크 서비스나 다른 여러가지 의사소통 채널들이 많이 늘어났지만, 오랜 시간동안 변함없이, 그리고 지금까지도 널리 사용되고 꾸준히 활용되는 광범위한 메시징 서비스로 여전히 E-MAIL은 그 값어치를 인정받고 있고 중요성이 유지되고 있습니다.


그런데 요즈음은 원치 않는 메일 수신이 늘어나면서 메일이 정상적으로 도착하게 될 것인지 아닌지 불분명한 메시지 송신을 담보로 해야 하는 경우가 많습니다. 이는 스팸 메일 필터링 규칙이 까다로워진 것에 큰 원인이 있을 것입니다.


대규모로 메일을 보내면서도 안정적인 송신이 가능한 방법으로 요즈음은 대량 E-MAIL 발송 서비스를 많이 이용하곤 합니다. 여러가지 서비스들이 있을 수 있지만, 만약 Windows Azure를 사용 중인 경우, Windows Azure Add-on과 연동되는 SendGrid E-MAIL 서비스를 사용하면 간편하게 SMTP 발송 서비스를 사용할 수 있습니다. 특히 초기 개발을 위하여 사용할 경우 무료로 약 5만여통의 E-MAIL 발송을 테스트해볼 수 있습니다.


SendGrid 신청 방법은 쉽습니다. Windows Azure Management Portal에 접속하여, 신규 Addon 서비스 신청 (2013년 10월 현재 한국어 메뉴에서는 저장소라고 나타나는 부분) 메뉴를 클릭하여 다음과 같이 SendGrid 서비스 신청을 진행하면 됩니다. 무료 서비스를 택하여 계정을 생성할 수 있습니다.




서비스 신청이 완료된 후, SendGrid 서비스 항목에 대한 상세 페이지로 들어가면 다음과 같이 대시보드 화면이 나타납니다. 기본적인 서비스 연결 정보 확인 및 계약 관리를 이곳에서 할 수 있으며, 실제 서비스에 대한 속성은 SendGrid 측의 관리자 페이지로 이동하여 진행할 수 있고, 이 관리자 페이지는 현재 Windows Azure 계정과 1:1 관계로 대응되는 SendGrid 측에서 자동으로 생성한 사용자 계정과 연결되어 Single Sign On으로 연동됩니다.



하단의 도구 모음에서 관리 버튼을 클릭하면 다음과 같이 SendGrid 측의 관리자 페이지로 이동합니다. 



이 관리자 페이지에 등록된 개인 정보는 수동으로 다시 입력해주어야 합니다. 프로필 변경을 통해서 수동으로 변경 가능하며 정확한 정보를 입력해야 나중에 유료 계정으로 업그레이드할 때 문제가 발생하지 않습니다. 그 외에는 메일의 발신 상태, 발신 시 표시할 문구 및 부가 기능 설정 등을 관리할 수 있으므로 서비스 자체에 대한 속성은 여기서 설정하시면 됩니다.



연결 정보 버튼을 클릭하면 위와 같이 SMTP 서버 접속 정보가 나타납니다. 위 정보를 메모하시고 다른 곳에 유출되지 않도록 관리해야 합니다. 이제 C# 프로그램 코드를 이용하여 메일을 보내는 예제 코드를 한 번 만들어보도록 하겠습니다.


string connString = CloudConfigurationManager.GetSetting(“DefaultStorage”);
var account = CloudStorageAccount.Parse(connString);
var blobClient = account.CreateCloudBlobClient();


var getBlobReferenceFromServer = Task<ICloudBlob>.Factory.FromAsync<Uri>(
    blobClient.BeginGetBlobReferenceFromServer,
    blobClient.EndGetBlobReferenceFromServer,
    new Uri(o as string), null);
var blob = await getBlobReferenceFromServer;


try
{
    using (SmtpClient client = new SmtpClient(“smtp.sendgrid.net”, 587))
    using (MailMessage message = new MailMessage(
        new MailAddress(“rkttu@somewhere.com“, “보내는 사람 이름“),
        new MailAddress(“someone@abc.com“)))
    {
        string[] nameParts = blob.Name.Split(new char[] { ‘/’ }, StringSplitOptions.None);
        string siteIdPart = nameParts[0];
        string userIdPart = nameParts[1];


        message.Subject = String.Format(“[Xinics Commons – {0}] {1} has uploaded the content.”, siteIdPart, userIdPart);


        message.AlternateViews.Add(AlternateView.CreateAlternateViewFromString(
            String.Format(@”
New content has arrived.


* Site ID: {0}
* User ID: {1}
* Media URL: {2}


“, siteIdPart, userIdPart, o), null, MediaTypeNames.Text.Plain));
        message.AlternateViews.Add(AlternateView.CreateAlternateViewFromString(


            String.Format(@”
<p>New file has arrived.</p>
<ul>
<li>Site ID: {0}</li>
<li>User ID: {1}</li>
<li>Media URL: {2}</li>
</ul>

“, siteIdPart, userIdPart, o), null, MediaTypeNames.Text.Html));


        client.Credentials = new NetworkCredential(
            “<SENDGRID 사용자 ID>“,
            “<비밀 번호>“);


        await client.SendMailAsync(message);
    }
}
catch (Exception ex)
{
    Trace.TraceWarning(ex.ToString(), “Exception”);
}


클라우드 서비스를 통하여 수신한 BLOB 파일에 대한 정보를 특정 사용자에게 메일로 보내기 위하여 위와 같이 코드를 작성하였습니다. 여기서 굵게 강조표시한 항목들이 바로 연결 정보에서 나타난 부분으로 교체해야 하는 부분입니다.


SendGrid를 통하여 E-MAIL을 보내면 수신 거부 링크를 자동으로 첨부하여 보내줍니다. 수신 거부한 사용자들은 제외하고 메일 발송을 계속 할 수 있으며, 수신 거부 내역은 관리자 페이지를 통하여 쉽게 확인할 수 있습니다. 관리 목적으로 보내는 E-MAIL 말고도 마케팅 관련 메일을 보낼 때도 SendGrid를 사용하면 법률을 준수할 수 있습니다.


주의 사항 – 이 강좌는 기술적인 내용을 다루기 위하여 작성된 것으로, 여기서 소개하는 내용을 이용하여 스팸 메일을 대량 발송하는데 악용해서는 안됩니다. 또한 필자는 불법적인 소프트웨어 개발 의뢰로 오는 연락에는 회신하지 않습니다. 이 점 주의하여 주십시오.

댓글 남기기