Всем спасибо, очень полезная тема оказалась. Разобрался с OpenPop.Net, всё супер работает. Единственное пришлось вложения вытаскивать через рефлексию в AX 2009. Вот рабочий пример, может облегчит жинь кому-то:
X++:
OpenPop.Pop3.Pop3Client pop3Client;
OpenPop.Mime.Message message;
OpenPop.Mime.Header.MessageHeader messageHeader;
OpenPop.Mime.Header.RfcMailAddress rfcMailAddress;
OpenPop.Mime.MessagePart messagePart;
System.Type type, typeE;
System.Object aList, etr;
System.Reflection.MethodInfo methodGetEnumerator, methodMoveNext;
System.Reflection.PropertyInfo propertyCount, propertyCurrent;
System.Object[] nil;
System.IO.FileInfo fileInfo;
FileName fileName;
int i, messageCount, attachmentCount;
str subject, messageBody, email;
;
pop3Client = new OpenPop.Pop3.Pop3Client();
try
{
// Connect to the server
pop3Client.Connect(POPServerName, POPPort, false);
// Authenticate ourselves towards the server
pop3Client.Authenticate(POPUserName, POPPassword);
// Get the number of messages in the inbox
messageCount = pop3Client.GetMessageCount();
info(strFmt("messageCount: %1", messageCount));
// We want to download all messages
for (i = 1; i <= messageCount; i++)
{
message = pop3Client.GetMessage(i);
messageHeader = message.get_Headers();
subject = messageHeader.get_Subject();
info(strFmt("Subject: %1", subject));
rfcMailAddress = messageHeader.get_From();
email = rfcMailAddress.get_Address();
info(strFmt("Sender e-mail: %1", email));
messagePart = message.FindFirstPlainTextVersion();
messageBody = messagePart.GetBodyAsText();
info(strFmt("Body: %1", messageBody));
aList = message.FindAllAttachments();
type = aList.GetType();
propertyCount = type.GetProperty("Count");
nil = new System.Object[0]();
attachmentCount = propertyCount.GetValue(aList, nil);
info(strFmt("attachmentCount: %1", attachmentCount));
methodGetEnumerator = type.GetMethod("GetEnumerator");
etr = methodGetEnumerator.Invoke(aList, nil);
typeE = etr.GetType();
methodMoveNext = typeE.GetMethod("MoveNext");
while(methodMoveNext.Invoke(etr, nil))
{
propertyCurrent = typeE.GetProperty("Current");
messagePart = propertyCurrent.GetValue(etr, nil);
fileName = messagePart.get_FileName();
info(fileName);
fileInfo = new System.IO.FileInfo(strFmt(@"C:\AxEx\%1", fileName));
messagePart.Save(fileInfo);
}
//pop3Client.DeleteMessage(i);
}
}
catch
{
error("Произошла ошибка при загрузке почты!");
}
pop3Client.Disconnect();
pop3Client.Dispose();
pop3Client = null;