Показать сообщение отдельно
Старый 16.09.2009, 14:39   #19  
zZ_TOP_Zz is offline
zZ_TOP_Zz
int 20h
Аватар для zZ_TOP_Zz
 
143 / 24 (1) +++
Регистрация: 26.02.2007
Адрес: Санкт -Петербург
Всем спасибо огромное за помощь разобралися. Вопрос снимается.

blokva Вы правы. Так мы и поступили

Кому интересно как это реализовать вот пример, на вход передаем COM объект message на выходе получаем строку адреса отправителя. Маленько геморно получилось, но работает

Процедуру combyDisp взял тут

X++:
str SenderEMail(Com _message)
{
    #define.PR_SENDER_EMAIL_ADDRESS(0x0C1F001F)
    #Define.CdoPR_SENDER_EMAIL_ADDRESS(0x39FE001E)
    #Define.CdoPR_EMAIL_ADDRESS(0x3003001E)
    #Define.CdoPR_ADDRTYPE(0x3002001E)

    COMVariant  to;
    COM         recipients;
    COM         fields;
    COM         obj;
    COM         comAddressType;
    COM         field;
    ComVariant  fieldId, fieldName;
    ComVariant  toField;
    ComVariant  addressType;
    str         strAddressType;
    str         s;


    
    COM combydisp(COMVariant _var)
    {
        ;

        if (_var.variantType() != COMVariantType::VT_DISPATCH)
            throw Error(strfmt("bad variant type (%1)",_var.variantType()));
        
        if (!_var.iDispatch())
            return null;

        return COM::createFromVariant(_var);
    }
    
    ;


    recipients = combydisp(_message.Sender());

    fields = combydisp(recipients.Fields());

    comAddressType = combydisp(fields.Item(#CdoPR_ADDRTYPE));
    addressType = comAddressType.Value();
    strAddressType = addressType.bStr();

    switch(strAddressType)
    {
        case "SMTP" :
            obj = combydisp(fields.Item(#CdoPR_EMAIL_ADDRESS));
            toField = obj.Value();
            break;
        default:
            obj = combydisp(fields.Item(#CdoPR_SENDER_EMAIL_ADDRESS));
            toField = obj.Value();
            break;
    }

    s = toField.bStr();

    return s;
}
__________________
It's just my Unhopelessnessabilityerism
Trying to debug my mind