idpop3在保存附件进数据库出错 |
缺席
|
sl@cableplus.com.cn
高階會員 發表:168 回覆:359 積分:130 註冊:2004-03-26 發送簡訊給我 |
|
hagar
版主 發表:143 回覆:4056 積分:4445 註冊:2002-04-14 發送簡訊給我 |
http://groups.google.com.tw/groups?hl=zh-TW&lr=&ie=UTF-8&selm=3f4b2f0b%40newsgroups.borland.com&rnum=2
if (Msg.MessageParts.Count <> 0) OR (Pos('multipart/', Msg.ContentType) <> 0) then begin // try to fix the quoted-printable bug with Msg.MessageParts do if (Count = 1) and (Items[0] is TidText) and (Items[0].ContentType = '') then Items[0].ContentType := Msg.ContentType; // this is a multipart mime message msg.body is invalid for j := 0 to Msg.MessageParts.Count - 1 do begin if (Msg.MessageParts.Items[j] is TIdAttachment) then begin // handle attachments // take out some special characters fName := GenerateSaveFileName(TIdAttachment(Msg.MessageParts.Items[j]).Filename); att := attachmentPath '\' fName; att := GenerateUniqueFileName(att); try TIdAttachment(Msg.MessageParts.Items[j]).SaveToFile(att); attList := attList ExtractFileName(att) Chr(13); except on e:Exception do WriteToLog('EMAIL: exception in domessages: ' e.Message ' while saving to ' att ' of msg nr. ' inttostr(i)); end; {end try} end else // handle body text if Msg.MessageParts.Items[j] is TIdText then if Pos('text/plain', Msg.MessageParts[j].ContentType) > 0 then // It's a text part... for k := 0 to TIdText(Msg.MessageParts.Items[j]).Body.Count-1 do // save body text mensagem := mensagem TIdText(Msg.MessageParts.Items[j]).Body.Strings[k] Chr(13) Chr(10) else if Pos('text/html', Msg.MessageParts[j].ContentType) > 0 then // It's a HTML part for k := 0 to TIdText(Msg.MessageParts.Items[j]).Body.Count-1 do // save body text mensagemHTML := mensagemHTML TIdText(Msg.MessageParts.Items[j]).Body.Strings[k] Chr(13) Chr(10); end; { end for } end else { end if } begin // this is a text/* message // idMessage.Body contains the entire body for j := 0 to Msg.Body.Count-1 do // save body text mensagem := mensagem Msg.Body.Strings[j] Chr(13) Chr(10); end; |
sl@cableplus.com.cn
高階會員 發表:168 回覆:359 積分:130 註冊:2004-03-26 發送簡訊給我 |
|
hagar
版主 發表:143 回覆:4056 積分:4445 註冊:2002-04-14 發送簡訊給我 |
|
sl@cableplus.com.cn
高階會員 發表:168 回覆:359 積分:130 註冊:2004-03-26 發送簡訊給我 |
我的代码如下:
IdMessage1.MessageParts.CountParts;
if IdMessage1.MessageParts.AttachmentCount > 0 then
begin
for i := 0 to IdMessage1.MessageParts.Count - 1 do
begin
if (IdMessage1.MessageParts.Items[i] is TIdAttachment) then
begin
AdoOAEAttach.Parameters.ParamByName('attachname').Value := Base64Decode(TIdAttachment(IdMessage1.MessageParts.Items[i]).FileName);
fName :=
Base64Decode(TIdAttachment(IdMessage1.MessageParts.Items[i]).Filename);
if TIdAttachment(IdMessage1.MessageParts.Items[i]).SaveToFile(fName) then
AdoOAEAttach.Parameters.ParamByName('attach').LoadFromFile(fName, ftBlob);
AdoOAEAttach.ExecSQL;
请问少了什么?
|
hagar
版主 發表:143 回覆:4056 積分:4445 註冊:2002-04-14 發送簡訊給我 |
|
sl@cableplus.com.cn
高階會員 發表:168 回覆:359 積分:130 註冊:2004-03-26 發送簡訊給我 |
就是附件的名称(不带路径的)
有时能保存有时就会出错
出错时调用了下面函数:
function TIdAttachment.SaveToFile(const FileName: TFileName): Boolean;
begin
Result := CopyFileTo(StoredPathname, FileName);
if not Result then begin
raise EIdException.Create(RSTIdMessageErrorSavingAttachment);
end;
end;
|
hagar
版主 發表:143 回覆:4056 積分:4445 註冊:2002-04-14 發送簡訊給我 |
http://groups.google.com.tw/groups?hl=zh-TW&lr=&ie=UTF-8&th=bf369363981694b9&rnum=1
由這篇回答來看, 檢查幾點:
1.要存檔時所得的 fName 值是不是合法的檔名
2.若是合法的檔名的話, 這個檔是不是已經存在了
3.可以用 GetLastError 來取得實際的錯誤訊息
begin IdMessage1.MessageParts.CountParts; if IdMessage1.MessageParts.AttachmentCount > 0 then begin for i := 0 to IdMessage1.MessageParts.Count - 1 do begin if (IdMessage1.MessageParts.Items[i] is TIdAttachment) then begin AdoOAEAttach.Parameters.ParamByName('attachname').Value := Base64Decode(TIdAttachment(IdMessage1.MessageParts.Items[i]).FileName); fName := Base64Decode(TIdAttachment(IdMessage1.MessageParts.Items[i]).Filename); if FileExists(fName) then DeleteFile(fName); try if TIdAttachment(IdMessage1.MessageParts.Items[i]).SaveToFile(fName) then AdoOAEAttach.Parameters.ParamByName('attach').LoadFromFile(fName, ftBlob); AdoOAEAttach.ExecSQL; except ShowMessage(SysErrorMessage(GetLastError)); end; // ... end; |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |