我正在为我的项目使用Mailkit库(Imap).
我可以通过SmtpClient轻松发送新消息.
目前我正在挖掘如何回复特定邮件.是否可以为该回复邮件添加更多收件人?
@jstedfast感谢精彩的:)
我使用SmtpClient到目前为止使用ASP.NET MVC 5.为了测试本地系统上的电子邮件发送功能,我正在使用 client.DeliveryMethod = SmtpDeliveryMethod.SpecifiedPickupDirectory;
现在,我想在ASP.NET Core中做同样的事情,直到现在还没有实现SmtpClient类.所有搜索结果都在MailKit上结束.我使用了他们的发送邮件代码,它与gmail一起正常工作.
我不想每次都发送测试电子邮件,在我的项目中可能有很多场景我需要发送电子邮件.如何使用MailKit的本地电子邮件发送功能.任何链接或小源代码都会有所帮助.谢谢
我正在使用 Mailkit 库发送电子邮件。这是这样做的代码:
public async Task SendAsync(IdentityMessage message)
{
if (message == null)
return;
LinkedResource inline = new LinkedResource(System.Web.Hosting.HostingEnvironment.MapPath($"~/Images/logo.png"))
{
ContentId = Guid.NewGuid().ToString(),
ContentType = new ContentType("image/png")
{
Name = "logo.png"
}
};
var htmlBody = message.Body.Replace("{CID:LOGO}", String.Format("cid:{0}", inline.ContentId));
AlternateView avHtml = AlternateView.CreateAlternateViewFromString(htmlBody, null, MediaTypeNames.Text.Html);
avHtml.LinkedResources.Add(inline);
using (MailMessage objMailMsg = new MailMessage())
{
objMailMsg.AlternateViews.Add(avHtml);
objMailMsg.Body = htmlBody;
objMailMsg.Subject = message.Subject;
objMailMsg.BodyEncoding = Encoding.UTF8;
Properties.Settings.Default.Reload();
string fromEmail = Properties.Settings.Default.FromMail;
string fromName = Properties.Settings.Default.FromName;
string smtpPassword = Properties.Settings.Default.PwdSmtp;
objMailMsg.From = new MailAddress(fromEmail, …Run Code Online (Sandbox Code Playgroud) 我想通过SmtpClient连接到iCloud
我使用的设置如下:
服务器名称:smtp.mail.me.com
SSL必需:是
如果在使用SSL时看到错误消息,请尝试使用TLS或STARTTLS.
端口:587需要
SMTP验证:是 - 具有相关的用户名和密码
如果我使用SSL,我会收到"由于意外的数据包格式而导致握手失败"
如果我不使用SSL visual studio调试器挂起连接.
我认为问题是我没有告诉SmtpClient使用tls但是我找不到如何做到这一点的文档.
代码如下:
using (var client = new SmtpClient()) {
client.Timeout = 1000 * 20;
//client.Capabilities.
client.AuthenticationMechanisms.Remove ("XOAUTH2");
client.Connect("SMTP.mail.me.com", 587, false); //dies here
//client.Connect(servername, port, useSsl);
//can I set tls or starttls here??
client.Authenticate(username, password);
client.Send(FormatOptions.Default, message);
}
Run Code Online (Sandbox Code Playgroud)
我能够手动设置TLS或StartTLS.我尝试过的一件事是以下但它似乎没有用
client.Connect(new Uri("smtp://" + servername + ":" + port + "/?starttls=true"));
Run Code Online (Sandbox Code Playgroud)
感谢您的帮助.
我有一个 Web 应用程序,它使用 MailKit 和基本身份验证通过 Exchange Online (Office365) 向用户发送电子邮件。我们公司是 MS 合作伙伴,因此有义务在 2020 年 2 月底之前关闭我们服务的基本身份验证。
因此,我想使用 OAuth 2.0 连接到 Exchange Online,类似于此示例。事实上,根据这个答案可能有一个解决方案,但我找不到任何相关信息。
现在我正在使用 MS Identity Platform v2.0,但我不知道该怎么做。
任何帮助将不胜感激。
更新1
我不想代表登录用户发送邮件,而是有一个 Office365 用户帐户用于向其他人发送邮件(通知等)。
更新2
我设法使用 Microsoft Graph SDK 和Username/Password Provider更接近我想要做的事情。
我们的用户帐户需要多因素身份验证,因此在使用用户密码时出现错误,因为我无法满足第二个因素。当我使用应用程序密码时,由于密码不正确,身份验证失败。
更新3
我现在改用邮件转发。但如果我能找到答案,我会更新这个问题。
oauth-2.0 mailkit microsoft-identity-platform microsoft-graph-api
我想使用 MailKit 通过我们的 Exchange 服务器发送电子邮件,并使用进程的凭据。
使用域/用户名/密码构建 System.Net.Mail.SmtpClient 和 NetworkCredential 可以工作,但在使用 MailKit.Net.Smtp.SmtpClient 和 NetworkCredential 时不起作用。抛出异常就像
异常消息:SMTP 服务器不支持身份验证。跟踪消息:位于 MailKit.Net.Smtp.SmtpClient.d__73.MoveNext() --- 从先前引发异常的位置开始的堆栈跟踪结束 --- 位于系统的 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) .Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)在MailKit.Net.Smtp.SmtpClient.Authenticate(编码编码,ICredentials凭证,CancellationToken取消令牌)在MailKit.MailService.Authenticate(ICredentials凭证,CancellationToken取消令牌)在SMTP_EmailCheck.Program。 D:\Work\SMTP_EmailCheck\SMTP_EmailCheck\Program.cs 中的 SendMail_MailKit_WithDomain():第 123 行
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
var mailMessage = new MimeMessage();
mailMessage.From.Add(new MailboxAddress(fromMailAddress));
mailMessage.To.Add(new MailboxAddress(toMailAddress));
mailMessage.Subject = "SendMail_MailKit_WithDomain";
mailMessage.Body = new TextPart(TextFormat.Plain)
{
Text = "Hello"
};
using (var smtpClient = new MailKit.Net.Smtp.SmtpClient())
{
smtpClient.Connect("MailServer", 25, MailKit.Security.SecureSocketOptions.None);
var creds = new NetworkCredential("UserName", "Password", "Domain");
smtpClient.Authenticate(creds);
smtpClient.Send(mailMessage);
smtpClient.Disconnect(true);
}
Run Code Online (Sandbox Code Playgroud)
提前致谢
我必须构建一个在服务器端批量运行的 .Net 控制台应用程序,并使用 Office365 和 MailKit 向收件人发送电子邮件。
我公司最近推出了多重身份验证;我已经重写了一个交互式应用程序,允许用户使用 MailKit 和 MFA 发送电子邮件,但我无法在无人值守的应用程序中实现相同的功能。
我已经在 Microsoft Azure 上注册了该应用程序,创建了客户端密钥并实现了以下类:
public class Mailer {
public async static void Send(string subject, string body) {
string tenantID = "abcdef";
string clientId = "ghilmn";
string clientSecret = "opqrst";
string appName = "MyApp";
//clientSecret = Uri.EscapeDataString(clientSecret);
//clientSecret = Uri.EscapeUriString(clientSecret);
var MyConfidentialClientApplication = ConfidentialClientApplicationBuilder.Create(clientId)
.WithClientSecret(clientSecret)
.WithTenantId(tenantID)
.Build();
var scopes = new string[] {"https://graph.microsoft.com/.default"};
try {
var authToken = await MyConfidentialClientApplication.AcquireTokenForClient(scopes).ExecuteAsync();
var oauth2 = new SaslMechanismOAuth2(appName, authToken.AccessToken); // SaslMechanismOAuth2(appName, authToken.AccessToken); …Run Code Online (Sandbox Code Playgroud) 我想使用MailKit通过我们的Exchange服务器发送电子邮件,使用该进程的凭据.
NetworkCredential使用域/用户名/密码建立一个工作:
using (var client = new SmtpClient(ProtocolLogger))
{
client.Connect(server, port);
// Works
var creds = new NetworkCredential(username, password, domain);
client.Authenticate(creds);
client.Send(msg);
}
Run Code Online (Sandbox Code Playgroud)
如果我CredentialCache.DefaultNetworkCredentials在以同一个用户身份运行时使用,则会失败并显示MailKit.Security.AuthenticationException:
using (var client = new SmtpClient(ProtocolLogger))
{
client.Connect(server, port);
// Authentication failure
client.Authenticate(CredentialCache.DefaultNetworkCredentials);
client.Send(msg);
}
Run Code Online (Sandbox Code Playgroud)
在ProtocolLogger输出以下(含邮件服务器和base64编码字符串改变):
Connected to smtp://mymailserver:25/?starttls=when-available
S: 220 mymailserver Microsoft ESMTP MAIL Service ready at Thu, 30 Jun 2016 12:45:04 +0930
C: EHLO [172.1.1.2]
S: 250-mymailserver Hello [172.1.1.2] …Run Code Online (Sandbox Code Playgroud) 我在通过Office 365 SMTP和MailKit发送电子邮件时遇到问题.我得到的例外是:
未处理的异常:System.IO.IOException:无法从传输连接读取数据:远程主机强制关闭现有连接.
System.Net.Sockets.SocketException:远程主机强制关闭现有连接
https://github.com/jstedfast/MailKit
码:
var smtpClient = new SmtpClient();
smtpClient.Connect("smtp.office365.com", 587, true);
Run Code Online (Sandbox Code Playgroud)
Microsoft Office 365设置应该是正确的:
奇怪的是,如果我使用以下所有内容,即使Office 365说SSL是必需的.
smtpClient.Connect("smtp.office365.com", 587, false);
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 imap 访问 gmail 电子邮件,并且代码在 ssl 握手时失败,但没有显示任何错误。如果有人可以帮忙解决这个问题,真的很感激。我已经使用 xunit,.NET Core 2.1 构建了它。我正在使用 MailKit Nuget
public GMailHandler(string mailServer, int port, bool ssl, string login, string password)
//mailServer = imap.gmail.com
//port = 993
//ssl = true
{
if (ssl)
Client.Connect(mailServer, port);
else
Client.Connect(mailServer, port);
Client.Authenticate(login, password);
Client.Inbox.Open(FolderAccess.ReadOnly);
}
Run Code Online (Sandbox Code Playgroud) mailkit ×10
c# ×9
oauth-2.0 ×2
office365 ×2
smtpclient ×2
.net ×1
asp.net-core ×1
email ×1
imap ×1
microsoft-identity-platform ×1
mime-message ×1
mimekit ×1
smtp ×1
ssl ×1
xunit ×1