이메일전송

BANANA Framework의 이메일전송 기능은 별도의 SMTP 서버가 필요없습니다.
프레임워크 내부에서 수신자의 이메일 서버로 소켓을 열어서, RFC 821(SMTP - http://tools.ietf.org/html/rfc821) 프로토콜을 직접 전송합니다.
메일 포맷은 HTML과 Plain Text의 두가지 형태를 지원합니다.
자, 그럼 간단한 메일을 한 번 보내볼까요?
이메일을 보내는 함수는 BANANA.Web.BasePage에 있기때문에, 해당 클래스를 상속 받아야 합니다.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace BANANA.Web.Framework.Test
{
	public partial class EmailSend2 : BANANA.Web.BasePage
	{
		protected void Page_Load(object sender, EventArgs e)
		{

		}
	}
}

이메일 메시지를 보내는 함수는 아래와 같이 총 4개가 있습니다.
/// <summary>
/// 전자우편 전송
/// </summary>
/// <param name="From">보내는 사람 전자우편 주소</param>
/// <param name="To">받는 사람 전자우편 주소</param>
/// <param name="Subject">전자우편 제목</param>
/// <param name="Body">전자우편 내용</param>
public void SendEmail(string From, string To, string Subject, string Body)
{
	// 가장 간단하게 이메일을 보낼 수 있는 함수입니다.
	// 보내는 사람, 받는 사람, 제목 및 내용만을 전달하면 됩니다.
}


/// <summary>
/// 전자우편 전송
/// </summary>
/// <param name="From">보내는 사람 전자우편 주소</param>
/// <param name="To">받는 사람 전자우편 주소</param>
/// <param name="Cc">참조 전자우편 주소 </param>
/// <param name="Subject">전자우편 제목</param>
/// <param name="Body">전자우편 내용</param>
public void SendEmail(string From, string To, string Cc, string Subject, string Body)
{
	// 이 함수는 참조로 받을 사람의 전자우편 주소를 지정할 수 있습니다.
}

/// <summary>
/// 전자우편 전송
/// </summary>
/// <param name="From">보내는 사람 전자우편 주소</param>
/// <param name="To">받는 사람 전자우편 주소</param>
/// <param name="Cc">참조 전자우편 주소 </param>
/// <param name="Bcc">숨은 참조 전자우편 주소</param>
/// <param name="Subject">전자우편 제목</param>
/// <param name="Body">전자우편 내용</param>
public void SendEmail(string From, string To, string Cc, string Bcc, string Subject, string Body)
{
	// 이 함수는 숨은 참조까지 지정할 수 있습니다.
}


/// <summary>
/// 전자우편 전송
/// </summary>
/// <param name="From">보내는 사람 전자우편 주소</param>
/// <param name="To">받는 사람 전자우편 주소(들)</param>
/// <param name="Cc">참조 전자우편 주소(들)</param>
/// <param name="Bcc">숨은 참조 전자우편 주소(들)</param>
/// <param name="Subject">전자우편 제목</param>
/// <param name="Body">전자우편 내용</param>
/// <param name="MessageType">Html/Text</param>
public void SendEmail(string From, ArrayList To, ArrayList Cc, ArrayList Bcc, string Subject, string Body, MessageType MessageType)
{
	// 이 함수는 여러 명의 받는 사람, 참조 및 숨은 참조를 지정할 수 있고, 이메일 메시지 형식을 지정할 수도 있습니다.
}


실제 메시지를 보내는 테스트를 하기 전에 중요한 부분을 짚고 넘어 가겠습니다.
보내는 사람, 받는 사람, 참조 및 숨은 참조 주소는 아래의 형식에 맞추어야 합니다.
주소형식은 순수한 이메일 주소만 입력하셔도 되고, 성명을 같이 보내시려면 성명<이메일주소>의 형식으로 맞추어 주세요.
"<"대신에 "[", "{" 혹은 "("도 가능합니다
	string _strSender = "Peter Jackson<[email protected]>";	// 좋은 예
	string _strSender = "Peter Jackson([email protected])";	// 좋은 예
	string _strSender = "홍길동{[email protected]}";		// 좋은 예
	string _strSender = "길동 홍[[email protected]]";	// 좋은 예
	string _strSender = "<[email protected]>";		// 좋은 예
	string _strSender = "([email protected])";		// 좋은 예
	string _strSender = "{[email protected]}";		// 좋은 예
	string _strSender = "[[email protected]]";		// 좋은 예
	string _strSender = "[email protected]";		// 좋은 예
	string _strSender = "[email protected]<홍길동>";		// 나쁜 예
	string _strSender = "홍길동";		// 나쁜 예


어느 정도 이해되셨나요?
자 그럼 이제 간단한 화면을 만들어 보겠습니다.
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="EmailSend2.aspx.cs" Inherits="BANANA.Web.Framework.Test.EmailSend2" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
	<title>이메일 전송 테스트</title>
</head>
<body>
	<form id="form1" runat="server">
	<div style="width: 610px;">
	<asp:Label ID="Label1" runat="server" Text="보내는 사람 전자우편 주소" Width="100px" /><asp:TextBox ID="_txtFrom01" runat="server" Width="500px" /><br />
	<asp:Label ID="Label2" runat="server" Text="받는 사람 전자우편 주소" Width="100px" /><asp:TextBox ID="_txtTo01" runat="server" Width="500px" /><br />
	<asp:Label ID="Label3" runat="server" Text="전자우편 제목" Width="100px" /><asp:TextBox ID="_txtSubject01" runat="server" Width="500px" /><br />
	<asp:Label ID="Label4" runat="server" Text="전자우편 내용" Width="100px" /><asp:TextBox ID="_txtBody01" runat="server" Width="500px" Height="200px" TextMode="MultiLine" /><br />
	<asp:Button ID="_btnSend01" runat="server" Text="이메일 전송" onclick="_btnSend_Click" style="float: right;" />
	</div>
	</form>
</body>
</html>
실제 화면은 아래와 같습니다.
입력항목을 모두 채우신 후, "이메일 전송" 버튼을 클릭하세요.
보내는 사람 전자우편 주소
받는 사람 전자우편 주소
전자우편 제목
전자우편 내용


아래는 메일을 전송하는 소스입니다.
protected void _btnSend01_Click(object sender, EventArgs e)
{
	try
	{
		// 주의하실 점은 받는 사람란에 "[email protected];[email protected]"과 같이 여러 명의 이메일 주소를 한 번에 입력하시면 안 됩니다.
		// 여러 명의 받는 사람, 참조 혹은 숨은 참조를 처리하는 방법은 조금 후에 알아 보겠습니다.
		base.SendEmail(_txtFrom.Text
			, _txtTo.Text
			, _txtSubject.Text
			, _txtBody.Text.Replace("\r\n", "<br />")
			);

		MessageBox.Show("이메일 전송완료");
	}
	catch (Exception err)
	{
		MessageBox.Show(err.Message
			, "오류"
			, MessageBox.MessageBoxType.Alert
			, MessageBox.MessageBoxIcon.Error);
	}
}


이번에는 참조를 추가해 보겠습니다.
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="EmailSend2.aspx.cs" Inherits="BANANA.Web.Framework.Test.EmailSend2" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
	<title>이메일 전송 테스트</title>
</head>
<body>
	<form id="form1" runat="server">
	<div style="width: 610px;">
	<asp:Label ID="Label1" runat="server" Text="보내는 사람 전자우편 주소" Width="100px" /><asp:TextBox ID="_txtFrom01" runat="server" Width="500px" /><br />
	<asp:Label ID="Label2" runat="server" Text="받는 사람 전자우편 주소" Width="100px" /><asp:TextBox ID="_txtTo01" runat="server" Width="500px" /><br />
	<asp:Label ID="Label5" runat="server" Text="참조 전자우편 주소 " Width="100px" /><asp:TextBox ID="_txtCc01" runat="server" Width="500px" /><br />
	<asp:Label ID="Label3" runat="server" Text="전자우편 제목" Width="100px" /><asp:TextBox ID="_txtSubject01" runat="server" Width="500px" /><br />
	<asp:Label ID="Label4" runat="server" Text="전자우편 내용" Width="100px" /><asp:TextBox ID="_txtBody01" runat="server" Width="500px" Height="200px" TextMode="MultiLine" /><br />
	<asp:Button ID="_btnSend" runat="server" Text="이메일 전송" onclick="_btnSend01_Click" style="float: right;" />
	</div>
	</form>
</body>
</html>
보내는 사람 전자우편 주소
받는 사람 전자우편 주소
참조 전자우편 주소
전자우편 제목
전자우편 내용


아래는 이메일을 전송하는 코드입니다.
protected void _btnSend02_Click(object sender, EventArgs e)
{
	try
	{
		base.SendEmail(_txtFrom02.Text
			, _txtTo02.Text
			, _txtCc02.Text
			, _txtSubject02.Text
			, _txtBody02.Text.Replace("\r\n", "<br />")
			);

		MessageBox.Show("이메일 전송완료");
	}
	catch (Exception err)
	{
		MessageBox.Show(err.Message
			, "오류"
			, MessageBox.MessageBoxType.Alert
			, MessageBox.MessageBoxIcon.Error);
	}
}


내친김에 숨은 참조까지 보내는 코드를 보겠습니다.
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="EmailSend2.aspx.cs" Inherits="BANANA.Web.Framework.Test.EmailSend2" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
	<title>이메일 전송 테스트</title>
</head>
<body>
	<form id="form1" runat="server">
	<div style="width: 610px;">
	<asp:Label ID="Label1" runat="server" Text="보내는 사람 전자우편 주소" Width="100px" /><asp:TextBox ID="_txtFrom03" runat="server" Width="500px" /><br />
	<asp:Label ID="Label2" runat="server" Text="받는 사람 전자우편 주소" Width="100px" /><asp:TextBox ID="_txtTo03" runat="server" Width="500px" /><br />
	<asp:Label ID="Label5" runat="server" Text="참조 전자우편 주소 " Width="100px" /><asp:TextBox ID="_txtCc03" runat="server" Width="500px" /><br />
	<asp:Label ID="Label6" runat="server" Text="숨은 참조 전자우편 주소" Width="100px" /><asp:TextBox ID="_txtBcc03" runat="server" Width="500px" /><br />
	<asp:Label ID="Label3" runat="server" Text="전자우편 제목" Width="100px" /><asp:TextBox ID="_txtSubject03" runat="server" Width="500px" /><br />
	<asp:Label ID="Label4" runat="server" Text="전자우편 내용" Width="100px" /><asp:TextBox ID="_txtBody03" runat="server" Width="500px" Height="200px" TextMode="MultiLine" /><br />
	<asp:Button ID="_btnSend03" runat="server" Text="이메일 전송" onclick="_btnSend03_Click" style="float: right;" />
	</div>
	</form>
</body>
</html>
보내는 사람 전자우편 주소
받는 사람 전자우편 주소
참조 전자우편 주소
숨은 참조 전자우편 주소
전자우편 제목
전자우편 내용


이메일을 전송하는 코드는 다음과 같습니다.
protected void _btnSend03_Click(object sender, EventArgs e)
{
	try
	{
		base.SendEmail(_txtFrom03.Text
			, _txtTo03.Text
			, _txtCc03.Text
			, _txtBcc03.Text
			, _txtSubject03.Text
			, _txtBody03.Text.Replace("\r\n", "<br />")
			);

		MessageBox.Show("이메일 전송완료");
	}
	catch (Exception err)
	{
		MessageBox.Show(err.Message
			, "오류"
			, MessageBox.MessageBoxType.Alert
			, MessageBox.MessageBoxIcon.Error);
	}
}


자, 마지막으로 조금 복잡하지만 여러 명의 받는 사람, 참조 및 숨은 참조에게 메일을 보내는 방법을 알아 보겠습니다.
<asp:Button ID="_btnSend04" runat="server" Text="여러 명에게 이메일 전송" style="float: right;" onclick="_btnSend04_Click" />
	


이메일을 전송하는 코드를 살펴 보겠습니다.
protected void _btnSend04_Click(object sender, EventArgs e)
{
	try
	{
		string _strFrom = "Peter Jackson<[email protected]>";

		// 받는 사람, 참조 및 숨은 참조를 추가할 때에는 System.Collections.ArrayList를 사용합니다.

		// 받는 사람 전자우편 주소
		System.Collections.ArrayList toEmail = new System.Collections.ArrayList();
		toEmail.Add("Sender(gildong@bananaframework)");	// 수신자를 추가할 때에는 한 번에 한 명씩 추가합니다.
		toEmail.Add("no-reply@bananaframework;master@bananaframework");	// 나쁜 예

		// 참조 전자우편 주소 
		System.Collections.ArrayList ccEmail = new System.Collections.ArrayList();
		ccEmail.Add("<master@bananaframework>");
		ccEmail.Add("support@bananaframework");

		// 숨은 참조 전자우편 주소
		System.Collections.ArrayList bccEmail = new System.Collections.ArrayList();
		bccEmail.Add("Joshua[hello@bananaframework]");
		bccEmail.Add("world@bananaframework");

		string _strSubject = "바나나 프레임워크에서 보내는 테스트 이메일입니다.";

		SendEmail(_strFrom
			, toEmail
			, ccEmail
			, bccEmail
			, _strSubject
			, "<b style=\"color: Blue;\">hello world~ testing sendemail</b>"	// 이메일 본문에는 html 코드를 사용할 수 있습니다.
			, MessageType.Html	// MessageType.Html과 MessageType.Text인 enum을 지정하시면 됩니다.
			);

		MessageBox.Show("전송완료");
	}
	catch (Exception err)
	{
		MessageBox.Show(err.Message
			, "오류"
			, MessageBox.MessageBoxType.Alert
			, MessageBox.MessageBoxIcon.Error);
	}
}


여기까지 바나나 프레임워크에서 이메일을 전송하는 방법을 알아 보았습니다.

TOP