Обнаружил глюк в компонентах (Version 3.00) JEDDI (JCL+JVCL), в компоненте TJvMail, если конкретно. При отправке письма появляется такое сообщение. Исправляем: по этому пути в реестре нужно добавить пару строковых параметра 1. MAPIX 2. MAPIXVER я их не заполнял, ошибка исчезла | Код | Mail1 - TJvMail procedure TfmSendFiles.ByOutlook; Var _iF:integer; begin bbSend.Enabled:=False; if uInet.ConnectedToInternet = ctNone then begin ShowMessage('Нет подключения к сети интернет'); exit; end;//if
Mail1.Clear; //если в списке адресов пусто, то используем адрес из настроек if cbAddress.Text <> '' then Mail1.Recipient.AddRecipient(ledAdress.Text) else Mail1.Recipient.AddRecipient(cbAddress.Text);
Mail1.Subject := ledSubj.Text; Mail1.Body.Text := memoProto.Text; //пробегаем по списку выбранных файлов For _iF:=0 to lvFilesToSend.Items.Count-1 do if lvFilesToSend.Items[_if].Checked then Mail1.Attachment.Append(fmMain.sPathToSave+lvFilesToSend.Items[_if].Caption); -> mail1.SendMail(true);<-здесь ошибка DeleteSended; bbSend.Enabled:=True; ShowMessage('Готово'); if cbAutoHungUp.Checked then HungUp; end;
| Добавлено @ 15:47 в JclMapi есть процедура, которая пытается прочесть эти ключи | Код | procedure TJclSimpleMapi.ReadMapiSettings; const MessageSubsytemKey = 'SOFTWARE\Microsoft\Windows Messaging Subsystem'; MailClientsKey = 'SOFTWARE\Clients\Mail'; var DefaultValue, ClientKey: string; SL: TStringList; I: Integer;
function CheckValid(var Client: TJclMapiClient): Boolean; var I: Integer; LibHandle: THandle; begin LibHandle := LoadLibraryEx(PChar(Client.ClientPath), 0, DONT_RESOLVE_DLL_REFERENCES); Result := (LibHandle <> 0); if Result then begin for I := Low(MapiExportNames) to High(MapiExportNames) do if GetProcAddress(LibHandle, PChar(MapiExportNames[I])) = nil then begin Result := False; Break; end; FreeLibrary(LibHandle); end; Client.Valid := Result; end;
begin FClients := nil; FDefaultClientIndex := -1; FProfiles := nil; FDefaultProfileName := ''; SL := TStringList.Create; try if RegKeyExists(HKEY_LOCAL_MACHINE, MessageSubsytemKey) then begin FMapiInstalled := RegReadStringDef(HKEY_LOCAL_MACHINE, MessageSubsytemKey, 'MAPIX', '') = '1'; FSimpleMapiInstalled := RegReadStringDef(HKEY_LOCAL_MACHINE, MessageSubsytemKey, 'MAPI', '') = '1'; FMapiVersion := RegReadStringDef(HKEY_LOCAL_MACHINE, MessageSubsytemKey, 'MAPIXVER', ''); end; FAnyClientInstalled := FMapiInstalled; if RegKeyExists(HKEY_LOCAL_MACHINE, MailClientsKey) then begin DefaultValue := RegReadStringDef(HKEY_LOCAL_MACHINE, MailClientsKey, '', ''); if RegGetKeyNames(HKEY_LOCAL_MACHINE, MailClientsKey, SL) then begin SetLength(FClients, SL.Count); for I := 0 to SL.Count - 1 do begin FClients[I].RegKeyName := SL[I]; FClients[I].Valid := False; ClientKey := MailClientsKey + '\' + SL[I]; if RegKeyExists(HKEY_LOCAL_MACHINE, ClientKey) then begin FClients[I].ClientName := RegReadStringDef(HKEY_LOCAL_MACHINE, ClientKey, '', ''); FClients[I].ClientPath := RegReadStringDef(HKEY_LOCAL_MACHINE, ClientKey, 'DLLPath', ''); ExpandEnvironmentVar(FClients[I].ClientPath); if CheckValid(FClients[I]) then FAnyClientInstalled := True; end; end; FDefaultClientIndex := SL.IndexOf(DefaultValue); FSelectedClientIndex := FDefaultClientIndex; end; end; if RegKeyExists(HKEY_CURRENT_USER, ProfilesRegKey) then begin FDefaultProfileName := RegReadStringDef(HKEY_CURRENT_USER, ProfilesRegKey, 'DefaultProfile', ''); if RegGetKeyNames(HKEY_CURRENT_USER, ProfilesRegKey, SL) then begin SetLength(FProfiles, SL.Count); for I := 0 to SL.Count - 1 do FProfiles[I] := SL[I]; end; end; finally SL.Free; end; end;
| Добавлено @ 15:49 не в XP, не в 98-ой нет таких параметров в реестре
Присоединённый файл ( Кол-во скачиваний: 7 )
111.JPG
|