티스토리 뷰

======================================================

안녕하세요 Doridori 입니다.

요즘 근황은 출장을 마무리 하고 서울로 올라와서 본사로 다니고 있습니다. 

아직 프로젝트 자체는 완전히 끝난것은 아니지만 회사 내 직급도 있고 하다보니 이것 저것 해야 하는 것이 많네요.

집을 떠나 있었던 것도 오래 되다 보니 집에서 할것도 많고 어수선하게 지내고 있는 듯 합니다. 

올라와서 이것저것 해야지 라고 했었는데 생활이 안정이 되지 않다 보니 아직 정신차리는 시간이라고 생각 됩니다. 

와중에 틈틈히 준비를 하고 있습니다. 

조금 느슨해 지려고 하다가도 댓글 남겨주시는 분들 때문에 계속 진행 하게 되지 않나 싶습니다. ㅎㅎ 

감사합니다.!!

모두 화이팅 하십시오!!

======================================================

 

62. 메일 보내기 (send email)

UI) (usercontrol 만들어 놓은 부분은 소스 코드까지 함께 넣어 놨습니다.)

62. 메일 보내기 (send email) (UI).zip
0.24MB

Soruce) (소스에 있는 계정 정보는 삭제 하였습니다.)

62. 메일 보내기 (send email).zip
0.41MB

교재)

62. 메일 보내기 (send email).pdf
0.22MB

 

 

프로젝트를 진행 하다보면 매우 자주 나오는 이야기 중에 하나가 메일링 입니다. 

프로젝트로 진행 할 경우 대부분의 경우 이미 메일링 서비스를 하는 틀은 잡혀 있어서 만들어져 있는 내용을 기준으로 수정해서 사용 하면 되겠으나 기본적인 구조는 알고 있으면 당연히 도움이 되기에 준비해 보게 되었습니다. 

메일 전송 코드 자체는 어렵지 않지만 메일 서버를 구축해 놓은 상태로 전송을 해야 하기 때문에 서버 구축이 문제라고 생각하면 될 듯 하며 그것도 개인용으로 사용 할 것이라면 그것도 대기업에서 다 해주니 좋네요 ㅎ

처음에는 메일 서버를 구글 계정으로 하려고 하였으나 보안정책이 변경되어 임시 계정을 만들기 쉽지 않아, 

네이버 계정으로 만들었습니다. 

만드는 방법은 메일 계정에서 SMTP 서버 사용 설정만 해주면 되기 때문에 매우 간단 합니다.

UI)

메일 전송 예제를 만들다가 예전에 했던 내용을 섞어 보고 싶어서 고민을 해보다가 usercontrol과 정규식을 섞어서 만들어 봤습니다. 

usercontrol 같은 경우는 만들어 놓으면 소스코드 들이 분리되기 때문에 나중에 올리기 번거로워 지긴하는데 그래서 usercontrol 부분은 그냥 넣어 놨습니다. ^^a 

(내용이 많지 않기에 코드를 참고해서 분석해봐도 좋을듯 합니다.)

강의)

내용 설명 > 메일 서버 세팅 > 소스작성 하는 형태로 구성 하였습니다. 

내용들 자체는 어렵지 않기에 이론 적인 부분들에 대해서 조금더 자세히 검색해 보시고 소스를 천천히 따라오시면 금새 자신의 것으로 만들수 있습니다. 

 

Source)

이번 강의의 경우 Main, Mail Class, usercontrol로 구성 하였습니다. 

저의 메일 계정을 작성 하는 부분은 다 내용을 변경해 놓았으니 해당 부분의 경우 본인 계정으로 작성해서 사용하시면 됩니다.

Form1)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
 
namespace emailTest
{
    public partial class Form1 : Form
    {
 
        cEMail eMail;
 
        public Form1()
        {
            InitializeComponent();
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
            ucARsend.StrTitle = "받는이";
            ucARreg.StrTitle = "참조";
            ucARhide.StrTitle = "숨김";
 
            eMail = new cEMail("본인 EMail 주소""닉네임");    // EMail 주소, Nic 입력
        }
 
        private void btnSendMail_Click(object sender, EventArgs e)
        {
            List<string> LSend = ucARsend.LAddress;
            List<string> LRed = ucARreg.LAddress;
            List<string> LHide = ucARhide.LAddress;
 
            string sResult = eMail.SendEMail(tboxSubject.Text, tboxBody.Text, LSend, LRed, LHide);
            MessageBox.Show(sResult);
        }
 
        
    }
}
 
cs

 

cEMail)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Mail;
using System.Text;
using System.Threading.Tasks;
 
namespace emailTest
{
    class cEMail
    {
        private string _sendAddress = null;
        private string _sendNic = null;
        private string _sendPassword = emailTest.cSecretInfo._sendPassword;   // EMail Password  
        private string _sendUser = emailTest.cSecretInfo._sendUser;           // EMail ID   
 
        public cEMail()
        {
 
        }
 
        public cEMail(string sendMail, string sendNic)
        {
            _sendAddress = sendMail;
            _sendNic = sendNic;
        }
 
        public string SendEMail(string subject, string body, List<string> toSend, List<string> toReg, List<string> toHide)
        {
            SmtpClient smtp = null;
            MailMessage message = null;
 
            try
            {
                // Naver 계정 SMTP 설정 > 
                smtp = new SmtpClient();
                smtp.Host = "smtp.naver.com";  //"smtp.gmail.com";
                smtp.UseDefaultCredentials = false;
                smtp.Port = 587;
                smtp.EnableSsl = true;
                smtp.Timeout = 20000;
                smtp.DeliveryMethod = SmtpDeliveryMethod.Network;
                smtp.Credentials = new NetworkCredential(_sendUser, _sendPassword);
 
                //message = new MailMessage();
 
                message = new MailMessage();  // from address를 따로 넣으려면 어떻게 해야 하나?
 
                message.From = new MailAddress(_sendAddress, _sendNic, System.Text.Encoding.UTF8);
 
                if (toSend.Count > 0)
                {
                    foreach (string strAddress in toSend)
                    {
                        message.To.Add(new MailAddress(strAddress)); // 앞에서 정규식 체크 하고 넘어 왔음으로 그냥 사용
                    }
                }
 
                if (toReg.Count > 0)
                {
                    foreach (string strAddress in toReg)
                    {
                        message.CC.Add(new MailAddress(strAddress)); // 앞에서 정규식 체크 하고 넘어 왔음으로 그냥 사용
                    }
                }
 
                if (toHide.Count > 0)
                {
                    foreach (string strAddress in toHide)
                    {
                        message.Bcc.Add(new MailAddress(strAddress)); // 앞에서 정규식 체크 하고 넘어 왔음으로 그냥 사용
                    }
                }
 
                /* 기타 설정들
                message.To.Add("aaa@naver.com");   // 받는 사람
                message.CC.Add("aaa@naver.com");   // 참조
                message.Bcc.Add("aaa@naver.com");   // 비공개
                message.IsBodyHtml = false;  // Body Format
                message.Attachments.Add(new Attachment(new FileStream(@"D:\test.zip", FileMode.Open, FileAccess.Read), "test.zip"));  // File 첨부
                */
 
                message.Subject = subject;
                message.SubjectEncoding = System.Text.Encoding.UTF8;
                message.Body = body;
                message.BodyEncoding = System.Text.Encoding.UTF8;
 
                smtp.Send(message);
                return "Mail 전송";
            }
            catch (Exception ex)
            {
                return ex.ToString();
            }
            finally
            {
                if (smtp != null) smtp.Dispose();
                if (message != null) message.Dispose();
            }
        }
 
 
    }
}
 
cs

 

ucAddressReg(usercontrol))

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using System.Windows.Forms;
 
namespace emailTest
{
    public partial class ucAddressReg : UserControl
    {
        // 외부로 Listbox 내용을 전달하기 위해 추가
        public List<string> LAddress
        {
            get => lboxAddress.Items.Cast<String>().ToList();
            // set => _lAddress = value; 
        }
 
 
 
        // gbox Title Name
        public string StrTitle { 
            //get => strTitle; 
            set => gboxMain.Text = value; 
        }
 
        
        public ucAddressReg()
        {
            InitializeComponent();
        }
 
        /// <summary>
        /// Add Button 선택 시 List Box에 Mial 주소 등록 (주소 등록 시 정규식 체크 해서 메일 주소 인지 확인)
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnAdd_Click(object sender, EventArgs e)
        {
            if(EmailFormatCheck(tboxAddress.Text))   
            {
                // 어라? 체크 필요
                if (LAddress != null && LAddress.Contains(tboxAddress.Text))
                {
                    MessageBox.Show("이미 등록 되어 있는 주소 입니다.");
                    return;  // 기존에 있으면 안되지~
                }
 
                lboxAddress.Items.Add(tboxAddress.Text);
                tboxAddress.Text = "";
            }
            else
            {
                MessageBox.Show("입력 값이 메일 형식이 아닙니다.");
            }
        }
 
        /// <summary>
        /// Mouse Double Click 시 Mail 주소 삭제
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void lboxAddress_MouseDoubleClick(object sender, MouseEventArgs e)
        {
            int iRow = lboxAddress.SelectedIndex;
            if (iRow != -1)
            {
                lboxAddress.Items.RemoveAt(iRow);
            }
        }
 
 
        /// <summary>
        /// Mail 주소 형식인지 정규식 체크
        /// </summary>
        /// <param name="strcheckMailAddress"></param>
        /// <returns></returns>
        private bool EmailFormatCheck(string strcheckMailAddress)
        {
 
            string regExp = @"[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-zA-Z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?\.)+[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?";  // 이메일 정규식 체크 
            Regex regex = new Regex(regExp);
 
            if (regex.IsMatch(strcheckMailAddress))
            {
                return true;
            }
            else
            {
                return false;
            }
        }
    }
}
 
cs
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함