HI. Chcialbym napisac programik, ktory sciagnie mi wszystkie maile ze skrzynki (lacznie z zalacznikami).
Moj problem polega na tym ze jak pobieram maila za pomoca komponentu TIdMessage to nazwa zalacznika jest nastepujaca:
'=?UTF-8?Q?Lab=5FSprawozdanie_(JOS).doc?='
a powinna byc :
"Lab_Sprawozdanie_(JOS).doc.
Czy ktos moglby mi wytlumaczyc dlaczego tak jest i jak to naprawic ??
Musze wspomniec ze z temacie wiadomosci tez takie cos wystepuje, niestety.
z gory wielkie dzieki
jak chcesz mogę wkleić kod do odbierania wiadomości ale przy pomocy synapse, bo jak dla mnie indy to badziew
Chodzi mi przede wszystkim o mozliwosc sciagniecia wszystkich maili ze skrzynki na dysk w takiej postaci jak sa wyswietlane na stronce (czyli jezeli zalacznik ma nazwe "zalacznik.doc" to zeby tak sie nazywal plik po sciagnieciu.). Jezeli masz mozliwosc to wklej ten kod. bede bardzo wdzieczny :)
synapse, synapse...
Co do załączników w INDY a nie w jakimś syŁnApśę to cosik takiego u mnie działa w 100%
var IleWiad, IleZal: integer;
SaveAtt: string;
POP3: TidPOP3;
Mes: TidMessage;
[...]
IleWiad:= POP3.CheckMessages;
while IleWiad > 0 do
begin
Mes.Clear;
POP3.Retrieve(IleWiad,Mes);
// odbieranie zalocznikow
IleZal:= Mes.MessageParts.Count - 1;
for i := IleZal downto 0 do
begin
if (Mes.MessageParts.Items[IleZal] is TIdAttachment) then
begin
SaveATT:= TIdAttachment(Mes.MessageParts.Items[IleZal]).Filename;
TIdAttachment(Mes.MessageParts.Items[IleZal]).SaveToFile(ExtractFilePath(ParamStr(0)) +'C:\Temp\' + SaveATT);
end;
Dec (IleZal);
end;
Dec (IleWiad);
end;
[...]
Dokladnie tak robie tylko ze ta funkcja : TIdAttachment(Mes.MessageParts.Items[IleZal]).Filename; zwraca mi oprocz nazwy zalacznika, inne jakies dziwne znaki, tak jak napisalem wyzej i w tym jest caly problem. Zeby bylo jasniej probuje sciagnac maile z o2.pl. Nawiasem mowiac nie mam zielonego pojecia jak sie polaczyc z mail.yahoo.com czy gmail.com.
Problem leży po stronie o2.pl. Przy wysyłaniu maila dodaje on jakieś swoje znaczniki. Spróbuj wysłać maila np. z poczty gmail czy onetu na twoje konto na o2, wtedy wszystko będzie ok.
Co do łączenia się z yahoo i gmail to te poczty mają inne porty smtp i pop3
piochu napisał(a)
synapse, synapse...
Co do załączników w INDY a nie w jakimś syŁnApśę to cosik takiego u mnie działa w 100%
nie masz pojęcia to się nie wypowiadaj. Miałem do czynienia z łindiy i potwierdza się kolejny raz zasada jak coś jest do wszystkiego to jest do niczego.
pop := TPOP3Send.Create;
MimeMsg := TMimeMess.Create;
try
pop.AuthType := POP3AuthAll;
pop.TargetHost := Host;
pop.TargetPort := Port;
pop.UserName := UserName;
pop.Password := UserPass;
if pop.Login then
begin
if pop.List(0) then
begin
for i := 0 to pop.FullResult.Count - 1 do
begin
if pop.Retr(i + 1) then
begin
MimeMsg.Lines.Assign(pop.FullResult);
MimeMsg.DecodeMessage;
MimeParts := MimeMsg.MessagePart;
Subject := MimeMsg.Header.Subject;
Ct.Assign(MimeMsg.Header.ToList);
case MimeParts.PrimaryCode of
MP_TEXT:
begin
MimeParts.DecodePart;
SetLength(s, MimeParts.DecodedLines.Size);
MimeParts.DecodedLines.Read(Pointer(s)^, MimeParts.DecodedLines.Size);
Body := ReplaceCRLF(s); //replaceCRLF to moja funkcja, która zamienia nixowe i macowe końce lini na windowsowe
end;
MP_MULTIPART:
begin
for j := 0 to MimeParts.GetSubPartCount - 1 do
begin
MimePart := MimeParts.GetSubPart(j);
MimePart.DecodePart;
if Length(Trim(MimePart.FileName)) = 0 then
begin
SetLength(s, MimePart.DecodedLines.Size);
MimePart.DecodedLines.Read(Pointer(s)^, MimePart.DecodedLines.Size);
Body := ReplaceCRLF(s);
end
else begin
AttachmentName := MimePart.FileName;
MimePart.DecodedLines //tu masz stream z załącznikiem
end;
end;
end;
end;
pop.Dele(i + 1);
end;
end;
end;
pop.Logout;
end;
finally
FreeAndNil(MimeMsg);
FreeAndNil(pop);
end;
A te synapse jest gdzies na zakladce jakiejs ??. Posiadam Delphi 7. ale nigdzie jakos tego nie widze.
Tu masz synapse http://www.torry.net/vcl/internet/packs/synapse.zip
A tu ktoś miał ten sam problem co Ty: http://coding.derkeiler.com/Archive/Delphi/alt.comp.lang.borland-delphi/2007-06/msg00005.html
Ewentualnie możesz wykorzystać cosik takiego:
function BezKrzakow (var Tekst: string): String;
begin
Tekst:= AnsiReplaceStr (Tekst,'=?UTF-8?Q?','');
Tekst:= AnsiReplaceStr (Tekst,'?=','');
Tekst:= AnsiReplaceStr (Tekst,'=?','');
Tekst:= AnsiReplaceStr (Tekst,'=_UTF-8_Q_','');
Tekst:= AnsiReplaceStr (Tekst,'_=','');
Result:= Tekst;
end;
Z nazwami załączników sobie radzi...