作为标题,MailKit是否支持发送文件?
如果是,我该怎么办?
BodyBuilder bodyBuilder = new BodyBuilder();
messageContent.Body = "<b>This is a test mail</b>";
bodyBuilder.HtmlBody = messageContent.Body;
Run Code Online (Sandbox Code Playgroud)
我试图将我的身体嵌入到健美运动员中,但是当我收到电子邮件时,它返回了一个空体.我有一个例外,如果正文是空的,它会抛出一个参数.
我使用MailKit从GMail帐户中读取一些消息.工作得很好,但是当我的应用程序读取了一条消息时,我想将消息标记为已读,并将该状态保存到GMail.MailKit可以实现吗?我还没有发现任何相关信息.
最好的问候René
根据新的谷歌政治https://googleonlinesecurity.blogspot.de/2014/04/new-security-measures-will-affect-older.html我无法发送电子邮件.对于不使用OAuth 2.0的应用程序,谷歌会考虑"安全性较低的应用程序".
我想使用MailKit来解决这个问题
var message = new MimeMessage();
message.From.Add(new MailboxAddress("Joey Tribbiani", "noreply@localhost.com"));
message.To.Add(new MailboxAddress("Mrs. Chanandler Bong", "mymail@gmail.com"));
message.Subject = "How you doin'?";
message.Body = new TextPart("plain"){ Text = @"Hey" };
using (var client = new SmtpClient())
{
client.Connect("smtp.gmail.com", 587);
////Note: only needed if the SMTP server requires authentication
client.Authenticate("mymail@gmail.com", "mypassword");
client.Send(message);
client.Disconnect(true);
}
Run Code Online (Sandbox Code Playgroud)
但我有 An exception of type 'MailKit.Security.AuthenticationException' occurred in MailKit.dll but was not handled in user code.Additional information: Authentication failed.
我不想更改我的安全设置.因为我希望一切都安全.这就是我开始使用MailKit而不是System.Net.Mail的原因
我该如何解决?
我正在尝试从邮件中保存附件
foreach(MimeKit.MimeEntity at message.Attachments)
{
at.WriteTo("nameFile");
}
Run Code Online (Sandbox Code Playgroud)
文件保存,但是当我打开时我得到错误文件已损坏或太大此文件的大小为88 kb,但文件大小应等于55 kb.
我认为在所有录制的消息文件中.
我如何只记录附件?
MailKit v1.2.0.0 MimeKit 1.2.0.0
我们正在考虑迁移到 O365;然而,我们开发的软件使用我们当前的 Exchange 服务器在发生错误时向外部用户和支持箱发送电子邮件。
我一直在对此进行测试,以确保我们现有的代码将继续与 O365 一起使用,但到目前为止,我还没有取得很大的成功。
我曾尝试使用 .Net 的 SmtpClient 以及 MailKit 的 SmtpClient,但似乎都不起作用。我不断收到错误(这是来自 MailKit 的错误——.Net 错误是类似的)
“AuthenticationInvalidCredentials:5.7.3 身份验证不成功 [*.prod.exchangelabs.com]”
我可以使用代码中的凭据登录 OWA - 所以我知道凭据是有效的。不能通过 O356 发送电子邮件吗?Exchange 中是否需要进行任何特殊配置才能实现这一点?
这是我迄今为止尝试过的:
邮件套件
var msg = new MimeMessage();
msg.From.Add(new MailboxAddress("Support","support@mydomain.com"));
msg.To.Add(new MailboxAddress("Me","me@mydomain.com"));
msg.To.Add(new MailboxAddress("External User","euser@externaldomain.com"));
msg.Subject = "Test";
msg.Body = new TextPart("plain"){
Text = "Here is a message for you"
};
using(var client = new SmtpClient()){
client.ServerCertificateValidationCallback = (s,c,h,e) => true;
client.AuthenticationMechanisms.Remove("XOAUTH2"); //Not sure what this does. Have tried with and without
client.Connect("smtp.office365.com", …
Run Code Online (Sandbox Code Playgroud) 我最近在我们的项目中使用了 Mailkit lib,以替换 .NET SmtpClient。我们有 2 个使用 SmtpClient 发送电子邮件的业务案例。在一种情况下,我们使用 SmtpClient 在单独的进程中发送排队的电子邮件,而在另一种情况下,我们立即发送电子邮件。在实现时我注意到我们必须调用 Client 实例的 Disconnect 方法。
文档中不确定也不清楚调用此方法的最佳方法是什么。所以我的问题是,使用这种方法的最佳实践是什么?每条消息调用 mailClient.Disconnect(true) 还是 mailClient.Disconnect(false)?
mailClient.Disconnect(...);
出于兴趣,如果我在 using 块中使用客户端,是否需要在发送消息后显式调用 Disconnect(...) ?我认为它在执行 Dispose() 时隐式调用断开连接。
using (var mailClient = new SmtpClient())
{
mailClient.Connect(...);
mailClient.AuthenticationMechanisms.Remove("XOAUTH2");
mailClient.Authenticate(...);
mailClient.Send(message);
mailClient.Disconnect(false);
}
感谢您在这方面的反馈。
到目前为止,我很高兴使用类似于以下的方法连接到我的 Gmail 帐户:
\npublic async Task<IEnumerable<MimeMessage>> GetMessagesAsync()\n{\n using var imapClient = new MailKit.Net.Imap.ImapClient();\n var secureSocketOptions = SecureSocketOptions.Auto;\n if (useSsl) secureSocketOptions = SecureSocketOptions.SslOnConnect;\n await imapClient.ConnectAsync(host, port, secureSocketOptions);\n\n await imapClient.AuthenticateAsync(login, password);\n\n await imapClient.Inbox.OpenAsync(FolderAccess.ReadOnly);\n\n var uids = await imapClient.Inbox.SearchAsync(SearchQuery.All);\n\n var messages = new List<MimeMessage>();\n foreach (var uid in uids)\n messages.Add(await imapClient.Inbox.GetMessageAsync(uid));\n\n imapClient.Disconnect(true);\n\n return messages;\n}\n
Run Code Online (Sandbox Code Playgroud)\n自 2022 年 5 月 30 日起,这不再可能,因为对“不太安全的应用程序”的支持已被禁用:
\n\n\n为了确保您帐户的安全,从 2022 年 5 月 30 日起,\xe2\x80\x8b\xe2\x80\x8bGoogle 不再支持使用要求您仅使用您的帐户登录 Google 帐户的第三方应用或设备。用户名和密码。
\n
现在如何将 Mailkit 与 Gmail …
我在ASP NET 5项目中创建一个简单的模拟邮件发件人时遇到了麻烦.
这里的方法:
public static Task SendMail(string Email, string Subject, string Body)
{
SmtpClient client = new SmtpClient();
client.DeliveryMethod = SmtpDeliveryMethod.SpecifiedPickupDirectory;
client.PickupDirectoryLocation = "C:\\TMP";
MailAddress from = new MailAddress("jane@contoso.com", "Jane " + (char)0xD8 + " Clayton", System.Text.Encoding.UTF8);
MailAddress to = new MailAddress(Email);
MailMessage message = new MailMessage(from, to);
message.Body = Body;
message.BodyEncoding = System.Text.Encoding.UTF8;
message.Subject = Subject;
message.SubjectEncoding = System.Text.Encoding.UTF8;
client.Send(message);
message.Dispose();
return Task.FromResult(0);
}
Run Code Online (Sandbox Code Playgroud)
我已经包含了依赖项'System.Net.Mail',但工具提示说该库在DNX 4.5.1中可用,但在DNX Core 5.0中不可用,并且项目将无法编译.
在我的project.json中有:
"frameworks": {
"dnx451": { },
"dnxcore50": { }
}
Run Code Online (Sandbox Code Playgroud) 我有一个守护程序,可以读取电子邮件地址的收件箱并对电子邮件执行操作。我正在使用 MailKit 通过 IMAP 连接到交换服务器,但 Microsoft 已关闭我们的基本身份验证(凌晨 4 点,没有警告......)。所以我需要一种新的方式来连接到我的邮箱。
使用图表需要对我的应用程序进行重大重写。我打算这样做,但与此同时,我需要一个中间解决方案来保留 MailKit。