标签: mailkit

MailKit:从IMAP服务器获取新邮件通知

我需要创建一个连接到IMAP服务器并侦听新邮件的服务(或控制台)应用程序.我目前正在尝试使用MailKit,但我无法从文档中找出如何实现这一目标.

我最接近的是这篇文章.从我所看到的,这篇文章是将连接设置为IDLE模式,偶尔发送NoOP以尝试保持连接活动.我不完全清楚的是如何收到新的邮件通知.

MailKit文档似乎表明有一个Alert事件可用.我试过挂钩,但这似乎没有解决任何问题.

这是我尝试过的:

    var cts = new CancellationTokenSource();
    testIDLEMailNotification(cts.Token);

    ...

    private static void testIDLEMailNotification(CancellationToken token)
    {
        using (var client = ClientCreateAndConnect(token))
        {
            while(!token.IsCancellationRequested)
            {
                using (var done = new CancellationTokenSource())
                {
                    using (var timer = new System.Timers.Timer(9 * 60 * 1000))
                    {
                        timer.Elapsed += (sender, e) => done.Cancel();
                        timer.AutoReset = false;
                        timer.Enabled = true;
                        try
                        {
                            client.Idle(done.Token, token);
                            client.NoOp(token);

                        }
                        catch (OperationCanceledException)
                        {
                            break;
                        }
                    }
                }
            }
        }
    }

    private static ImapClient ClientCreateAndConnect(CancellationToken token)
    {
        var …
Run Code Online (Sandbox Code Playgroud)

c# imap mailkit

5
推荐指数
2
解决办法
5915
查看次数

检索 IMAP 子文件夹

我正在尝试从收件箱中检索子文件夹和消息,但我只能检索父子文件夹,也尝试使用 PersonalNamespaces[0]

var inbox = client.Inbox;
inbox.Open (FolderAccess.ReadWrite);

Debug.WriteLine ("Total messages: {0}", inbox.Count);
//client.Inbox.Status(StatusItems.Unread);
//Debug.WriteLine("Recent messages: {0}", inbox.Unread);
//Debug.WriteLine("Recent messages: {0}", inbox.FirstUnread);

var personal = client.GetFolder(client.PersonalNamespaces[0]);

foreach (var folder in inbox.GetSubfolders(false))
{
        Console.WriteLine("[folder] {0}", folder.Name);
        folder.Open(FolderAccess.ReadOnly);
Run Code Online (Sandbox Code Playgroud)

c# mailkit

5
推荐指数
1
解决办法
6116
查看次数

使用 Mailkit 和 Mimekit 收集 SMTP 服务器

在尝试使用 MailKit 和 MimeKit 发送电子邮件时,有没有办法收集 SMTP 输出?。

ps:我正在尝试将我的电子邮件代码从 Easymail 迁移到 Mimekit 和 Mailkit,如果这是一个相当基本的查询,我深表歉意。

c# mailkit mimekit

5
推荐指数
1
解决办法
3695
查看次数

Asp.Net Core MailKit:根据验证过程,远程证书无效

我有一个关于asp.net核心电子邮件发送的问题.

所以我有这个代码:

private void SendEmailLocalSMTP(string email, string subject, string message)
{
        MimeMessage mailMsg = new MimeMessage();

        //TESTING ENVIRONMENT ONLY!!!
        mailMsg.To.Add(new MailboxAddress("myMail@gmail.com", "cjimenezber@gmail.com"));

        // From
        mailMsg.From.Add(new MailboxAddress("noreply@app.com", "Facturacion"));

        // Subject and multipart/alternative Body
        mailMsg.Subject = subject;
        string html = message;

        System.Net.NetworkCredential credentials = new System.Net.NetworkCredential("myMail@gmail.com", "myPassword");

        // Init SmtpClient and send
        using (var client = new SmtpClient())
        {
            client.Connect("smtp.gmail.com", 587, SecureSocketOptions.StartTls);
            client.AuthenticationMechanisms.Remove("XOAUTH2");
            client.Authenticate(credentials);
            client.Send(mailMsg);
            client.Disconnect(true);
        }
    }
Run Code Online (Sandbox Code Playgroud)

从我在其他帖子中发现的有些相关,这应该足以使用MailKit发送它,但它不能正常工作.我收到以下异常,我不知道如何从这里开始.

这是例外:

在此输入图像描述

我已经看到了这个问题,但我没有太多意义:如何使用MailKit发送电子邮件?

任何帮助都非常感谢,谢谢.

c# asp.net email gmail mailkit

5
推荐指数
1
解决办法
5106
查看次数

发送带有附件的电子邮件时,我应该处理 MimeKit 使用的流吗?

我在玩 MailKit/MimeKit,有些东西困扰着我。我想使用流发送带有附件的电子邮件。MimeKit 提供的BodyBuilder类可以很容易地创建正文消息和附加文件:

public void SendEmail(string body, Stream attachment, string fileName)
{
    var message = new MimeMessage();
    message.From.Add(new MailboxAddress("Carl", "carl@site.com"));
    message.To.Add(new MailboxAddress("Rick", "rick@site.com"));
    message.Subject = "Things got messy...?";

    var builder = new BodyBuilder();
    builder.TextBody = body;

    builder.Attachments.Add(fileName, attachment);

    message.Body = builder.ToMessageBody();

    using (var client = new SmtpClient())
    {
        // code to send e-mail here...
    }
}
Run Code Online (Sandbox Code Playgroud)

我在我的代码中的其他地方生成了流并且我没有关闭它,所以我可以将它传递给 MimeKit。不清楚的是:MimeKit 是否处理流?基本上(据我所知)消费者通常负责处理流。我也知道在 MemoryStream 上调用 dispose (我基本上正在使用)不会释放任何资源..但会阻止读取/写入它。但是,如果将来实现更改为另一种类型的 Stream,事情会变得更加复杂。

我还深入研究了 MikeKit 源代码,发现传入的 StreamAttachmentCollection.Add被“添加”到了MemoryBlockStream继承自 Stream(并实现 Dispose)的 Stream 中,所以我假设它已被处理,但在这一点上,我只是猜测。

有任何想法吗?

c# stream mailkit mimekit

5
推荐指数
1
解决办法
1932
查看次数

我需要哪些额外的工具才能使用 docker 通过 smtp 服务器发送电子邮件

我正在编写一个 .net core 1.1 控制台应用程序。目标是将其托管为在 docker 容器内运行的计划作业。

控制台应用程序将使用 smtp 服务器并发送电子邮件。就那么简单。

但是,我在 docker 容器内运行应用程序时没有成功。我的假设是,如果我们将 smtp 端口暴露在 docker 容器之外,那么 smtp 服务器就可以正常工作了。

docker run -it -p 25:25 --rm courierreports:demo

尝试连接到 smtp 服务器时,代码抛出异常。我需要任何其他工具才能使我的应用程序正常运行吗?

我的机器运行的是 Windows 7,我正在使用 Oracle Virtual Box for docker。smtp 服务器 ( org.smtp.com) 由我公司提供 我使用的端口25

我得到的错误:

fail: StartupLogs[0]
      An error occurred.
fail: StartupLogs[0]
      Unable to read data from the transport connection: Connection timed out.
fail: StartupLogs[0]
         at System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size)
         at MailKit.Net.Smtp.SmtpStream.ReadAhead(CancellationToken cancellationToken)
         at MailKit.Net.Smtp.SmtpStream.ReadResponse(CancellationToken cancellationToken)
         at MailKit.Net.Smtp.SmtpClient.Connect(String …
Run Code Online (Sandbox Code Playgroud)

smtp exception docker mailkit

5
推荐指数
0
解决办法
1668
查看次数

Mailkit:UniqueID 是什么

在谷歌搜索没有结果之后,我会问我的问题:

是什么Mailkit.UniqueId

在结构的元数据中只是读取

表示 MailKit.IMailFolder 中邮件的唯一标识符

1)它是唯一的,只是让我们说收件箱,但随后 Bin 或 Sent 可能再次具有相同的编号(我从我目前检索到的消息中对此表示怀疑)

2) 对整个 imap 帐户是唯一的吗?

3)它是由mailkit还是由Imap Server产生的id?

4) 什么控制此 Id 的增量以确保它是唯一的。

5) 这个 UniqueID 和 MessageID 之间的主要区别是什么?

c# mailkit

5
推荐指数
1
解决办法
2660
查看次数

使用 MailKit 检查 imap 文件夹是否存在

我正在尝试将邮件移动到另一个文件夹,但我无法找到一种简单的方法来检查目标文件夹是否存在,我假设给定的文件夹路径是根文件夹,我尝试这样做:

\n\n
public void MoveMessages(Config accountInfo, List<int> uids, string \n   sourceFolderName, string targetFolderName)   \n{\n            ValidateAccountInfoConfiguration(accountInfo);\n            using (var client = new ImapClient())\n            {\n                Authenticate(accountInfo, client);\n\n                var sourceFolder = GetSourceFolder(sourceFolderName, client);\n                sourceFolder.Open(FolderAccess.ReadWrite);\n                var topLevelFolder = client.GetFolder(client.PersonalNamespaces[0]);\n                var topFolders = topLevelFolder.GetSubfolders();\n                var targetFolder = topFolders.FirstOrDefault(folder => folder.Name == targetFolderName);\n                if (targetFolder == null)\n                    targetFolder = topLevelFolder.Create(targetFolderName, true);\n                var uidsToMove = GetUniqueIds(sourceFolder, SearchQuery.Seen).Where(uid => uids.Any(uidToMove => uidToMove == uid.Id)).ToList();\n                sourceFolder.MoveTo(uidsToMove, targetFolder);\n                sourceFolder.Expunge(uidsToMove);\n\n            }\n        }\n
Run Code Online (Sandbox Code Playgroud)\n\n

在文档中,IMailFolder 接口包含 Exists 属性,但是当我尝试使用 IMailFolder.GetFolder("pathToFolder") 获取文件夹时,如果该文件夹不存在,则会抛出folderNotFound 异常,因此我无法理解用例存在财产,我错过了什么?或者我当前的实现是实现获取目标文件夹的正确方法?

\n

c# imap mailkit

5
推荐指数
1
解决办法
2880
查看次数

使用 MailKit 通过 Outlook.com 发送

我正在尝试使用 MailKit 通过我的 Outlook.com 电子邮件地址发送电子邮件。

我遵循了我在网上看到的所有示例,这就是我所拥有的:

public async Task SendEmailAsync(string email, string subject, string htmlmessage)
{
    var message = new MimeMessage();
    message.From.Add(new MailboxAddress("Service Account", "me@outlook.com"));
    message.To.Add(new MailboxAddress("First Last", email));
    message.Subject = subject;
    message.Body = new TextPart(TextFormat.Html)
    {
        Text = htmlMessage
    };

    using (var client = new SmtpClient())
    {
        //Have tried both false and true    
        client.Connect("smtp-mail.outlook.com", 587, false);
        client.AuthenticationMechanisms.Remove("XOAUTH2");
        client.Authenticate("me@outlook.com", "mypassword");
        await client.SendAsync(message);
        client.Disconnect(true);
    }

    return;
}
Run Code Online (Sandbox Code Playgroud)

如果我将useSSL参数设置为trueon client.Connect(),则会出现此错误:

An error occurred while attempting to establish …
Run Code Online (Sandbox Code Playgroud)

outlook.com mailkit asp.net-core

5
推荐指数
1
解决办法
8262
查看次数

如何在 Powershell 中安装 Mailkit

我好像在绕圈子。。

我尝试过Install-Package -Name 'MailKit' -Source 'nuget.org',但无法找到包源 nuget.org

我尝试从下载中进行本地安装,它只是不断要求依赖包,例如 System.Buffers,然后安装了 Portable.BouncyCastle,但随后遵循 System.Security.Cryptography.Pkcs,最后提示“检测到包的依赖循环”

有谁能够提供安装 MailKit 以便与 Powershell 一起使用的途径,或者提供从 Powershell 发送电子邮件的替代方法?

我只需要从脚本偶尔发送一封通知邮件(每天一封??),但 SendMail 不断发出警告,不应使用它并且已过时。

powershell mailkit

5
推荐指数
1
解决办法
6720
查看次数