Генерация Message-Id

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by slesh, 26 Aug 2011.

  1. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    Собственно говоря такой вот вопрос, может кто знает. Как генерируется в аутлуке MessageId. В частности интересуют новые версии его. То, что описывал Z0mbie уже безбожно устарело, и даже 6.0 версия аутлука уже как-то по другому генерирует его
     
  2. DooD

    DooD Elder - Старейшина

    Joined:
    30 Sep 2010
    Messages:
    1,168
    Likes Received:
    450
    Reputations:
    288
    дизассемблить inetcom.dll придется,по-другому не знаю....
     
  3. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    Да я это уже и сделал, там всё на С++ сделано было, по этому с этими классами там позапутано сильно.
    Судя по виду там вообще псевдослучайно всё (на основ GUID )

    Всё разобрался, дошло до меня как и что делает.
    Псевдокод выходит типа:

    Code:
    GUID  pguid = {0};
    char* Domain = PszGetDomainName();
    
    CoCreateGuid(&pguid);
    
    result = StringCchPrintfA(
                   DestBuf,
                   255,
                   "%s%08lX%04X%04X%02X%02X%02X%02X%02X%02X%02X%02X@%s%s",
                   "<",
                   pguid.Data1,
                   pguid.Data2,
                   pguid.Data3,
                   pguid.Data4[0],
                   pguid.Data4[1],
                   pguid.Data4[2],
                   pguid.Data4[3],
                   pguid.Data4[4],
                   pguid.Data4[5],
                   pguid.Data4[6],
                   pguid.Data4[7],
                   v5,
                   ">");
    
     
    #3 slesh, 26 Aug 2011
    Last edited: 26 Aug 2011
  4. DooD

    DooD Elder - Старейшина

    Joined:
    30 Sep 2010
    Messages:
    1,168
    Likes Received:
    450
    Reputations:
    288
    юзается com?
     
  5. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    Ага, там всё на основе него. Благо отладочные символы виндовые помогают )
    Там всё работает так:
    1) CMessageTree::_HrSetMessageId ведет в MimeOleGenerateMID
    2) MimeOleGenerateMID ведет в PrintfAGuidToString
    3) PrintfAGuidToString уже генерит GUID и добавляет имя домена
     
  6. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    После долгих копаний выяснилось, что не так всё и просто там. если первая часть MessageID - это банальный GUID, то вторая часть это строка получаемая как:
    1) получается имя хоста текущего
    2) для имени хоста получается доменное имя
    3) из получившегося доменного имени выризаются все буквы кроме англ и цифр и точки
    4) далее чтото странное - удаляются DBCS символы (чесно ховоря хз зачем если и так отфильтровали всё лишнее)
    5) обрезается всё, что до первой точки (включая эту точку)