IT/ASP.net

ASP.net SMTP 메일보내기

pandada 2020. 10. 23. 12:40
반응형

 

 

 

ASP.net SMTP 메일보내기

 

 

새로운 카테고리를 하나 만들어봤습니다. 그래도 나름 IT업무에 종사하는 사람이라..

 

추가가 필요할것 같아서.. 그리고 IT 부분의 개발자 관련 카테고리로

 

해당 글은 편하게 음슴체, 반말체로 진행하도록 하겠습니다.

 

앞으로 초보 개발자들이 많이들 활용했으면 좋겠네요.

 

자 일단 SMTP 메일을 보내기 위해서는 네임스페이스의 활용이 필요합니다.

 

즉, 기본적으로 Microsoft의 Visual Studio에 있는 내용을 사용하면 된다.

 

그렇다면 항상 개발자들에게 필요한 API문서를 찾아봐야한다.

 

개발자들은 항상 API문서를 참고하여 개발을 하기 때문에 일단 API 문서 2개를 참고해야함.

 

 

SmtpClient 클래스 (System.Net.Mail)

애플리케이션에서 SMTP(Simple Mail Transfer Protocol)를 사용하여 이메일을 보낼 수 있도록 합니다.Allows applications to send email by using the Simple Mail Transfer Protocol (SMTP). SmtpClient 형식은 이제 사용되지 않습니

docs.microsoft.com

System.Net.Mail 과 SMTPClient 클래스를 사용해야함.

 

 

System.Net.Mail 네임스페이스

System.Net.Mail 네임스페이스에는 배달을 위해 SMTP(Simple Mail Transfer Protocol) 서버에 전자 메일을 보내는 데 사용되는 클래스가 포함되어 있습니다. The System.Net.Mail namespace contains classes used to send electron

docs.microsoft.com

자 그럼 실질적으로 매우 간단하게 메일을 보내도록 진행해봄.

 

<%@ Page Language="C#" AutoEventWireup="true"
    CodeFile="mail_pop.aspx.cs" Inherits="mail_pop" %>
<head>
  <!--디자인을 위한 CSS파일 link-->
    <link href="mail_pop.css" rel="stylesheet">
</head>
            <div class="col-lg-6">
                <!-- Form을 이용한 post 방식으로 데이터 받음.-->
                <form id="contactForm" data-toggle="validator" data-focus="false" runat="server" method="post">
                        <div class="form-group">
						<!--단순한 디자인 때문에 라벨씀. 실질적으로 input만 있으면 됨.-->
                        <input type="text" class="form-control-input" id="ctitle" name="ctitle" required>
                        <label class="label-control" for="ctitle"><span style="color: red">*</span>제목</label>
                        <div class="help-block with-errors"></div>
                    </div>
                                        <div class="form-group">
                        <input type="email" class="form-control-input" id="cemail" name="cemail" required>
                        <label class="label-control" for="cemail"><span style="color: red">*</span>이메일</label>
                        <div class="help-block with-errors"></div>
                    </div>
                    <div class="form-group">
                        <textarea class="form-control-textarea" id="cmessage" name="cmessage" required></textarea>
                        <label class="label-control" for="cmessage">내용</label>
                        <div class="help-block with-errors"></div>
                    </div>
                    <asp:FileUpload id="FileUpload1"  runat="server"> </asp:FileUpload>  
                    <div class="form-group">
                        <asp:button class="form-control-submit-button" onclick="Regist" runat="server" text="문의하기"></asp:button>
                    </div>
                </form>
            </div>
        </div>
    </div>
</div>
 

 

가독성이 나름 있도록 코드 사진을 첨부하지만..

 

필요에 따라서 사용하면 될듯 함. 매우 기본적인 html 코드이므로 참고해서 

 

코딩을 하도록 하자. 일단 참고가 되면 좋을것 같기도 하고.. 나중에 

 

내가 참고해도 좋을것 같기도함..

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Net.Mail;
using System.IO;
using System.Collections.ObjectModel;
using System.Net.Mime;
public partial class mail_pop : PageBase
{
		//기본적으로 메일을 못보낼 경우의 exception이 발생할 수 있기 때문에
		//try -> catch -> finally 로 진행한다.
        try
        {
			//input 타입일 post 형식으로 가져온다.
            string email = B.Post("cemail");                 
            string title = B.Post("ctitle");                 
            string message = Request.Form["cmessage"];       
            // mailAddress를 사용하여 메일 인코딩 / 형식은 UTF8
            mail.From = new MailAddress(email, user, System.Text.Encoding.UTF8);
            // 받는 사람 메일주소 add
			// 코드상에서 추가를 여러명 할 수도 있기 때문.
            mail.To.Add("받는사람 메일주소");
            // 메일 제목
            mail.Subject = title + "";
            // 본문 내용
            mail.Body += "내용 : " + message + "" + "<br/>";
            // 본문 내용 포멧의 타입 (true의 경우 Html 포멧으로)
            mail.IsBodyHtml = true;
            // 메일 제목과 본문의 인코딩 타입(UTF-8)
            mail.SubjectEncoding = System.Text.Encoding.UTF8;
            mail.BodyEncoding = System.Text.Encoding.UTF8;
            // SMTP 서버 주소
            SmtpClient SmtpServer = new SmtpClient("받는사람의 SMPT서버 주소");
            // SMTP 포트(거의 기본적으로 25지만 서버에 따라 세팅이 다를 수 있음.)
            SmtpServer.Port = 25;
            // SMTP 받는사람 계정
            SmtpServer.Credentials = new System.Net.NetworkCredential("아아디(메일주소가 아닌 @의 앞부분)", "비밀번호");
            // SSL 사용 여부
            SmtpServer.EnableSsl = true;
            // 발송
            SmtpServer.Send(mail);
        }
		//필요한 exception은 각자 알아서 넣으면 됨.
        catch ("필요한 exceptino 넣기")
        {
        }
        finally
        {
 
            Javascript.AlertBack("메일을 보냈습니다.");
        }
 
    }
	/*UI 컨트롤러를 위한 오버라이드 사용하려 했지만 귀찮아서 안씀*/
    public override void VerifyRenderingInServerForm(System.Web.UI.Control control)
    {
        // Confirms that an HtmlForm control is rendered for the specified ASP.NET server control at run time.
    }
}

일단 기본적으로 주석은 달아뒀지만... 간단히 설명한번 해보자.

 

SMTP 형식으로 일단 필자는 코드를 만들었고...

 

보통 에러 나는 부분이 클라이언트 서버 접속하는 부분이다.

 

보통 연결 안될경우의 에러메시지는 하단과 같은 내용들이 대부분이다.

 

No SMTP Server

송신 측의 메일서버에서 참조 하고 있는 DNS 서버에서 수신 측의 메일서버를 찾지 못하였거나

실제로 수신 측의 메일서버가 존재하지 않아 발생한 오류

 

421 IP 에러

송신 측의 아이피 주소가 스팸메일로 등록되있을 경우

 

550 Mail Sender arror

송신 측의 IP Address 가 수신 측의 메일서버에서 거부되어 발생한 오류

 

이런 에러코드들이 발생한다면 받는 서버의 방화벽을 확인하거나

 

서버 담당자에게 연락하거나? SMTP 설정이 잘못되어 있는 경우가 많다.

 

 

추가로 포트 설정이 잘못되있을 경우에는

System.Exception: Smtp Mail Sender Error : System.Net.Mail.SmtpException: 메일을 보내지 못했습니다. 
---> System.Net.WebException: 원격 서버에 연결할 수 없습니다. ---> System.Net.Sockets.SocketException: 대상 컴퓨터에서 연결을 거부했으므로 연결하지 못했습니다

포트의 설정이 잘못되있을 경우에는 위와 같은 에러메시지가 표기된다.

 

즉? 이럴경우 보통 서버 SMTP 포트 번호는 뭐 서버에서 설정하기 나름이겠지만

 

보통의 경우에는 예를 들어 25번 포트를 사용해야하는데 584나 585 포트를

 

사용했거나? 지정된 포트를 제대로 사용하지 않은 경향이 있을 수 있다.

 

 

< 테스트 사진 >

필자는 위의 작성 코드에서 Mail.body에 연락처를 추가하고,

 

메일을 보내는 DropDownList를 사용하여 추가적으로 

 

메일폼의 변형을 주었음. 이런식으로 필자가 작성한 코드를 참고하여 작성해도 

 

될듯하다.  자 그럼 여기서 추가로. 메일에 첨부파일을 보낼 경우?

 

그거는 다음 기회에 알아보도록하자.

 

( 그래야지 내용 포스팅의 글이 많아지니까... )

 

질문사항 및 다른 의견 있을 경우 댓글에 남겨주면 성실히 응답 해드리겠음...

 

기초 코드이므로 뭐.. 다른 사람들이 욕할수도 있겠지만...

반응형

'IT > ASP.net' 카테고리의 다른 글

IIS 신규 사이트 추가 (ASP.NET 3.5 설치)  (0) 2022.06.14
윈도우 10 / IIS 세팅  (0) 2022.06.13
ASP.net SMTP 메일 첨부파일 방법  (0) 2020.11.03