Столкнулся с задачей по изменению огромному количеству пользователей имени пользователя в программе 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
Пароль: *******
После компиляции полученную программу запускаем через скрипт авторизации всем пользователям.
Как результат, на утро все работает по новому =)
В чем соль:
Каждый пользователь имеет почтовый адресс, но на сервере для отправки используется учетная запись пользователя.
Пример:
Почтовый адресс: 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
Пароль: *******
После компиляции полученную программу запускаем через скрипт авторизации всем пользователям.
Как результат, на утро все работает по новому =)
Комментариев нет:
Отправить комментарий