C#에서 첨부 파일이 있는 이메일 보내기
이 자습서에서는 C#에서 SMTP 클라이언트를 사용하여 첨부 파일이 있는 이메일을 보내는 방법을 보여줍니다.
NET 및 .NET Core에는 System.Net.Mail 네임스페이스를 통해 이메일을 보내는 기능이 내장되어 있습니다. 가장 쉬운 옵션일 수 있지만 SMTP 서버가 필요합니다.
기존 Gmail 계정을 사용하거나 새 계정을 만들어 SMTP를 통해 이메일을 보내세요. Google의 SMTP 서버를 활용하려면 프로필의 보안 탭에서 보안 수준이 낮은 앱 액세스를 활성화해야 합니다.
C#
에서 첨부 파일이 있는 이메일을 보내는 데 사용할 양식 만들기
먼저 Visual Studio에서 새 Windows Form 응용 프로그램을 만듭니다.
.cs
디자인 파일을 열고 양식 내부에 패널을 만듭니다. Compose
, label1
텍스트가 있는 레이블을 추가하고 가장 오른쪽에 X
를 추가하여 이 양식을 닫습니다.
기능을 추가하려면 레이블을 두 번 클릭하면 label_Click
기능으로 이동합니다. 내부에 다음 줄을 작성하십시오.
this.Dispose();
다음과 같이 5개의 텍스트 상자를 만듭니다.
txtFrom
txtPassword
txtTo
txtTitle
txtBody
txtPassword
텍스트 상자의 passwordChar
속성에 문자(*
또는 •
)를 추가하여 오른쪽 하단 솔루션 탐색기 패널에서 사용자가 입력한 암호를 숨깁니다.
내부에 Send
가 포함된 btnSend
라는 이름의 버튼을 만들고 파란색으로 지정합니다. 이 버튼을 누르면 대상 이메일 주소로 이메일이 전송됩니다.
이제 파일을 보내기 전에 이메일에 첨부할 수 있는 버튼과 선택한 파일 경로를 표시하는 레이블이 하나 더 필요합니다. 따라서 LinkLabel을 만들고 이름을 linkLabel1
로 지정하고 레이블은 lblLocation
으로 지정하겠습니다.
솔루션 탐색기에서 LinkLabel 이미지와 Attach File
텍스트를 할당합니다. 이제 .cs
양식 디자인 파일에서 이 LinkLabel을 두 번 클릭하면 이 버튼 클릭 기능 코드로 이동합니다.
이 함수 내에서 대화 상자를 열어야 합니다. 그러나 그 전에 OpenFileDialog를 양식 디자인으로 끌어다 놓고 Attach File
버튼에 연결해야 합니다.
linkLabel1_linkClicked
함수 안에 다음 코드를 작성하여 대화 상자를 열고 lblLocation
에 표시할 선택한 파일 경로를 연결합니다.
openFileDialog1.ShowDialog();
lblLocation.Text = openFileDialog1.FileName;
출력:
이제 모든 것이 준비되었으므로 보낸 사람의 이메일과 비밀번호, 받는 사람의 이메일, 메시지, 첨부 파일을 수집합니다. SMTP 클라이언트를 사용하여 이메일을 보내는 기능 코드를 작성해 보겠습니다.
양식 디자인에서 만든 보내기
버튼을 두 번 클릭합니다. button1_Click
함수 내에서 다음 작업을 수행합니다.
C#
에 첨부된 이메일 보내기
시작하려면 try-catch
문 블록을 만듭니다. 프로그램 실행은 try
블록을 시도하고 오류가 발생하면 자동으로 예외를 포착합니다.
try {
} catch () {
}
try
블록 내에서 mail
이라는 데이터 유형의 MailMessage 변수를 선언하고 기본 생성자 MailMessage()
를 초기화하여 이메일 전송 프로세스에서 해당 속성을 사용합니다.
MailMessage mail = new MailMessage();
이제 데이터 유형 SmtpClient의 다른 변수 smtp
를 선언하고 문자열 호스트가 필요한 SmtpClient의 새 인스턴스를 초기화합니다. Gmail 간에 메일을 교환해야 하기 때문에 smtp.gmail.com
을 전달합니다.
SmtpClient smtp = new SmtpClient("smtp.gmail.com");
그런 다음 MailMessage 클래스의 .From
, .To.Add()
, .Subject
및 .Body
를 사용하고 텍스트 상자의 값을 할당합니다.
mail.From = new MailAddress(txtFrom.Text);
mail.To.Add(txtTo.Text);
mail.Subject = txtTitle.Text;
mail.Body = txtBody.Text;
그런 다음 선택한 파일을 메일에 첨부해야 합니다. System.Net.Mail.Attachment
데이터 유형의 변수 attachment
를 생성하고 선택한 파일의 경로를 할당합니다.
첨부 파일을 전달하여 .Attachments.Add()
메서드를 사용하여 메일에 파일을 첨부합니다.
System.Net.Mail.Attachment attachment;
attachment = new System.Net.Mail.Attachment(lblLocation.Text);
mail.Attachments.Add(attachment);
Gmail에서 사용하는 포트, 보낸 사람의 이메일 주소, 비밀번호를 비롯한 일부 값을 SMTP에 할당해야 합니다. 데이터를 안전하게 전송하려면 SSL(Secure Sockets Layer)을 활성화해야 합니다.
그런 다음 Send()
메서드를 호출하고 메일을 전달합니다. 메일을 보낸 후 정보 아이콘과 확인 버튼이 있는 메시지를 표시할 메시지 상자를 만들어 보겠습니다.
smtp.Port = 587;
smtp.Credentials = new System.Net.NetworkCredential(txtFrom.Text, txtPassword.Text);
smtp.EnableSsl = true;
smtp.Send(mail);
MessageBox.Show("Mail has been sent successfully!", "Email Sent", MessageBoxButtons.OK,
MessageBoxIcon.Information);
이제 catch
블록에는 다음 코드가 포함됩니다. 이 코드 줄은 발생하는 모든 예외를 포착하여 MessageBox에 출력합니다.
catch (Exception ex) {
MessageBox.Show(ex.Message);
}
완전한 소스 코드
using System;
using System.Net.Mail;
namespace send_email_with_attachment {
public partial class Form1 : Form {
public Form1() {
InitializeComponent();
}
private void label1_Click(object sender, EventArgs e) {
this.Dispose();
}
private void label5_Click(object sender, EventArgs e) {}
private void label7_Click(object sender, EventArgs e) {}
private void button1_Click(object sender, EventArgs e) {
try {
MailMessage mail = new MailMessage();
SmtpClient smtp = new SmtpClient("smtp.gmail.com");
mail.From = new MailAddress(txtFrom.Text);
mail.To.Add(txtTo.Text);
mail.Subject = txtTitle.Text;
mail.Body = txtBody.Text;
System.Net.Mail.Attachment attachment;
attachment = new System.Net.Mail.Attachment(lblLocation.Text);
mail.Attachments.Add(attachment);
smtp.Port = 587;
smtp.Credentials = new System.Net.NetworkCredential(txtFrom.Text, txtPassword.Text);
smtp.EnableSsl = true;
smtp.Send(mail);
MessageBox.Show("Mail has been sent successfully!", "Email Sent", MessageBoxButtons.OK,
MessageBoxIcon.Information);
} catch (Exception ex) {
MessageBox.Show(ex.Message);
}
}
private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) {
openFileDialog1.ShowDialog();
lblLocation.Text = openFileDialog1.FileName;
}
private void txtFrom_TextChanged(object sender, EventArgs e) {}
}
}
출력:
보내기를 누르면 다음 메시지 상자가 나타납니다.
I'm a Flutter application developer with 1 year of professional experience in the field. I've created applications for both, android and iOS using AWS and Firebase, as the backend. I've written articles relating to the theoretical and problem-solving aspects of C, C++, and C#. I'm currently enrolled in an undergraduate program for Information Technology.
LinkedIn