Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2018.04.08;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.004 c
15-1470771674
NailMan
2016-08-09 22:41
2018.04.08
Мой первый боевой девайс на Arduino полетел!


8-1243634121
novarm44
2009-05-30 01:55
2018.04.08
Тормоза Direct3D и OpenGL под Vista и Windows 7


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


1-1357117761
shopgirl1987
2013-01-02 13:09
2018.04.08
Автоматический прием WM-платежей и Delphi


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