FAQ Поиск Пользователи Группы ФотоАльбом  Регистрация Войти и проверить личные сообщения Вход
почтовое сообщение, MAPI, Delph'a

 
Начать новую тему   Ответить на тему       Список форумов Forum.profintel.ru -> Программерский раздел
Предыдущая тема :: Следующая тема  
Автор Сообщение
Wizard RAA
Генерал


Репутация: 41    

Зарегистрирован: 17.03.2005
Сообщения: 3010
Откуда: из Ордена Полуночи, 248 сегмент

СообщениеДобавлено: Пт Авг 24, 2007 11:30 am    Заголовок сообщения: почтовое сообщение, MAPI, Delph'a Ответить с цитатой

Возникла надобность из программы создать почтовое сообщение.

Пишу:
Код:

var
  lib : HModule;
  SM : TFMapiSend; // тип функции объявлен выше с нужными параметрами
  msg : TMapiMessage; // письмо
begin
  ....
  lib := LoadLibrary(PChar('Mapi32.dll'));
  If lib <> 0 then begin
    @SM := GetProcAddress(lib, 'MAPISendMail');
    If SM <> nil then SM(0, Application.Handle, msg, MAPI_DIALOG or MAPI_LOGON_UI, 0);
    end;
  ....
end;

Всё бы ничего, но открывшееся окно с письмом является модальным (т.е. нельзя дальше работать с основной программой пока не закроешь/отправишь это письмо)

Как же сделать, чтобы можно было обратно табулироваться не закрывая этого окна?

У меня есть подозрения, что можно передать хэндл не программы, а какой-нибудь сторонней программе, например оутлуку? Сработает ли?
Но тогда нужно как-то узнать программу для почтовых сообщений выбранных по умолчанию, проверить не запущена она ли, если нет - запустить её, узнать её хэндл и потом уже передавать
Как всё это реализовать?

_________________
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
-=Tujh=-
Генерал Майор


Репутация: 8    

Зарегистрирован: 22.05.2005
Сообщения: 6414


СообщениеДобавлено: Сб Авг 25, 2007 2:43 pm    Заголовок сообщения: Ответить с цитатой

а Form1.Handle или вообще nil не поможет ?
Не работал с этой библиотекой, просто подумалось вот Embarassed

_________________
My soul in embraces of a crow.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Wizard RAA
Генерал


Репутация: 41    

Зарегистрирован: 17.03.2005
Сообщения: 3010
Откуда: из Ордена Полуночи, 248 сегмент

СообщениеДобавлено: Сб Авг 25, 2007 6:02 pm    Заголовок сообщения: Ответить с цитатой

-=Tujh=-, пробовал, не помогает
_________________
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Vidik
Полковник


Репутация: 167    

Зарегистрирован: 22.03.2007
Сообщения: 2579


СообщениеДобавлено: Вс Сен 16, 2007 2:49 pm    Заголовок сообщения: Ответить с цитатой

сразу скажу, что писал не я, так как ВАЩЕ не шарю в программировании, Embarassed

{
Shellexecute(Handle,'open','mailto:aaaa@bbb.com?subject&body=body
text&CC=aaaa&bcc=dddd&attach=FileName',nil,nil,SW_SHOW)
only works with outlook, not for outlook express,
but the method below can send attachment to outlook express
}

uses
ComObj;

procedure SendMail(Subject, Body, RecvAddress : string; Attachs : array of string);
var
MM, MS : Variant;
i : integer;
begin
MS := CreateOleObject('MSMAPI.MAPISession');
try
MM := CreateOleObject('MSMAPI.MAPIMessages');
try
MS.DownLoadMail := False;
MS.NewSession := False;
MS.LogonUI := True;
MS.SignOn;
MM.SessionID := MS.SessionID;

MM.Compose;

MM.RecipIndex := 0;
MM.RecipAddress := RecvAddress;
MM.MsgSubject := Subject;
MM.MsgNoteText := Body;

for i := Low(Attachs) to High(Attachs) do
begin
MM.AttachmentIndex := i;
MM.AttachmentPathName := Attachs[i];
end;
MM.Send(True);
MS.SignOff;
finally
VarClear(MS);
end;
finally
VarClear(MM);
end;
end;

procedure TForm1.FormCreate(Sender : TObject);
begin
SendMail('Subject', 'Body'#13#10'Second' , 'BillGates@Microsoft.com',
['C:\Winnt\explorer.exe', 'C:\winnt\win.ini']);
end;

а так вроде можно открыть стандартного клиента
uses Registry
;

procedure OpenMailClient;
const
cMailClient = '\SOFTWARE\Clients\Mail\';
var
reg: TRegistry;
RegClientDefault: string;
begin
reg := TRegistry.Create;
try
with reg do
begin
CloseKey;
RootKey := HKEY_LOCAL_MACHINE;
if OpenKeyReadOnly(cMailClient) then RegClientDefault := reg.ReadString('');
if OpenKeyReadOnly(cMailClient + RegClientDefault + '\shell\open\command') then
WinExec(PChar(ReadString('')), SW_SHOWNORMAL);
end;
finally
reg.Free;
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
OpenMailClient;
end;
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Wizard RAA
Генерал


Репутация: 41    

Зарегистрирован: 17.03.2005
Сообщения: 3010
Откуда: из Ордена Полуночи, 248 сегмент

СообщениеДобавлено: Сб Сен 22, 2007 7:38 pm    Заголовок сообщения: Ответить с цитатой

Vidik, спасибо, попробую
_________________
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
LVS
Майор


Репутация: 32    

Зарегистрирован: 01.10.2005
Сообщения: 1169


СообщениеДобавлено: Вс Сен 23, 2007 1:33 pm    Заголовок сообщения: Ответить с цитатой

Еще можно сгенерировать .eml файл (его структура очень проста), сохранить на жестком, и открыть его дефолтным почтовиком (как было выше).
_________________
© 2008, LVS
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Wizard RAA
Генерал


Репутация: 41    

Зарегистрирован: 17.03.2005
Сообщения: 3010
Откуда: из Ордена Полуночи, 248 сегмент

СообщениеДобавлено: Ср Окт 31, 2007 10:13 pm    Заголовок сообщения: Ответить с цитатой

Vidik писал(а):

MS := CreateOleObject('MSMAPI.MAPISession');
MM := CreateOleObject('MSMAPI.MAPIMessages');

Недопустимая строка с указанием класса

_________________
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Wizard RAA
Генерал


Репутация: 41    

Зарегистрирован: 17.03.2005
Сообщения: 3010
Откуда: из Ордена Полуночи, 248 сегмент

СообщениеДобавлено: Пт Dec 14, 2007 6:06 pm    Заголовок сообщения: Ответить с цитатой

Вобщем,

способ с объектами выдаёт ошибки,

через ShellExecute не хочет,

.eml файл - сложности с созданием вложений,

так что тема до сих пор актуальна

_________________
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Начать новую тему   Ответить на тему       Список форумов Forum.profintel.ru -> Программерский раздел Часовой пояс: GMT + 6
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете вкладывать файлы
Вы не можете скачивать файлы