Показать сообщение отдельно
Старый 09.01.2013, 18:25   #18  
Eloy is offline
Eloy
Участник
 
10 / 17 (1) ++
Регистрация: 28.07.2010
Всем спасибо, очень полезная тема оказалась. Разобрался с 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;
За это сообщение автора поблагодарили: FrolovAndy (1), handy-comp (1).