C# 发送邮件
最后修改于 2023 年 7 月 5 日
C# 发送邮件教程展示了如何使用 System.Net.Mail 和 Mailkit 在 C# 中发送简单的电子邮件。
SMTP
简单邮件传输协议 (SMTP) 是一种用于电子邮件传输的互联网标准通信协议。邮件服务器和客户端使用 SMTP 发送和接收邮件。
在 C# 中,我们可以使用 System.Net.Mail 和 Mailkit 发送电子邮件。 内置的 System.Net.Mail 可以用于简单的解决方案,而 Mailkit 更适合复杂的任务。
注意: Gmail 不适合测试邮件。 我们应该使用在线服务,例如 Mailtrap 或 Mailgun,或者使用 Webhosting 公司提供的 SMTP 服务器。
在本文中,我们将使用 Maitrap 服务来测试我们的示例。 Mailtrap 为个人测试提供免费计划。
C# 简单邮件示例
在第一个示例中,我们发送一条简单的消息。
using System.Net.Mail;
using System.Net;
var from = "from@example.com";
var to = "to@example.com";
var subject = "Test mail";
var body = "Test body";
var username = "username"; // get from Mailtrap
var password = "password"; // get from Mailtrap
var host = "smtp.mailtrap.io";
var port = 2525;
var client = new SmtpClient(host, port)
{
Credentials = new NetworkCredential(username, password),
EnableSsl = true
};
client.Send(from, to, subject, body);
Console.WriteLine("Email sent");
电子邮件使用 SmtpClient 发送。
var from = "from@example.com"; var to = "to@example.com"; var subject = "Test mail"; var body = "Test body";
这些是电子邮件详细信息。
var username = "username"; // get from Mailtrap var password = "password"; // get from Mailtrap
我们使用从 Mailtrap 服务获得的用户名和密码。
var host = "smtp.mailtrap.io"; var port = 2525;
这是 SMTP 主机和端口。
var client = new SmtpClient(host, port)
{
Credentials = new NetworkCredential(username, password),
EnableSsl = true
};
创建一个 SmtpClient,通过它发送电子邮件。
client.Send(from, to, subject, body);
Send 方法将指定的电子邮件消息发送到 SMTP 服务器以进行传递。 消息发送者、收件人、主题和消息正文是字符串值。
C# 电子邮件 JSON 配置
在下一个示例中,我们将展示如何从 JSON 配置文件中读取电子邮件详细信息。
$ dotnet add package Microsoft.Extensions.Configuration.Json
我们添加 Microsoft.Extensions.Configuration.Json 包。
{
"Smtp": {
"Host": "smtp.mailtrap.io",
"Port": 2525,
"Username": "username",
"Password": "password"
}
}
这是 JSON 配置文件。
using System.Net.Mail;
using System.Net;
using Microsoft.Extensions.Configuration;
var from = "from@example.com";
var to = "to@example.com";
var subject = "Test mail";
var body = "Test body";
var builder = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("email.json");
var config = builder.Build();
var host = config["Smtp:Host"];
var port = Convert.ToInt32(config["Smtp:Port"]);
var username = config["Smtp:Username"];
var password = config["Smtp:Password"];
var client = new SmtpClient(host, port);
client.Credentials = new NetworkCredential(username, password);
client.EnableSsl = true;
client.Send(from, to, subject, body);
Console.WriteLine("Email sent");
在该示例中,主机、端口、用户名和密码是从 JSON 配置文件中读取的。
C# HTML 电子邮件
在下一个示例中,我们发送 HTML 电子邮件。
using System.Net.Mail;
using System.Net;
var from = new MailAddress("from@example.com");
var to = new MailAddress("to@example.com");
var subject = "HTML email";
var body = "<p>An old <b>falcon</b> in the sky.</p>";
var username = "username"; // get from Mailtrap
var password = "password"; // get from Mailtrap
var host = "smtp.mailtrap.io";
var port = 2525;
var client = new SmtpClient(host, port);
client.Credentials = new NetworkCredential(username, passowrd);
client.EnableSsl = true;
var mail = new MailMessage();
mail.Subject = subject;
mail.From = from;
mail.To.Add(to);
mail.Body = body;
mail.IsBodyHtml = true;
client.Send(mail);
Console.WriteLine("Email sent");
我们使用 MailMessage 发送 HTML 电子邮件。
var mail = new MailMessage(); mail.Subject = subject; mail.From = from; mail.To.Add(to); mail.Body = body; mail.IsBodyHtml = true; client.Send(mail);
现在,电子邮件详细信息已设置为 MailMessage。 IsBodyHtml 指示正文是 HTML 格式。
C# 电子邮件附件
在下一个示例中,我们将一个文本文件附加到电子邮件中。
sky blud rock water poem
我们将此文本文件作为附件发送。
using System.Net.Mail;
using System.Net;
var from = new MailAddress("from@example.com");
var to = new MailAddress("to@example.com");
var subject = "Email with attachment";
var body = "Email body";
var username = "username"; // get from Mailtrap
var password = "password"; // get from Mailtrap
var host = "smtp.mailtrap.io";
var port = 2525;
var client = new SmtpClient(host, port);
client.Credentials = new NetworkCredential(username, passowrd);
client.EnableSsl = true;
var mail = new MailMessage();
mail.Subject = subject;
mail.From = from;
mail.To.Add(to);
mail.Body = body;
var attachment = new Attachment("words.txt");
mail.Attachments.Add(attachment);
client.Send(mail);
Console.WriteLine("Email sent");
我们使用 Attachments 属性和 Attachment 类来发送带有电子邮件的附件。
C# 使用 Mailkit 发送简单邮件
现在,我们使用 Mailkit 库发送一个简单的邮件。
$ dotnet add package Mailkit
我们将 Mailkit 包添加到项目中。
using MailKit.Net.Smtp;
using MailKit.Security;
using MimeKit;
var host = "smtp.mailtrap.io";
var port = 2525;
var username = "username"; // get from Mailtrap
var password = "password"; // get from Mailtrap
var message = new MimeMessage();
message.From.Add(new MailboxAddress("John Doe", "john.doe@example.com"));
message.To.Add(new MailboxAddress("Jane Doe", "jane.doe@example.com"));
message.Subject = "Test subject";
var bodyBuilder = new BodyBuilder();
bodyBuilder.TextBody = "Test body";
message.Body = bodyBuilder.ToMessageBody();
var client = new SmtpClient();
client.Connect(host, port, SecureSocketOptions.Auto);
client.Authenticate(username, password);
client.Send(message);
client.Disconnect(true);
Console.WriteLine("Email sent");
我们使用 MimeMessage、BodyBuilder 和 SmtpClient 类来生成电子邮件。 电子邮件使用 Send 发送。
C# 使用 Mailkit 发送 HTML 电子邮件
在下一个示例中,我们发送 HTML 电子邮件。
using MailKit.Net.Smtp;
using MailKit.Security;
using MimeKit;
var host = "smtp.mailtrap.io";
var port = 2525;
var username = "username"; // get from Mailtrap
var password = "password"; // get from Mailtrap
var message = new MimeMessage();
message.From.Add(new MailboxAddress("John Doe", "john.doe@example.com"));
message.To.Add(new MailboxAddress("Jane Doe", "jane.doe@example.com"));
message.Subject = "Test subject";
var bodyBuilder = new BodyBuilder();
bodyBuilder.HtmlBody = "<p>An old <b>falcon</b> in the sky.</p>";
message.Body = bodyBuilder.ToMessageBody();
var client = new SmtpClient();
client.Connect(host, port, SecureSocketOptions.Auto);
client.Authenticate(username, password);
client.Send(message);
client.Disconnect(true);
Console.WriteLine("Email sent");
HTML 正文使用 HtmlBody 属性添加。
来源
在本文中,我们已经用 C# 发送了简单的电子邮件。
作者
列出所有 C# 教程。