【问题标题】:Issues fetching sent Mail using IMAP in c#在 c# 中使用 IMAP 获取已发送邮件的问题
【发布时间】:2017-05-19 13:10:59
【问题描述】:

我正在使用 IMAP 从 gmail 获取我的邮件。它可以很好地从收件箱中获取电子邮件,但是在发送邮件时,它会提供空值。

这是我正在使用的代码:

ImapClient client = new ImapClient("ExampleHost", port, ssl);
try
{
    client.Login("ExampleEmail", "ExamplePass", AuthMethod.Login);
    IEnumerable<uint> units = client.Search(SearchCondition.Seen());
    DataTable TempTaskTable = new DataTable();
    TempTaskTable.Columns.Add("FromEmail", typeof(string));
    TempTaskTable.Columns.Add("ToEmail", typeof(string));
    TempTaskTable.Columns.Add("Subject", typeof(string));
    foreach (var uid in units)
    {
        System.Net.Mail.MailMessage email = client.GetMessage(uid,true, "[Gmail]/Sent Mail");
        DataRow TempTaskRow2 = TempTaskTable.NewRow();
        TempTaskRow2["FromEmail"] = email.Sender;
        TempTaskRow2["ToEmail"] = email.From;
        TempTaskRow2["Subject"] = email.Subject;
    }

    bool result = false;
    string msg = "";
    usp_TempTasksSave(TempTaskTable, TempTaskAttachmentDatatTable, out result, out msg);
}
catch (Exception ex)
{
    string exceptionCheck = ex.Message;
}

这是我的输出:

我也在stackoverflow上搜索过,到目前为止这是我唯一的帮助还不够

任何形式的帮助都将不胜感激。

【问题讨论】:

  • 试试foreach (var folder in client.Inbox.GetSubfolders (false)) { Console.WriteLine ("[folder] {0}", folder.Name); } 看看你是否使用了正确的文件夹名称
  • @kraangPrime 它说 IMAP 不包含“收件箱”的定义,并且找不到接受第一个参数作为 IMAPClient 类型的扩展方法“收件箱”。
  • @kraangPrime 我已经验证了文件夹名称及其正确的名称。 “[Gmail]/已发送邮件”。
  • ImapClient 使用哪个库?
  • @kraangPrime 实际上这是我正在尝试配置的其他人的代码,我不确定其中使用了哪个库。

标签: c# asp.net asp.net-mvc email imap


【解决方案1】:

我通过设置默认邮箱解决了这个问题。 在我的情况下,默认邮箱始终是收件箱,因此我无法获取已发送的邮件。解决问题只需要一行。这是我现在使用的代码:

ImapClient client = new ImapClient("ExampleHost", port, ssl);
client.DefaultMailbox = "[Gmail]/Sent Mail";
try
{
    client.Login("ExampleEmail", "ExamplePass", AuthMethod.Login);
    IEnumerable<uint> units = client.Search(SearchCondition.Seen());
    DataTable TempTaskTable = new DataTable();
    TempTaskTable.Columns.Add("FromEmail", typeof(string));
    TempTaskTable.Columns.Add("ToEmail", typeof(string));
    TempTaskTable.Columns.Add("Subject", typeof(string));
    foreach (var uid in units)
    {
        System.Net.Mail.MailMessage email = client.GetMessage(uid,true, "[Gmail]/Sent Mail");
        DataRow TempTaskRow2 = TempTaskTable.NewRow();
        TempTaskRow2["FromEmail"] = email.Sender;
        TempTaskRow2["ToEmail"] = email.From;
        TempTaskRow2["Subject"] = email.Subject;
    }
}
catch (Exception ex)
{
    string exceptionCheck = ex.Message;
}

您还可以使用以下方式查看所有邮箱:

List<String> mailBoxesCheck = new List<string>();
foreach (var folder in client.ListMailboxes())
{
   mailBoxesCheck.Add(folder);
}

【讨论】:

  • 如果你想转换成List&lt;&gt;类型,你可以简单地调用client.ListMailboxes().ToList(),因为它是一个string[]数组。对于调试,您可以使用 Console.Log( folder ) 而不是 mailBoxesCheck.Add(folder); 记录输出。 :)
  • 有一些有效的方法是@kraangPrime :)
猜你喜欢
  • 2014-10-20
  • 2015-07-17
  • 2012-02-23
  • 1970-01-01
  • 1970-01-01
  • 2020-08-18
  • 2012-01-23
  • 1970-01-01
  • 2019-03-26
相关资源
最近更新 更多