我有一个复杂的电子邮件模板,其中包含许多div,section和其他 HTML 元素。HTML模板引用了CSS(上传到服务器)。我使用下面的代码通过 MailKit 发送 HTML 电子邮件:
var message = new MimeMessage();
var bodyBuilder = new BodyBuilder();
bodyBuilder.HtmlBody = File.ReadAllText(pathToHtmlFIle);
message.Body = bodyBuilder.ToMessageBody();
client.Send(message);
Run Code Online (Sandbox Code Playgroud)
但客户端仅收到纯文本形式的所有内容,没有颜色,没有格式。这是预期的结果吗?
我试图显示已发送的文件夹,但它显示该文件夹中没有子文件夹。除收件箱外,所有文件夹都是空的。我正在使用以下代码。
using (var client = new ImapClient())
{
client.Connect(credentials.incoming_host, (int)credentials.incoming_port, credentials.incoming_ssl); //for SSL
client.Authenticate(credentials.email, credentials.password);
client.Inbox.Open(FolderAccess.ReadOnly);
var sentFolder= client.GetFolder(MailKit.SpecialFolder.Sent);
var Folders = client.GetFolders(client.PersonalNamespaces[0]);
client.Disconnect(true);
}
Run Code Online (Sandbox Code Playgroud)
我尝试使用同一文件夹发送电子邮件,然后将其附加如下:
var sentFolder = imapclient.GetFolder(SpecialFolder.Sent);
sentFolder.Append(message);
Run Code Online (Sandbox Code Playgroud)
我的 Outlook 确实检测到它并添加到已发送文件夹中。
我有以下代码,可以很好地发送电子邮件,但我收到这些警告,表明我应该将某些方法标记为“已过时”。我查看了mailKit网站上的文档,它说我应该使用与MailboxAddress(String). 我明白了,但在如何实现他们要求的方式方面遇到了麻烦,这看起来很简单,但我认为我错过了一步。MailboxAddress(String, String) 这是推荐的新方法之一。
代码如下:
控制器
public IActionResult RequestPassword()
{
var message = new Message(new string[]
{
"email@gmail.com"
},
"Test Email",
"This is the content from out email."
);
_emailSender.SendEmail(message);
return View();
}
Run Code Online (Sandbox Code Playgroud)
消息.cs
对于此类,警告会在线弹出To.AddRange(to.Select(x => new MailboxAddress(x)));
public class Message
{
public List<MailboxAddress> To { get; set; }
public string Subject { get; set; }
public string Content { get; set; }
public Message(IEnumerable<string> to, string subject, string content)
{
To = …Run Code Online (Sandbox Code Playgroud) 我试图使用Mailkit添加顶级文件夹,所以当我添加以下标签时,我可以将它们分组到此文件夹下.
标签是:
我想创建一个名为mailkit的文件夹,以便gmail对它们进行分组,但我现在似乎无法找到一种方法.这有可能吗,有没有人有例子?
我需要在Google IMAP服务器上找到特定的电子邮件,然后保存电子邮件中的附件.我想我已经弄明白了,除了确定附件的文件名是什么的部分.
下面是我的代码到目前为止,我希望有人可以指出我正确的方向来确定文件名.
我用Googled和SO'd但是找不到使用附件方法的东西.
internal class MailKitHelper
{
private void SaveAttachementsForMessage(string aMessageId)
{
ImapClient imapClient = new ImapClient();
imapClient.Connect("imap.google.com", 993, SecureSocketOptions.Auto);
imapClient.Authenticate("xxxx", "xxxx");
HeaderSearchQuery searchCondition = SearchQuery.HeaderContains("Message-Id", aMessageId);
imapClient.Inbox.Open(FolderAccess.ReadOnly);
IList<UniqueId> ids = imapClient.Inbox.Search(searchCondition);
foreach (UniqueId uniqueId in ids)
{
MimeMessage message = imapClient.Inbox.GetMessage(uniqueId);
foreach (MimeEntity attachment in message.Attachments)
{
attachment.WriteTo("WhatIsTheFileName"); //How do I determine the file name
}
}
}
}
Run Code Online (Sandbox Code Playgroud) 我需要使用Mailkit从IMAP导出EML文件,但是没有方法可以导出电子邮件.
我在MimeKit - Mailkit文档中找不到任何文档.
是否可以使用Mailkit导出EML文件?
您如何使用 Imapclient() 发送和发送电子邮件?
使用此页面上的示例: Mimekit 文档
登录 IMAP 并创建消息后,我似乎无法找到用于发送和发送电子邮件的方法。通过 Nuget 安装并安装了最新版本已将此添加到我的代码中:
using MimeKit;
using MailKit;
using MailKit.Search;
using MailKit.Security;
using MailKit.Net.Imap;
Run Code Online (Sandbox Code Playgroud)
以及对 Mailkit 和 Mimekit dll 的引用。我错过了什么吗?
因此,网上有一些很好的示例,说明如何使用 Mailkit 通过 SMTP 发送电子邮件。
通常以:
client.Authenticate(theSMTPUsername,theSMTPPassword);
client.Send(emailMessage);
client.Disconnect(true);
Run Code Online (Sandbox Code Playgroud)
但是,如果需要异步,这不好:
client.Authenticate(theSMTPUsername,theSMTPPassword);
client.SendAsync(emailMessage);
client.Disconnect(true);
Run Code Online (Sandbox Code Playgroud)
但是,我想知道的是异步发送何时完成,或者它是否不成功。在 .Net 本机库下,这是通过回调(事件处理程序)实现的。
是否可以为 MailKit SendAsync 定义一个“已完成”的回调处理程序,如果不是,那么发现它是否成功的最佳实践是什么。
谢谢
在asp.net core 1应用程序中,我正在尝试使用mailkit库(版本1.8.1)向strato服务器发送电子邮件.我的代码:
var emailMessage = new MimeKit.MimeMessage();
try
{
emailMessage.From.Add(new MimeKit.MailboxAddress("Support", "some@test.com"));
emailMessage.To.Add(new MimeKit.MailboxAddress("", "test@test.com"));
emailMessage.Subject = "Subject";
var bodyBuilder = new MimeKit.BodyBuilder();
bodyBuilder.HtmlBody = @"<b>Some body</b>";
emailMessage.Body = bodyBuilder.ToMessageBody();
using (var client = new MailKit.Net.Smtp.SmtpClient())
{
client.Timeout = 15000;
// Accept all SSL certificates (in case the server supports STARTTLS)
client.ServerCertificateValidationCallback = (s, c, h, e) => true;
await client.ConnectAsync("smtp.strato.de", 587, MailKit.Security.SecureSocketOptions.Auto);
// Note: since we don't have an OAuth2 token, disable
// the XOAUTH2 authentication mechanism.
client.AuthenticationMechanisms.Remove("XOAUTH2"); …Run Code Online (Sandbox Code Playgroud) 我在网上查看了其他示例,但我无法弄清楚如何从MimeMessage对象下载和存储所有附件.我确实调查了WriteTo(),但我无法让它工作.还想知道附件是否会根据原始文件名保存,并在电子邮件中输入.这是我到目前为止:
using (var client = new ImapClient())
{
client.Connect(Constant.GoogleImapHost, Constant.ImapPort, SecureSocketOptions.SslOnConnect);
client.AuthenticationMechanisms.Remove(Constant.GoogleOAuth);
client.Authenticate(Constant.GoogleUserName, Constant.GenericPassword);
if (client.IsConnected == true)
{
FolderAccess inboxAccess = client.Inbox.Open(FolderAccess.ReadWrite);
IMailFolder inboxFolder = client.GetFolder(Constant.InboxFolder);
IList<UniqueId> uids = client.Inbox.Search(SearchQuery.All);
if (inboxFolder != null & inboxFolder.Unread > 0)
{
foreach (UniqueId msgId in uids)
{
MimeMessage message = inboxFolder.GetMessage(msgId);
foreach (MimeEntity attachment in message.Attachments)
{
//need to save all the attachments locally
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud) mailkit ×10
c# ×8
email ×4
mimekit ×4
asp.net-core ×2
imap ×2
asp.net-mvc ×1
asynchronous ×1
html ×1
smtp ×1