MailKit kullanarak e-posta gönderme
çevre
- .NET
-
- .NET 5.0
- MailKit
-
- 2.11.1
İlk başta
Daha önce, e-posta göndermek için bir sınıf olan smtpClient standart olarak dahil edildi, ancak şimdi belirtim dışı nedeniyle kullanım dışı.
Bu, .NET'in standart bir posta kitaplığı olmadığı anlamına gelir, bu nedenle üçüncü taraf bir kitaplık kullanırsınız.
Şu anda, ana kütüphane olarak "MailKit" var, bu yüzden bu zamanı kullanarak bir e-posta göndermek istiyorum.
MailKit ile Tanışıyor
Visual Studio 2019'u başlatın ve yeni bir konsol uygulaması (.NET) projesi oluşturun. .NET kullanıyorsanız, proje türünde biraz özgürlüğe sahip olursunuz, bu yüzden ayrıntıları önceden bileceğim.
Projeyi açtığınızda, Çözüm Gezgini'nden Bağımlılıklar'ı sağ tıklatın ve NuGet Paketlerini Yönet'i seçin.
Aşağıdaki listede MailKit'i görüntülemek için Gözat sekmesini tıklatın ve arama alanına MailKit yazın.
Listeden MailKit'i seçin, en son sürümün seçili olduğunu doğrulayın ve Yükle düğmesini tıklatın.
Tamam düğmesini tıklatın.
Paketin MailKit içerdiğini doğrulayın.
program
Aşağıda e-posta göndermek için minimum kod yer alıyor.
Kodunuzun ilk yarısında e-postalarınız için ihtiyacınız olan bilgileri tanımlarsınız ve bu değerleri ikinci yarıda posta göndermek için kullanırsınız. Kodun ikinci yarısını, ilk yarının tanımını gerektiği gibi değiştirerek sabit bir şekilde kullanabilmelisiniz.
using MailKit.Net.Smtp;
using MailKit.Security;
using MimeKit;
using MimeKit.Text;
namespace MailKitSend
{
class Program
{
static void Main(string[] args)
{
// メールの送信に必要な情報
var smtpHostName = "[SMTP サーバー名]";
var smtpPort = 587; // or 25
var smtpAuthUser = "[認証ユーザー名]";
var smtpAuthPassword = "[認証パスワードまたはアプリパスワード]";
// メールの内容
var from = "[送信者メールアドレス]";
var to = "[送り先メールアドレス]";
var subject = "テストメールの件名です。";
var body = "テストメールの本文です。\n改行です。";
var textFormat = TextFormat.Text;
// MailKit におけるメールの情報
var message = new MimeMessage();
// 送り元情報
message.From.Add(MailboxAddress.Parse(from));
// 宛先情報
message.To.Add(MailboxAddress.Parse(to));
// 表題
message.Subject = subject;
// 内容
var textPart = new TextPart(textFormat)
{
Text = body,
};
message.Body = textPart;
using var client = new SmtpClient();
// SMTPサーバに接続
client.Connect(smtpHostName, smtpPort, SecureSocketOptions.Auto);
if (string.IsNullOrEmpty(smtpAuthUser) == false)
{
// SMTPサーバ認証
client.Authenticate(smtpAuthUser, smtpAuthPassword);
}
// 送信
client.Send(message);
// 切断
client.Disconnect(true);
}
}
}
E-posta göndermek için gereken bilgileri tanımlama
var smtpHostName = "[SMTP サーバー名]";
var smtpPort = 587; // or 25
var smtpAuthUser = "[認証ユーザー名]";
var smtpAuthPassword = "[認証パスワードまたはアプリパスワード]";
Bu, kullandığınız posta sunucusuna (SMTP sunucusu) bağlı olarak farklı değerler ayarladığınız yerdir. Bu makalenin sonunda ayarladığım değerlerden birkaçını açıklamak istiyorum, ancak temel olarak posta sunucumun sitesine bakın.
Başlangıçta, appsettigs.json vb.
E-postanın içeriğini tanımlama
var from = "[送信者メールアドレス]";
var to = "[送り先メールアドレス]";
var subject = "テストメールの件名です。";
var body = "テストメールの本文です。\n改行です。";
var textFormat = TextFormat.Text;
Normalde postacı vb.
Son posta sistemlerinde kılık değiştirerek gönderilemeyeceğinden, temel olarak e-posta hesabınızla aynı e-posta adresini ayarlarsınız.
TextFormat
metin veya HTML olarak gönderilebilir. HTML olarak gönderirseniz, html etiketlerini gövde kısmına katıştırın.
E-postaları işlemek için gereken bilgileri ayarlama
// MailKit におけるメールの情報
var message = new MimeMessage();
// 送り元情報
message.From.Add(MailboxAddress.Parse(from));
// 宛先情報
message.To.Add(MailboxAddress.Parse(to));
// 表題
message.Subject = subject;
// 内容
var textPart = new TextPart(textFormat)
{
Text = body,
};
message.Body = textPart;
Temel olarak, yukarıda tanımlanan değeri ayarlamanın bir biçimidir.
Ayrıca birden çok From ve To ayarlayabilirsiniz.
Örneğe dahil değildir, ancak CC ve BCC'yi de içerebilir. Eklemek istiyorsanız, From veya To ile aynı şekilde ekleyin:
message.Cc.Add(MailboxAddress.Parse(cc));
message.Bcc.Add(MailboxAddress.Parse(bcc));
E-postanın alıcısı destekleniyorsa, gönderenin veya hedefin görünen adını da değiştirebilirsiniz. Bu durumda, kodu aşağıdaki gibi değiştirin:
message.From.Add(new MailboxAddress("送信者の名前", from));
message.To.Add(new MailboxAddress("送り先の名前", to));
E-posta gönder
using var client = new SmtpClient();
// SMTPサーバに接続
client.Connect(smtpHostName, smtpPort, SecureSocketOptions.Auto);
if (string.IsNullOrEmpty(smtpAuthUser) == false)
{
// SMTPサーバ認証
client.Authenticate(smtpAuthUser, smtpAuthPassword);
}
// 送信
client.Send(message);
// 切断
client.Disconnect(true);
E-postanızı tanımlamayı bitirdiğinizde, e-postayı göndermeyi de tamamlarsınız.
Gönderim SmtpClient
sınıfın bir örneğinde yapılır. Dispose
Hedef using var
olduğundan, otomatik olarak serbest bırakılabilmesi için bildirilebilir.
C# 8.0 yazmanın bir yolu olduğundan, lütfen using
önceki sürümler için normal açıklamaya geçin.
SmtpClient.Connect
yöntemiyle SMTP sunucusuna kullandır. Bazı STMP sunucuları SSL veya TLS bağlantıları gerektirir, ancak SecureSocketOptions.Auto
belirtme genellikle iyidir.
SMTP sunucusu kimlik doğrulaması gerektiriyorsa, SmtpClient.Authenticate
yöntemde bir kullanıcı adı ve parola belirtin.
Bağlantı SmtpClient.Send
tamamlandığında, yöntemde bir e-posta gönderin.
Her şey yapıldığında, SmtpClient.Disconnect
yöntemle bağlantısını kesin.
Bu ipuçlarının tüm bu işlemleri zaman uyumlu işlemler olarak gerçekleştirdiğini, ancak her yöntemin xxxxxAsync adı altında zaman uyumsuz işleme de gerçekleştirebileceğini unutmayın. Gerektiği gibi kullanın.
Ekler nasıl gönderilir
Ek göndermek MimeMessage.Body
için, ayarlanan değeri aşağıdaki gibi değiştirin:
// using System.IO; 必要
var filePath = @"[ローカルに保存されているファイルパス].jpg"; // 例として JPEG ファイル指定
var buffer = File.ReadAllBytes(filePath);
var builder = new BodyBuilder();
// テキストか HTML で設定するプロパティが異なる
if (textFormat == TextFormat.Plain)
{
builder.TextBody = body;
}
else
{
builder.HtmlBody = body;
}
// 添付ファイルを追加
builder.Attachments.Add(Path.GetFileName(filePath), buffer, new ContentType("image", "jpg"));
message.Body = builder.ToMessageBody();
Yukarıdaki kodda, yerel olarak depolanan dosya bir ektir, ancak veriler herhangi bir şey olabilir, çünkü yalnızca bir bayt dizisi veya Akış olması gerekir. Örnek olarak bir JPEG dosyası gönderme.
MimeMessage.Body
olarak oluşturmak için ayarladığınız BodyBuilder
değer.
Gövde metni TextPart
' den farklıdır ve ayarlanan özellikler metin veya HTML olsun farklıdır.
Her ikisini de ayarlasanız bile ilk ayarın silineceğini lütfen unutmayın.
Ek BodyBuilder.Attachments
özelliğe eklenir.
Bağımsız değişkenler "ek adı", "ek verileri" ve "içerik türü (MIME)"dir.
Uzantı eklemediğiniz sürece ekin adının alıcı taraf tarafından tanımlanamayacaklarını unutmayın.
ContentType
ayarladığınız değer dosya biçimine bağlı olarak değişir.
İnternette "dosya formatı MIME" etrafında arama yaptığınızda, kombinasyonu görebilirsiniz.
BodyBuilder.ToMessageBody
Son olarak, yöntemi çağırın ve MimeMessage.Body
olarak ayarlayın.
SMTP sunucusu belirtme hakkında
Posta göndermek için smtp sunucusunun, kullandığınız posta sunucusuna bağlı olarak farklı ayarları vardır. Aşağıda bir örnek verilmiştir, bu nedenle böyle bir şey yoksa, lütfen kullandığınız sunucunun yardımını kontrol edin.
Ayrıca, bilgiler Nisan 2021 itibariyle olduğundan, bilgiler şu anda değişmiş olabilir.
Posta hizmeti kimlikİki | adımlı doğrulama şifrelemesi | kullanıyorsanız | SMTP sunucusu bağlantı noktası | doğrulaması | |
---|---|---|---|---|---|
Outlook.com Bölüm 1 | smtp.office365.com | 587 | Kullanıcı adı ve parola | ?? | STARTTLS |
Outlook.com Bölüm 2 | smtp-mail.outlook.com | 587 | Kullanıcı adı ve parola | Uygulama parolasını alın ve parola olarak ayarlayın | STARTTLS |
Gmail | smtp.gmail.com | 465(SSL) veya 587(TLS) | Kullanıcı adı ve parola | Uygulama parolasını alın ve parola olarak ayarlayın | SSL veya TLS veya STARTTLS |
Yahoo! Posta | smtp.mail.yahoo.co.jp | 465 | Kullanıcı adı ve parola | ?? | Bilinmeyen tür |
OCN | smtp.ocn.ne.jp | 465 | Kullanıcı adı ve parola | ?? | SSL veya TLS |