IMAP, POP3, SMTP용 오픈소스 .NET 라이브러리
첨부 파일이 있는 메시지 생성, PGP/MIME로 메시지 암호화/복호화를 위한 무료 C# .NET 라이브러리.
MailKit 시작하기
MailKit을 설치하는 가장 쉬운 방법은 NuGet을 사용하는 것입니다. Visual Studio의 패키지 관리자 콘솔에서 사용하려면 다음 명령어를 입력하세요.
NuGet을 통해 Mailkit 설치
Install-Package MailKit
GitHub를 통해 Mailkit 설치
git clone --recursive https://github.com/jstedfast/MailKit.git
.NET을 통해 새 메시지 만들기
오픈 소스 API MailKit 라이브러리를 사용하면 소프트웨어 개발자가 몇 가지 간단한 명령으로 MIME 메시지를 작성할 수 있습니다. TextPart는 텍스트 미디어 유형이 있는 리프 노드 MIME 부분입니다. TextPart 생성자의 첫 번째 인수는 미디어 하위 유형(이 경우 일반)을 지정합니다. 여러분이 잘 알고 있는 또 다른 미디어 하위 유형은 HTML 하위 유형입니다. MIME 부분의 문자열 내용을 모두 가져오고 설정하는 가장 쉬운 방법은 Text 속성입니다.
오픈 소스 API MailKit 라이브러리를 사용하면 소프트웨어 개발자가 몇 가지 간단한 명령으로 MIME 메시지를 작성할 수 있습니다. TextPart는 텍스트 미디어 유형이 있는 리프 노드 MIME 부분입니다. TextPart 생성자의 첫 번째 인수는 미디어 하위 유형(이 경우 일반)을 지정합니다. 여러분이 잘 알고 있는 또 다른 미디어 하위 유형은 HTML 하위 유형입니다. MIME 부분의 문자열 내용을 가져오고 설정하는 가장 쉬운 방법은 Text 속성입니다.
C#을 사용하여 무료로 메시지 생성 및 보내기
var message = new MimeMessage();
message.From.Add(new MailboxAddress("fred", "This email address is being protected from spam-bots. You need JavaScript enabled to view it."));
message.To.Add(new MailboxAddress("frans", "This email address is being protected from spam-bots. You need JavaScript enabled to view it."));
message.Subject = "FileFormat ";
message.Body = new TextPart("plain")
{
Text = "File Format Developer Guide"
};
using (var client = new SmtpClient())
{
// For demo-purposes,
client.ServerCertificateValidationCallback = (s, c, h, e) => true;
client.Connect("smtp.test.com", 587, false);
// Note: only needed if the SMTP server requires authentication
client.Authenticate("frans", "password");
client.Send(message);
client.Disconnect(true);
}
.NET API를 사용하여 첨부 파일이 있는 메시지 생성
MailKit API는 .NET 애플리케이션 내부에 첨부 파일이 있는 메시지를 생성하기 위한 기능을 제공합니다. 첨부 파일은 다른 MimePart와 같습니다. 주요 차이점은 인라인 대신 첨부 파일의 값을 보유하거나 Content-Disposition 헤더가 전혀 없는 content-disposition 헤더가 포함되어 있다는 것입니다. 텍스트/HTML 및 텍스트/일반 버전의 메시지를 모두 보내려면 각 부분에 대해 TextPart를 만든 다음 이를 multipart/alternative에 추가해야 합니다.
C#을 통해 첨부 파일이 있는 메시지 만들기
var message = new MimeMessage ();
message.From.Add (new MailboxAddress ("Joey", "joey@friends.com"));
message.To.Add (new MailboxAddress ("Alice", "alice@wonderland.com"));
message.Subject = "How you doin?";
// create our message text, just like before (except don't set it as the message.Body)
var body = new TextPart ("plain") {
Text = @"Hey Alice,
What are you up to this weekend? Monica is throwing one of her parties on
Saturday and I was hoping you could make it.
Will you be my +1?
-- Joey
"
};
// create an image attachment for the file located at path
var attachment = new MimePart ("image", "gif") {
Content = new MimeContent (File.OpenRead (path), ContentEncoding.Default),
ContentDisposition = new ContentDisposition (ContentDisposition.Attachment),
ContentTransferEncoding = ContentEncoding.Base64,
FileName = Path.GetFileName (path)
};
// now create the multipart/mixed container to hold the message text and the
// image attachment
var multipart = new Multipart ("mixed");
multipart.Add (body);
multipart.Add (attachment);
// now set the multipart/mixed as the message body
message.Body = multipart;
PGP/MIME로 메시지 암호화/복호화
MailKit 라이브러리는 .NET 애플리케이션 내에서 PGP/MIME로 이메일 메시지를 암호화하는 기능을 제공합니다. PGP/MIME는 다중 부분/암호화된 MIME 유형이 있는 MIME 부분을 사용하여 암호화된 데이터를 캡슐화합니다. 메시지를 암호화하려면 모든 수신자에 대해 MailboxAddress 대신 SecureMailboxAddress를 사용하는 것이 항상 더 나은 접근 방식입니다. 이렇게 하면 사용자가 각 수신자의 PGP 키에 대한 고유한 지문을 지정할 수 있습니다.
C#을 통해 PGP/MIME로 메시지 암호화
public void Encrypt (MimeMessage message)
{
// encrypt our message body using our custom GnuPG cryptography context
using (var ctx = new MyGnuPGContext ()) {
// Note: this assumes that each of the recipients has a PGP key associated
// with their email address in the user's public keyring.
//
// If this is not the case, you can use SecureMailboxAddresses instead of
// normal MailboxAddresses which would allow you to specify the fingerprint
// of their PGP keys. You could also choose to use one of the Encrypt()
// overloads that take a list of PgpPublicKeys.
message.Body = MultipartEncrypted.Encrypt (ctx, message.To.Mailboxes, message.Body);
}
}
PGP/MIME 메시지 해독
public MimeEntity Decrypt (MimeMessage message)
{
if (message.Body is MultipartEncrypted) {
// the top-level MIME part of the message is encrypted using PGP/MIME
var encrypted = (MultipartEncrypted) entity;
return encrypted.Decrypt ();
} else {
// the top-level MIME part is not encrypted
return message.Body;
}
}