这是我的代码我试图从textdata属性获取电子邮件的正文,但它提供错误对象引用未设置为对象的实例我不知道该怎么做
IMAPConfig config = new IMAPConfig("imap-mail.outlook.com","name@hotmail.com", "password", true, true, "");
config.CacheFile = "";
IMAPClient client = null;
client = new IMAPClient(config, null, 5);
IMAPFolder f = client.Folders["Inbox"];
// Console.WriteLine(f.GetMessageByID(7049)) ;
int[] msgCount = null;
while (msgCount == null || msgCount.Length == 0)
{
msgCount = f.CheckForNewMessages();
Thread.Sleep(1000);
}
foreach (int id in msgCount)
{
IMAPMessage msg = f.GetMessageByID(id);
string a = null;
a = msg.TextData.TextData;
//MessageBox.Show(msg.TextData.ToString());
msg.MarkAsRead();
}
答案 0 :(得分:2)
看看InterIMAP是一个死的项目,我强烈建议切换到MailKit,这不仅仅是由我积极维护,而且还有更多的功能(我的意思是,InterIMAP' s主页说它将支持复制消息很快并且自2009年以来没有更新过),拥有更多用户,并且错误少得多。它也更容易使用。
例如,您可以按照以下方式使用MailKit进行操作:
using (var client = new ImapClient ()) {
client.Connect ("imap-mail.outlook.com", 993, true);
client.Authenticate ("name@hotmail.com", "password");
client.Inbox.Open (FolderAccess.ReadWrite);
for (int i = 0; i < client.Inbox.Count; i++) {
var message = client.Inbox.GetMessage (i);
var html = message.HtmlBody;
var text = message.TextBody;
// mark the message as read
client.Inbox.AddFlags (id, MessageFlags.Seen, true);
}
client.Disconnect (true);
}
我还在http://www.mimekit.net/docs获得了MSDN风格的文档(我一直在努力改进),您可能会觉得有用。如果您有任何疑问,可以在github项目页面(我的答案顶部的&#34; MailKit&#34;链接)上找到我的电子邮件地址。
答案 1 :(得分:0)
看起来您正在使用InterIMAP。如果查看IMAPMessage.TextData
(https://interimap.codeplex.com/SourceControl/latest#InterIMAP/InterIMAP/Objects/IMAPMessage.cs)的源代码,可以看到如果消息中没有纯文本正文部分,它将返回null。
/// <summary>
/// The content of the message as plain text (if available)
/// </summary>
[XmlIgnore]
public IMAPMessageContent TextData
{
get
{
//RefreshData(true, false);
foreach (IMAPMessageContent content in _bodyParts)
{
if (content.ContentType.ToLower().Contains("plain"))
return content;
}
return null;
}
//set { _textData = value; }
}