Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2018.04.08;
Скачать: [xml.tar.bz2];

Вниз

Email component   Найти похожие ветки 

 
Abcdef123   (2016-04-11 04:28) [0]

Здравствуйте, Мастера!
Уже много лет пользуемся TEmail: MAPI Component. Сейчас похоже, уже он не поддерживается. Исходники есть, но тему отправки и получения емайл не знаю. Возможно, для тех кто в теме, не составит труда подсказать - возможно ли подправить код и если да, то как. Ошибка происходит не на всех компах (у меня, к примеру, работает нормально) , а в зависимости от версии Майкрософт Оутлука, и возможно операционки. ТОчно знаю от пользователей, у кого версия оффиса 2013. По ошибке, на которой вылетает, я поняла, что проискодит в функции Logon. Текст этой фунции прикладываю.
function TEmail.Logon: Integer;
const
 ProfileKey95 = "Software\Microsoft\Windows Messaging Subsystem\Profiles";
 ProfileKeyNT = "Software\Microsoft\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles";
var
 LogonProfile : PChar;
 LogonPassword: PChar;

 ProfileKey   : PChar;

{$IFDEF WIN32}
 Reg : TRegistry;
{$ELSE}
 {$IFDEF UseGenericThunks}
   RegHandle: HKEY;
   RegDataSize: longint;
   RegResult : longint;
 {$ENDIF UseGenericThunks}
{$ENDIF WIN32}

begin
 CheckMapi;

 Result := SUCCESS_SUCCESS;

 { Check if already logged in. }

 if hSession = 0 then
 begin

   if FUseDefProfile then
   begin
   {$IFDEF WIN32}
     Reg := TRegistry.Create;
     try
       { get platform (Win95/NT) dependent profile key                }
       {  code added by Ulrik Schoth schoth@krohne.mhs.compuserve.com }
       if Reg.KeyExists(ProfileKeyNT) then
       begin
         ProfileKey := ProfileKeyNT;
       end
       else
       begin
         ProfileKey := ProfileKey95;
       end;

       Reg.Rootkey := HKEY_CURRENT_USER;
       if Reg.OpenKey(ProfileKey, False) then
       begin
         try
           FProfile := Reg.Readstring("DefaultProfile");
         except
           FProfile := "";
         end;
       end;
     finally
       Reg.Free;
     end;
   {$ELSE}
     {$IFDEF UseGenericThunks}
       if Call32NTError = false then
       begin
         RegResult := RegOpenKeyEx32( HKEY_CURRENT_USER,
                                      ProfileKeyNT,
                                      0,
                                      KEY_QUERY_VALUE,
                                      RegHandle);

         { what, no NT registry entry ?? - then try Win95 entry }
         if RegResult <> ERROR_SUCCESS then
           RegResult := RegOpenKeyEx32( HKEY_CURRENT_USER,
                                        ProfileKey95,
                                        0,
                                        KEY_QUERY_VALUE,
                                        RegHandle);

         RegDataSize := SizeOf(FProfile)-1;
         RegResult := RegQueryValueEx32( RegHandle,
                                         "DefaultProfile",
                                         nil,
                                         REG_SZ,
                                         pointer(PChar(@FProfile)+1),
                                         RegDataSize);
         FProfile[0] := char(StrLen(PChar(@FProfile)+1));

         RegResult := RegCloseKey32(RegHandle);
       end;
     {$ENDIF UseGenericThunks}
   {$ENDIF WIN32}
   end;

   LogonProfile := nil;
   LogonPassword := nil;

   try
     if Length(FProfile) > 0 then
     begin
       LogonProfile := StrPCopy(StrAlloc(Length(FProfile)+1), FProfile);
     end;

     if Length(FPassword) > 0 then
     begin
       LogonPassword := StrPCopy(StrAlloc(Length(FPassword)+1), FPassword);
     end;

     DoBeforeLogon;

     Result := MapiLogon(0, LogonProfile, LogonPassword, flLogonFlags, 0, @hSession);
     if Result <> SUCCESS_SUCCESS then
       Result := MapiLogon(0, nil, nil, flLogonFlags or MAPI_Logon_UI, 0, @hSession);

     if Result = SUCCESS_SUCCESS then
       DoAfterLogon
     else
       DoMapiError(Result);

   finally
     StrDispose(LogonProfile);
     StrDispose(LogonPassword);
   end;
 end;
end;

Помогите, пожалуйста.
Заранее спасибо.
Надежда


 
KilkennyCat ©   (2016-04-11 06:44) [1]

Так и говорит: "ошибка", или есть какие-то подробности?


 
KilkennyCat ©   (2016-04-11 06:47) [2]

http://stackoverflow.com/questions/24826421/deadlock-when-logging-of-using-simple-mapi-temail-component
Посмотрите, как человек задал вопрос. Заодно, может там и ответ найдется.


 
Abcdef123   (2016-04-11 08:24) [3]

To [1] В наших проектах эта функция просто рассматривает результат logon, и если if (Email1.Logon <> EMAIL_OK) then то просто показывает MessageDlg с нашим текстом, что Мапи лог не состоялся. Именно по этому тексту сообщения, о котором  посльзователи сообщили, я и поняла в какой процедуре ошибка.
P.S. EMAIL_OK  это константа, объявленная в email.pas


 
Abcdef123   (2016-04-11 08:31) [4]

To [2] Я согласна, что человек хорошо задал вопрос, предоставил всю информацию. Это потому, что ошибка вылетала на его компе. К сожалению я не могу "спровоцировать" ее на моем компе. Пока исхожу только по предоставленной информации пользователей.
За ссылку спасибо, конечно. Хотя должна сказать, что прежде чем задать свой вопрос здесь, я уже искала ответ в интеренете, в том числе видела и эту страничку. Полько вот на этой страничке ответа тоже нет, есть только предположения. А, поскольку, как я изначально упомянула, что в этой теме я не сильна, поэтому обратилась сюда, может кто поможет.


 
Игорь Шевченко ©   (2016-04-11 10:17) [5]

Так проблема-то в чем ?


 
Abcdef123   (2016-04-11 10:45) [6]

To [5] Ваш вопрос поставил меня в тупик, так как в самом первом посте я описала проблему. Если повторить коротко опять:
Проблема - компонент TEmail не работает с новыми версиями Майкрософт Оутлука.
Почему не работает - не знаю, привела здесь программный код.
Обращение здесь с просьбой помочь "прочитать" код и подправить, чтоб работало со всеми версиями.
Спасибо.


 
sniknik ©   (2016-04-11 10:48) [7]

> По ошибке, на которой вылетает, я поняла, что проискодит в функции Logon.
а как бы привести эту ошибку сюда? чтобы мы тоже могли это понять...

код это конечно хорошо, но нерабочий кусок (не скопировать чтобы воспроизвести ошибку) это ни о чем.

но даже так, не выполняя, код "кривой"
вот этих ключей  
 ProfileKey95 = "Software\Microsoft\Windows Messaging Subsystem\Profiles";
 ProfileKeyNT = "Software\Microsoft\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles";

у меня к примеру нет, первого понятно, но и второго тоже. винда седьмая 64 разрядная, и офис 13-й.

есть что-то похожее -
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\15.0\ClickToRun\REGISTRY\MACHINE\So ftware\Wow6432Node\Microsoft\Windows Messaging Subsystem
НО!!!
к HKEY_LOCAL_MACHINE под обычным юзером, не админом, нет прав... т.что считай что и его нет.

> есть только предположения.
что возможно, то и дают, ответы в стиле "нажми вот эту кнопку ... и все будет ок" невозможны. вернее очень и очень редки.


 
Игорь Шевченко ©   (2016-04-11 18:01) [8]

Abcdef123   (11.04.16 10:45) [6]


> Проблема - компонент TEmail не работает с новыми версиями
> Майкрософт Оутлука.
> Почему не работает - не знаю, привела здесь программный
> код.


А что в этом коде не работает ?


 
DVM ©   (2016-04-11 18:11) [9]

1) В коде нет вывода ошибок. Вот это DoMapiError(Result) ошибку в читабельный вид разве не может преобразовать? Сразу станет все понятно.

2) Советую использовать Extended MAPI



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2018.04.08;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.002 c
2-1460612628
Аши
2016-04-14 08:43
2018.04.08
Файл 4 гигабайта


15-1470771674
NailMan
2016-08-09 22:41
2018.04.08
Мой первый боевой девайс на Arduino полетел!


2-1460381686
Dmk
2016-04-11 16:34
2018.04.08
Перегружаемый код


6-1286108067
Skyhawk99
2010-10-03 16:14
2018.04.08
Проблема с idHTTP и кирилицей


2-1460338110
Abcdef123
2016-04-11 04:28
2018.04.08
Email component





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский