Текущий архив: 2006.08.27;
Скачать: CL | DM;
Вниз
Как правильно приаттачить файлы для отправки через mapi? Найти похожие ветки
← →
Aleksandr. (2006-04-10 16:00) [0]Функция, отправляющая письмо:
function InternalSendMail(aHandle : HWND; const aFrom, aTo, aSubject, aBody, aFileNames : string;
aFlags : integer) : integer;
var
MapiMessage : TMapiMessage;
Sender : TMapiRecipDesc;
PRecip, Recipients : PMapiRecipDesc;
PFiles, Attachments : PMapiFileDesc;
i : Integer;
s : string;
begin
s:=ANSIReplaceText(aTo,",",";");
MapiMessage.nRecipCount:=GetParamCount(s,";");
GetMem(Recipients, MapiMessage.nRecipCount * sizeof(TMapiRecipDesc));
try
with MapiMessage do begin
ulReserved := 0;
lpszSubject := PChar(aSubject);
lpszNoteText := PChar(aBody);
lpszMessageType := nil;
lpszDateReceived := nil;
lpszConversationID := nil;
flFlags := 0;
Sender.ulReserved := 0;
Sender.ulRecipClass := MAPI_ORIG;
Sender.lpszName := PChar(aFrom);
Sender.lpszAddress := PChar(aFrom);
Sender.ulEIDSize := 0;
Sender.lpEntryID := nil;
lpOriginator := @Sender;
PRecip := Recipients;
{$Region "Первого запихиваем в кому"}
if nRecipCount > 0 then begin
PRecip^.ulReserved := 0;
PRecip^.ulRecipClass := MAPI_TO;
PRecip^.lpszName := PChar(GetPAram(1,s, ";"));
PRecip^.lpszAddress := PChar("SMTP:" + GetPAram(1, s,";"));
PRecip^.ulEIDSize := 0;
PRecip^.lpEntryID := nil;
Inc(PRecip)
end;
{$EndRegion}
{$Region "Остальных в bcc"}
for i := 2 to nRecipCount do begin
PRecip^.ulReserved := 0;
PRecip^.ulRecipClass := MAPI_BCC;
PRecip^.lpszName := PChar(GetParam(i,s, ";"));
PRecip^.lpszAddress := PChar("SMTP:" +GetParam(i,s, ";"));
PRecip^.ulEIDSize := 0;
PRecip^.lpEntryID := nil;
Inc(PRecip)
end;
{$EndRegion}
lpRecips := Recipients;
{$Region "аттачим файлы"}
if aFileNames<>"" then begin
s:=ANSIReplaceText(aFileNames,",",";");
nFileCount:=GetParamCount(s,";");
GetMem(Attachments, MapiMessage.nFileCount * sizeof(TMapiFileDesc));
PFiles := Attachments;
if nFileCount > 0 then begin
for i := 1 to GetParamCount(s,";") do begin
Attachments^.lpszPathName := PChar(GetParam(i,s,";"));
Attachments^.lpszFileName := PChar(ExtractFileName(GetParam(i,s,";")));
Attachments^.ulReserved := 0;
Attachments^.flFlags := 0;
Attachments^.nPosition := Cardinal(-1);
Attachments^.lpFileType := nil;
Inc(Attachments)
end
end;
lpFiles := PFiles
end
else begin
nFileCount := 0;
lpFiles := nil
end
{$EndRegion}
end;
Result:=MapiSendMail(0, aHandle, MapiMessage, aFlags, 0)
finally
FreeMem(Recipients, MapiMessage.nRecipCount * sizeof(TMapiRecipDesc))
end
end;
GetParamCount и GetParam - возвращают число последовательностей текстов, разделенных указанным знаком, и саму последовательность соответственно.
Проблема в том, что при указании вложенных файлов в получившемся письме получается какой-то сдвиг по фазе - файлы в письмо вкладываются (размер корректно показывается), но их имена частично подменяются куском пути или пропадают два последних символа из расширения, что, соответственно, приводит к проблемам при открытии вложений получателем. В чем ошибка, никто с таким не сталкивался?
← →
DSKalugin © (2006-04-10 18:33) [1]полный путь к файлу должен быть в двойных кавычках, т.е.
"C:\Documents and Settings\Dmitry\Рабочий стол\файл.ехе"
иначе ExtractFileName() вернет Documents
и тому подобное для путей с пробелами
← →
Aleksandr. (2006-04-11 12:20) [2]Прикол. Включил я имя файла в кавычки, и теперь ExtractFileName возвращает из пути "C:\Documents and Settings\Administator\Рабочий стол\файл.ехе" имя файла файл.exe"! Кривая функция, однака...
← →
Aleksandr. (2006-04-11 12:48) [3]Кстати, о птичках. После взятия в двойные кавычки mapi вообще письмо не создает. Только активизирует почтовик.
← →
Dmitrij_K (2006-04-11 15:33) [4]
> DSKalugin © (10.04.06 18:33) [1]
>
> полный путь к файлу должен быть в двойных кавычках, т.е.
>
> "C:\Documents and Settings\Dmitry\Рабочий стол\файл.ехе"
> иначе ExtractFileName() вернет Documents
> и тому подобное для путей с пробелами
Не обманывай людей!
Никаких двойных кавычек. ExtractFileName работает как надо
← →
Aleksandr. (2006-04-11 17:52) [5]трабла утряслась. Всего-то надо было StrNew для PChar вызвать...
Страницы: 1 вся ветка
Текущий архив: 2006.08.27;
Скачать: CL | DM;
Память: 0.47 MB
Время: 0.035 c