пятница, 12 июля 2013 г.

MS Outlook имя почтового адресса в качестве имени пользователя

Столкнулся с задачей по изменению огромному количеству пользователей имени пользователя в программе Outlook.

В чем соль:
Каждый пользователь имеет почтовый адресс, но на сервере для отправки используется учетная запись пользователя.
Пример:
Почтовый адресс: super.puperuser@server.com
авторизация: domen\ivanov.ivan
пароль: **********

из за перехода на hMail Server поставили задачу заменить domen\****** на запись почтового адреса.



Народу править  много.... да и пешком ходить не охота.

Реализовал все это на Delphi

program chMailUser;
uses
  SysUtils,
  Classes,
  Dialogs,
  windows,
  Variants,
  Registry;
const
 //По данному пути Outlook хранит свои профили учетных записей
  Profiles='Software\Microsoft\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles\';
type
TBuff=array [0..64] of Byte;

var
  KeyExist:TStringList;
  i,k:integer;
  SysReg:Tregistry;
  email,pop3:TBuff;
  semail,spop3:string;
  flag:boolean;
  info : TRegDataInfo;


//Процедура которая переберет все учетные записи в поисках Outlook
procedure FindReg(const Key: string);
  var
    prf:TStringList;
    i: integer;
    reg:Tregistry;
  begin
    reg:=Tregistry.Create;
    Reg.RootKey:=HKEY_CURRENT_USER;
    reg.OpenKey(Key, false);
    prf:= tstringlist.Create;
    reg.GetKeyNames(prf);
    if(prf.Count>0) then
      begin
        for I := 0 to prf.Count-1 do
          begin
           FindReg(Key+'\'+prf.Strings[i]);
          end;
      end
      else
      begin
       if (reg.ValueExists('Email')) and( reg.ValueExists('POP3 User')) then
          KeyExist.Add(Key);
      end;
    reg.CloseKey;
    reg.Free;
  end;

begin
  KeyExist:=TStringList.Create;
  FindReg(Profiles);
  for I := 0 to KeyExist.Count-1 do
    begin
     SysReg:=TRegistry.Create;
     SysReg.RootKey:=HKEY_CURRENT_USER;
     SysReg.OpenKey(KeyExist.Strings[i], false);

     fillchar(Email,sizeof(email),0);
     fillchar(pop3,sizeof(pop3),0);

     SysReg.ReadBinaryData('Email',email,SizeOf(email));
     SysReg.ReadBinaryData('POP3 User',pop3,SizeOf(pop3));
     semail:='';
     spop3:='';
     for k := 0 to sizeOf(email)-1 do semail:=semail+InttoHex(email[k],2);
     for k := 0 to sizeOf(pop3)-1 do spop3:=spop3+InttoHex(pop3[k],2);
     if(semail<>spop3) then
      begin
      SysReg.WriteBinaryData('POP3 User',Email,SizeOf(Email));
      if SysReg.ValueExists('POP3 Use SPA') then
          SysReg.DeleteValue('POP3 Use SPA');
      end;
     SysReg.CloseKey;
     SysReg.Free;
    end;
  KeyExist.Free;
end.


Как результат в конце работы программы на компьютере пользователь будет видеть в Outlook
Почта: super.puperuser@server.com
Пользователь:super.puperuser@server.com
Пароль: *******

После компиляции полученную программу запускаем через скрипт авторизации всем пользователям.
Как результат, на утро все работает по новому =)

Комментариев нет:

Отправить комментарий