다음을 통해 공유


ASP.NET 웹 페이지(Razor) 사이트에서 Email 보내기

Tom FitzMacken

이 문서에서는 ASP.NET 웹 페이지(Razor)를 사용할 때 웹 사이트에서 전자 메일 메시지를 보내는 방법을 설명합니다.

학습할 내용:

  • 웹 사이트에서 전자 메일 메시지를 보내는 방법
  • 전자 메일 메시지에 파일을 첨부하는 방법입니다.

다음은 문서에 도입된 ASP.NET 기능입니다.

  • 도우미입니다 WebMail .

자습서에서 사용되는 소프트웨어 버전

  • ASP.NET 웹 페이지(Razor) 3

이 자습서는 ASP.NET 웹 페이지 2에서도 작동합니다.

웹 사이트에서 Email 메시지 보내기

웹 사이트에서 전자 메일을 보내야 하는 이유는 여러 가지가 있습니다. 사용자에게 확인 메시지를 보내거나 사용자에게 알림을 보낼 수 있습니다(예: 새 사용자가 등록한 경우). 도우미를 WebMail 사용하면 전자 메일을 쉽게 보낼 수 있습니다.

도우미를 WebMail 사용하려면 SMTP 서버에 액세스할 수 있어야 합니다. (SMTP는 단순 메일 전송 프로토콜을 의미합니다.) SMTP 서버는 받는 사람의 서버에만 메시지를 전달하는 전자 메일 서버로, 전자 메일의 아웃바운드 쪽입니다. 웹 사이트에 호스팅 공급자를 사용하는 경우 전자 메일로 설정하고 SMTP 서버 이름이 무엇인지 알려줄 수 있습니다. 회사 네트워크 내에서 작업하는 경우 관리자 또는 IT 부서에서 일반적으로 사용할 수 있는 SMTP 서버에 대한 정보를 제공할 수 있습니다. 집에서 작업하는 경우 일반 전자 메일 공급자를 사용하여 테스트할 수도 있습니다. 이 공급자는 SMTP 서버의 이름을 알려줄 수 있습니다. 일반적으로 다음이 필요합니다.

  • SMTP 서버의 이름입니다.
  • 포트 번호. 이것은 거의 항상 25입니다. 그러나 ISP에서 포트 587을 사용해야 할 수 있습니다. 전자 메일에 SSL(보안 소켓 계층)을 사용하는 경우 다른 포트가 필요할 수 있습니다. 전자 메일 공급자에게 문의하세요.
  • 자격 증명(사용자 이름, 암호).

이 절차에서는 두 페이지를 만듭니다. 첫 번째 페이지에는 사용자가 기술 지원 양식을 작성하는 것처럼 설명을 입력할 수 있는 양식이 있습니다. 첫 번째 페이지는 해당 정보를 두 번째 페이지에 제출합니다. 두 번째 페이지에서 코드는 사용자의 정보를 추출하고 전자 메일 메시지를 보냅니다. 또한 문제 보고서가 수신되었음을 확인하는 메시지도 표시됩니다.

[스크린샷은 문제 보고서가 수신되었음을 확인하는 메시지를 보여줍니다.]

참고

이 예제를 간단하게 유지하기 위해 코드는 도우미를 WebMail 사용하는 페이지에서 바로 초기화합니다. 그러나 실제 웹 사이트의 경우 웹 사이트의 모든 파일에 대한 도우미를 초기화할 수 있도록 이와 같은 초기화 코드를 전역 파일에 배치하는 WebMail 것이 좋습니다. 자세한 내용은 ASP.NET 웹 페이지 대한 Site-Wide 동작 사용자 지정을 참조하세요.

  1. 새 웹 사이트를 만듭니다.

  2. EmailRequest.cshtml이라는 새 페이지를 추가하고 다음 태그를 추가합니다.

    <!DOCTYPE html>
    <html>
    <head>
        <title>Request for Assistance</title>
    </head>
    <body>
      <h2>Submit Email Request for Assistance</h2>
      <form method="post" action="ProcessRequest.cshtml">
        <div>
            Your name:
            <input type="text" name="customerName" />
        </div>
    
        <div>
            Your email address:
            <input type="text" name="customerEmail" />
        </div>
    
        <div>
            Details about your problem: <br />
            <textarea name="customerRequest" cols="45" rows="4"></textarea>
        </div>
    
        <div>
            <input type="submit" value="Submit" />
        </div>
      </form>
    </body>
    </html>
    

    form 요소의 action 특성이 ProcessRequest.cshtml로 설정되었습니다. 즉, 양식이 현재 페이지로 돌아가는 대신 해당 페이지로 제출됩니다.

  3. 웹 사이트에 ProcessRequest.cshtml이라는 새 페이지를 추가하고 다음 코드 및 태그를 추가합니다.

    @{
        var customerName = Request["customerName"];
        var customerEmail = Request["customerEmail"]; 
        var customerRequest = Request["customerRequest"];
        var errorMessage = "";
        var debuggingFlag = false;
        try {
            // Initialize WebMail helper
            WebMail.SmtpServer = "your-SMTP-host";
            WebMail.SmtpPort = 25;
            WebMail.UserName = "your-user-name-here";
            WebMail.Password = "your-account-password";
            WebMail.From = "your-email-address-here";
    
            // Send email
            WebMail.Send(to: customerEmail,
                subject: "Help request from - " + customerName,
                body: customerRequest
            );
        }
        catch (Exception ex ) {
            errorMessage = ex.Message;
        }
    }
    <!DOCTYPE html>
    <html>
    <head>
      <title>Request for Assistance</title>
    </head>
    <body>
      <p>Sorry to hear that you are having trouble, <b>@customerName</b>.</p>
        @if(errorMessage == ""){
          <p>An email message has been sent to our customer service
             department regarding the following problem:</p>
          <p><b>@customerRequest</b></p>
        }
        else{
            <p><b>The email was <em>not</em> sent.</b></p>
            <p>Please check that the code in the ProcessRequest page has 
               correct settings for the SMTP server name, a user name, 
               a password, and a "from" address.
            </p>
            if(debuggingFlag){
                <p>The following error was reported:</p>
                <p><em>@errorMessage</em></p>
            }
        }
    </body>
    </html>
    

    코드에서 페이지에 제출된 양식 필드의 값을 가져옵니다. 그런 다음 도우미의 Send 메서드를 WebMail 호출하여 전자 메일 메시지를 만들고 보냅니다. 이 경우 사용할 값은 양식에서 제출된 값과 연결된 텍스트로 구성됩니다.

    이 페이지의 코드는 블록 내에 있습니다 try/catch . 어떤 이유로든 전자 메일을 보내려는 시도가 작동하지 않는 경우(예: 설정이 잘못됨) 블록의 코드 catch 가 실행되고 변수가 발생한 오류로 설정 errorMessage 됩니다. 블록 또는 <text> 태그에 대한 try/catch 자세한 내용은 Razor 구문을 사용하여 ASP.NET 웹 페이지 프로그래밍 소개를 참조하세요.

    페이지 본문에서 변수가 비어 있는 경우 errorMessage (기본값) 사용자에게 전자 메일 메시지가 전송되었다는 메시지가 표시됩니다. 변수가 errorMessage true로 설정된 경우 사용자에게 메시지를 보내는 데 문제가 있다는 메시지가 표시됩니다.

    오류 메시지를 표시하는 페이지 부분에 추가 테스트 if(debuggingFlag)가 있습니다. 전자 메일을 보내는 데 문제가 있는 경우 true로 설정할 수 있는 변수입니다. debuggingFlag 가 true이고 전자 메일을 보내는 데 문제가 있는 경우 전자 메일 메시지를 보내려고 할 때 보고한 ASP.NET 표시되는 추가 오류 메시지가 표시됩니다. 그러나 공정한 경고: 전자 메일 메시지를 보낼 수 없을 때 ASP.NET 보고하는 오류 메시지는 일반적일 수 있습니다. 예를 들어 ASP.NET SMTP 서버에 연결할 수 없는 경우(예: 서버 이름에 오류가 발생했기 때문에) 오류는 입니다 Failure sending mail.

    참고

    중요 예외 개체(코드의 )ex 에서 오류 메시지가 표시되면 해당 메시지를 사용자에게 정기적으로 전달 하지 마세요. 예외 개체에는 사용자가 볼 수 없으며 보안 취약성일 수도 있는 정보가 포함되는 경우가 많습니다. 따라서 이 코드에는 오류 메시지를 표시하는 스위치로 사용되는 변수 debuggingFlag 와 변수가 기본적으로 false로 설정된 이유가 포함됩니다. 전자 메일을 보내는 데 문제가 있고 디버그해야 하는 경우에만 해당 변수를 true로 설정하여 오류 메시지를 표시해야 합니다. 문제를 해결했으면 다시 false로 설정합니다 debuggingFlag .

    코드에서 다음 전자 메일 관련 설정을 수정합니다.

    • 액세스 권한이 있는 SMTP 서버의 이름으로 설정합니다 your-SMTP-host .

    • SMTP 서버 계정의 사용자 이름으로 설정합니다 your-user-name-here .

    • SMTP 서버 계정의 암호로 설정합니다 your-account-password .

    • 을 사용자 고유의 전자 메일 주소로 설정합니다 your-email-address-here . 메시지가 전송되는 전자 메일 주소입니다. (일부 전자 메일 공급자는 다른 From 주소를 지정할 수 없으며 사용자 이름을 주소로 From 사용합니다.)

      Email 설정 구성

      SMTP 서버, 포트 번호 등에 대한 올바른 설정이 있는지 확인하는 것이 어려울 수 있습니다. 다음은 이에 대한 몇 가지 팁입니다.

      • SMTP 서버 이름은 또는 와 같은 smtp.provider.comsmtp.provider.net경우가 많습니다. 그러나 호스팅 공급자에 사이트를 게시하는 경우 해당 시점의 SMTP 서버 이름은 일 수 있습니다 localhost. 게시한 후 사이트가 공급자의 서버에서 실행되고 나면 전자 메일 서버가 애플리케이션의 관점에서 로컬일 수 있기 때문입니다. 서버 이름이 변경되면 게시 프로세스의 일부로 SMTP 서버 이름을 변경해야 할 수 있습니다.
      • 포트 번호는 일반적으로 25입니다. 그러나 일부 공급자는 포트 587 또는 다른 포트를 사용해야 합니다.
      • 올바른 자격 증명을 사용해야 합니다. 호스팅 공급자에 사이트를 게시한 경우 공급자가 특별히 전자 메일에 대해 표시한 자격 증명을 사용합니다. 게시하는 데 사용하는 자격 증명과 다를 수 있습니다.
      • 경우에 따라 자격 증명이 전혀 필요하지 않습니다. 개인 ISP를 사용하여 전자 메일을 보내는 경우 전자 메일 공급자가 이미 자격 증명을 알고 있을 수 있습니다. 게시한 후에는 로컬 컴퓨터에서 테스트할 때와 다른 자격 증명을 사용해야 할 수 있습니다.
      • 전자 메일 공급자가 암호화를 사용하는 경우 를 로 설정 WebMail.EnableSsl 해야 합니다 true.
  4. 브라우저에서 EmailRequest.cshtml 페이지를 실행합니다. (실행하기 전에 파일 작업 영역에서 페이지가 선택되어 있는지 확인합니다.)

  5. 이름과 문제 설명을 입력한 다음 제출 단추를 클릭합니다. 메시지를 확인하고 전자 메일 메시지를 보내는 ProcessRequest.cshtml 페이지로 리디렉션됩니다.

    [스크린샷은 프로세스 요청 페이지를 보여줍니다.]

Email 사용하여 파일 보내기

전자 메일 메시지에 첨부된 파일을 보낼 수도 있습니다. 이 절차에서는 텍스트 파일과 두 개의 HTML 페이지를 만듭니다. 텍스트 파일을 전자 메일 첨부 파일로 사용합니다.

  1. 웹 사이트에서 새 텍스트 파일을 추가하고 이름을 로MyFile.txt.

  2. 다음 텍스트를 복사하여 파일에 붙여넣습니다.

    Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.

  3. SendFile.cshtml이라는 페이지를 만들고 다음 태그를 추가합니다.

    <!DOCTYPE html>
    <html>
    <head>
        <title>Attach File</title>
    </head>
    <body>
      <h2>Submit Email with Attachment</h2>
      <form method="post" action="ProcessFile.cshtml">
        <div>
            Your name:
            <input type="text" name="customerName" />
        </div>
    
        <div>
            Your email address:
            <input type="text" name="customerEmail" />
        </div>
    
        <div>
            Subject line: <br />
            <input type="text" size= 30 name="subjectLine" />
        </div>
    
        <div>
            File to attach: <br />
            <input type="text" size=60 name="fileAttachment" />
        </div>
    
        <div>
            <input type="submit" value="Submit" />
        </div>
      </form>
    </body>
    </html>
    
  4. ProcessFile.cshtml이라는 페이지를 만들고 다음 태그를 추가합니다.

    @{
        var customerName = Request["customerName"];
        var customerEmail = Request["customerEmail"]; 
        var customerRequest = Request["customerRequest"];
        var subjectLine = Request["subjectLine"];
        var fileAttachment = Request["fileAttachment"];
        var errorMessage = "";
        var debuggingFlag = false;
    
        try {
            // Initialize WebMail helper
            WebMail.SmtpServer = "your-SMTP-host";
            WebMail.SmtpPort = 25;
            WebMail.UserName = "your-user-name-here";
            WebMail.Password = "your-account-password";
            WebMail.From = "your-email-address-here";
    
            // Create array containing file name
            var filesList = new string [] { fileAttachment };
    
            // Attach file and send email
            WebMail.Send(to: customerEmail,
                subject: subjectLine,
                body: "File attached. <br />From: " + customerName,
                filesToAttach: filesList);
        }
        catch (Exception ex ) {
            errorMessage = ex.Message;
        }
    }
    <!DOCTYPE html>
    <html>
    <head>
        <title>Request for Assistance</title>
    </head>
    <body>
      <p>Sorry to hear that you are having trouble, <b>@customerName</b>.</p>
        @if(errorMessage == ""){
            <p><b>@customerName</b>, thank you for your interest.</p>
            <p>An email message has been sent to our customer service
               department with the <b>@fileAttachment</b> file attached.</p>
        }
        else{
            <p><b>The email was <em>not</em> sent.</b></p>
            <p>Please check that the code in the ProcessRequest page has 
               correct settings for the SMTP server name, a user name, 
               a password, and a "from" address.
            </p>
            if(debuggingFlag){
                <p>The following error was reported:</p>
                <p><em>@errorMessage</em></p>
            }
        }
    </body>
    </html>
    
  5. 예제에서 코드에서 다음 전자 메일 관련 설정을 수정합니다.

    • 액세스 권한이 있는 SMTP 서버의 이름으로 설정합니다 your-SMTP-host .
    • SMTP 서버 계정의 사용자 이름으로 설정합니다 your-user-name-here .
    • 을 사용자 고유의 전자 메일 주소로 설정합니다 your-email-address-here . 메시지가 전송되는 전자 메일 주소입니다.
    • SMTP 서버 계정의 암호로 설정합니다 your-account-password .
    • 을 사용자 고유의 전자 메일 주소로 설정합니다 target-email-address-here . (이전과 마찬가지로 일반적으로 다른 사람에게 전자 메일을 보내지만 테스트를 위해 자신에게 보낼 수 있습니다.)
  6. 브라우저에서 SendFile.cshtml 페이지를 실행합니다.

  7. 첨부할 텍스트 파일의 이름, 제목 줄 및 이름을 입력합니다(MyFile.txt).

  8. Submit 단추를 클릭합니다. 이전과 마찬가지로 메시지를 확인하고 첨부된 파일이 포함된 전자 메일 메시지를 보내는 ProcessFile.cshtml 페이지로 리디렉션됩니다.

추가 리소스