Inviare messaggi di posta elettronica tramite MailKit
ambiente
- .NET
-
- .NET 5.0
- MailKit
-
- 2.11.1
dapprima
In precedenza, smtpClient, una classe per l'invio di messaggi di posta elettronica, era inclusa come standard, ma ora è obsoleta a causa di specifiche non specifiche.
Ciò significa che .NET non dispone di una libreria di mailing standard, pertanto si utilizzerà una libreria di terze parti.
Attualmente, c'è "MailKit" come libreria mainstream, quindi vorrei inviare un'e-mail usando questa volta.
Presentazione di MailKit
Avvia Visual Studio 2019 e crea un nuovo progetto di app console (.NET). Se si utilizza .NET, si avrà un po ' di libertà nel tipo di progetto, quindi ne conoscerò i dettagli.
Quando si apre il progetto, fare clic con il pulsante destro del mouse su Dipendenze da Esplora soluzioni e scegliere Gestisci pacchetti NuGet.
Fare clic sulla scheda Sfoglia e digitare MailKit nel campo di ricerca per visualizzare MailKit nell'elenco seguente.
Selezionare MailKit dall'elenco, verificare che sia selezionata l'ultima versione e quindi fare clic sul pulsante Installa.
Fare clic sul pulsante OK.
Verificare che il pacchetto contenga MailKit.
programma
Di seguito è riportato il codice minimo per l'invio di e-mail.
Definisci le informazioni necessarie per le tue e-mail nella prima metà del codice e usa tali valori per inviare posta nella seconda metà. Dovresti essere in grado di utilizzare la seconda metà del codice in modo fisso semplicemente modificando la definizione della prima metà in base alle esigenze.
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);
}
}
}
Definire le informazioni necessarie per inviare un messaggio di posta elettronica
var smtpHostName = "[SMTP サーバー名]";
var smtpPort = 587; // or 25
var smtpAuthUser = "[認証ユーザー名]";
var smtpAuthPassword = "[認証パスワードまたはアプリパスワード]";
È qui che si impostano valori diversi a seconda del server di posta (server SMTP) utilizzato. Vorrei spiegare alcuni dei valori che sto impostando alla fine di questo articolo, ma fondamentalmente vedere il sito del mio server di posta.
Originariamente, è scritto in appsettigs.json, ecc., ma è quindi ridondante come Suggerimenti.
Definire il contenuto di un messaggio di posta elettronica
var from = "[送信者メールアドレス]";
var to = "[送り先メールアドレス]";
var subject = "テストメールの件名です。";
var body = "テストメールの本文です。\n改行です。";
var textFormat = TextFormat.Text;
Penso che questa parte sia la parte corrispondente così com'è se normalmente usi mailer, ecc.
Poiché non è disponibile per l'invio da sotto mentite spoglie nei recenti sistemi di posta, fondamentalmente si imposta lo stesso indirizzo e-mail del proprio account di posta elettronica.
TextFormat
può essere inviato in testo o HTML. Se lo invii in HTML, incorpora tag html nella parte del corpo.
Impostare le informazioni necessarie per elaborare l'invio di messaggi di posta elettronica
// 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;
Fondamentalmente, è una forma di impostazione del valore definito sopra.
È inoltre possibile impostare più da e a.
Non è incluso nel campione, ma può anche includere CC e BCC. Se si desidera includerlo, aggiungerlo allo stesso modo di Da o A come segue:
message.Cc.Add(MailboxAddress.Parse(cc));
message.Bcc.Add(MailboxAddress.Parse(bcc));
È inoltre possibile modificare il nome visualizzato del mittente o della destinazione se il destinatario dell'e-mail è supportato. In tal caso, modificare il codice come segue:
message.From.Add(new MailboxAddress("送信者の名前", from));
message.To.Add(new MailboxAddress("送り先の名前", to));
Inviare messaggi di posta elettronica
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);
Al termine della definizione della posta elettronica, è possibile inviarla.
SmtpClient
L'invio viene eseguito in un'istanza della classe. Dispose
Poiché è using var
la destinazione, viene dichiarata in modo che possa essere rilasciata automaticamente.
Poiché si tratta di un modo di scrivere C # 8.0, passare alla using
descrizione normale per le versioni precedenti.
SmtpClient.Connect
al server SMTP. Alcuni server STMP richiedono connessioni SSL o TLS, ma la SecureSocketOptions.Auto
specifica di solito va bene.
Se il server SMTP richiede l'autenticazione, SmtpClient.Authenticate
specificare un nome utente e una password nel metodo .
Al termine della SmtpClient.Send
connessione, inviare un messaggio di posta elettronica nel metodo .
Quando tutto è fatto, SmtpClient.Disconnect
scollegalo con il metodo.
Si noti che tutti questi suggerimenti eseguono tutte queste operazioni come operazioni sincrone, ma ogni metodo può anche eseguire l'elaborazione asincrona sotto il nome xxxxxAsync. Utilizzare secondo necessità.
Come inviare allegati
Per inviare MimeMessage.Body
un allegato, modificare il valore impostato su come segue:
// 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();
Nel codice precedente, il file archiviato localmente è un allegato, ma i dati possono essere qualsiasi cosa perché deve essere solo una matrice di byte o Stream. Invio di un file JPEG come esempio.
MimeMessage.Body
Valore impostato per la BodyBuilder
compilazione come .
Il corpo TextPart
del testo differisce da e le proprietà a cui è impostato sono diverse, sia che si tratti di testo o HTML.
Si prega di notare che anche se si impostano entrambi, la prima impostazione verrà cancellata.
L'allegato BodyBuilder.Attachments
viene aggiunto alla proprietà .
Gli argomenti sono "nome allegato", "dati allegati" e "tipo di contenuto (MIME)".
Si noti che il nome dell'allegato potrebbe non essere identificato dalla parte ricevente a meno che non si aggiungo un'estensione.
ContentType
il valore impostato su varierà a seconda del formato di file.
Se cerchi su Internet intorno al "formato di file MIME", vedrai la combinazione.
BodyBuilder.ToMessageBody
Infine, chiamare il metodo e impostarlo su MimeMessage.Body
.
Informazioni sulla specifica di un server SMTP
Il server SMTP per l'invio della posta ha impostazioni diverse a seconda del server di posta utilizzato. Di seguito è riportato un esempio, quindi se non esiste una cosa del genere, controlla l'aiuto del server che stai utilizzando.
Inoltre, poiché le informazioni sono ad aprile 2021, le informazioni potrebbero essere cambiate al momento.
utilizza la crittografia di verifica inAutenticazione della porta | server SMTP del servizio | di | posta Se si | due | passaggi |
---|---|---|---|---|---|
Outlook.com parte 1 | smtp.office365.com | 587 | Nome utente e password | ?? | STARTTLS |
Outlook.com parte 2 | smtp-mail.outlook.com | 587 | Nome utente e password | Ottenere la password dell'app e impostarla sulla password | STARTTLS |
Gmail | smtp.gmail.com | 465(SSL) o 587(TLS) | Nome utente e password | Ottenere la password dell'app e impostarla sulla password | SSL o TLS o STARTTLS |
Yahoo! Mail | smtp.mail.yahoo.co.jp | 465 | Nome utente e password | ?? | Tipo sconosciuto |
OCN | smtp.ocn.ne.jp | 465 | Nome utente e password | ?? | SSL o TLS |