Итак, я пытаюсь получить определенные данные из электронных писем, которые я получаю на работе, чтобы я мог взять нужные данные и поместить их в документ Excel (возможно, потребуется задать вопросы по этому вопросу позже).До сих пор я успешно прочитал всю свою электронную почту и нашел нужные мне письма с определенного адреса.Моя программа на данный момент сохраняет эти электронные письма в папку в виде файлов .eml.
Теперь мой вопрос: как мне прочитать текст электронных писем, чтобы я мог разобрать, что мне от них нужно?
Мои первые попытки использовать Microsoft CDO.Я пытаюсь вызвать метод, который я собрал из исследования в Интернете, но, похоже, не могу заставить его работать.Visual Studio говорит: «Ссылка на объект требуется для нестатического поля, метода или свойства» receivemail.Program.ReadMessage (string) '
Любая помощь будет отличной, и я могу ответить на все вопросывопросы, если это слишком широко или кому-то нужно больше подробностей.Я вставлю свой код ниже.
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Diagnostics;
using System.Reflection;
// Add EAGetMail namespace
using EAGetMail;
// Add CDO
using CDO.Message;
namespace receiveemail
{
class Program
{
static void Main(string[] args)
{
// Create a folder named "inbox" under current directory
// to save the email retrieved.
string curpath = Directory.GetCurrentDirectory();
string mailbox = String.Format("{0}\\WorkOrders", curpath);
// If the folder is not existed, create it.
if (!Directory.Exists(mailbox))
{
Directory.CreateDirectory(mailbox);
}
MailServer oServer = new MailServer("pop-mail.outlook.com",
"email@email.com", "pass", ServerProtocol.Pop3);
MailClient oClient = new MailClient("TryIt");
//POP3 SSL connection
oServer.SSLConnection = true;
oServer.Port = 995;
try
{
oClient.Connect(oServer);
MailInfo[] infos = oClient.GetMailInfos();
for (int i = 0; i < infos.Length; i++)
{
MailInfo info = infos[i];
Console.WriteLine("Index: {0}; Size: {1}; UIDL: {2}",
info.Index, info.Size, info.UIDL);
// Receive email from POP3 server
Mail oMail = oClient.GetMail(info);
if (oMail.From.ToString() == "johndoe@yahoo.com")
{
Console.WriteLine("From: {0}", oMail.From.ToString());
Console.WriteLine("Subject: {0}\r\n", oMail.Subject);
// Generate an email file name based on date time.
System.DateTime d = System.DateTime.Now;
System.Globalization.CultureInfo cur = new
System.Globalization.CultureInfo("en-US");
string sdate = d.ToString("yyyyMMddHHmmss", cur);
string fileName = String.Format("{0}\\{1}{2}{3}.eml",
mailbox, sdate, d.Millisecond.ToString("d3"), i);
// Save email
oMail.SaveAs(fileName, true);
CDO.Message msg = ReadMessage(fileName);
Console.WriteLine(msg.TextBody);
} // end if
// Mark email as deleted from POP3 server.
oClient.Delete(info);
}
// Quit and purge emails marked as deleted from POP3 server.
// oClient.Quit();
} catch (Exception ep)
{
Console.WriteLine(ep.Message);
} // end catch
} // end method
protected CDO.Message ReadMessage(String emlFileName)
{
CDO.Message msg = new CDO.MessageClass();
ADODB.Stream stream = new ADODB.StreamClass();
stream.Open(Type.Missing, ADODB.ConnectModeEnum.adModeUnknown, ADODB.StreamOpenOptionsEnum.adOpenStreamUnspecified, String.Empty, String.Empty);
stream.LoadFromFile(emlFileName);
stream.Flush();
msg.DataSource.OpenObject(stream, "_Stream");
msg.DataSource.Save();
return msg;
}
} // end class
} // end namespace
Обратите внимание, что это не настоящие адреса электронной почты и пароли ;-)