Levél fogadása delphi-ban
Levél fogadása a Delphi-ban
Jó nap mindenkinek. Azt szeretném megkérdezni, hogyan mentheti el a csatolt fájlokat a levélhez.
eljárás TForm1.Button1Kattintson (Feladó: TObject);
var Saját üzenet: # xA0; TIdMessage;
# xA0; # xA0; CountMessages: Integer;
# xA0; # xA0; attach: TIDAttachment;
kezdődik
MyMessage: = TIdMessage.Create (null);
IdPOP31.Connect ();
CountMessages: = IdPOP31.CheckMessages ();
míg a CountMessages> 0 megkezdődik
ha IdPOP31.Retrieve (CountMessages, MyMessage) = Igaz, akkor kezdődik
# xA0; # xA0; RichEdit1.Lines.Assign (MyMessage.Body);
# xA0; # xA0; attach: = TIDAttachment.Create (MyMessage.MessageParts);
# xA0; # xA0; // Aztán nem tudom, mit tegyek (a mellékletekhez képest)
# xA0; //attach.SaveToFile(const Fájlnév: TFeliName): Boolean - ez a funkció a segédeszközben működik, nincs adat és példa az indy komponensekre.
végén;
CountMessages: = CountMessages - 1;
végén;
ShowMessage (IntToStr (IdPOP31.CheckMessages ())));
MyMessage.Free;
IdPOP31.Disconnect;
végén;
> Hogyan működik ez a funkció a segítségnyújtásban? Nincs adat
Itt egy ajánlat csak a segítségtől a funkcióig:
Üzenet tárol.
function SaveToFile (const Fájlnév: TFileName): Boolean;
const Fájlnév: TFileName
Az üzenet tárolási helye.
Boolean - Igaz, ha az üzenetrészeket tárolja.
A SaveToFile egy Boole-függvény, amelyet a fájlnévben megadott fájlhoz tartozó melléklet tárolására használnak.
Minden egyszerű és világos, mi szükséges?
a következőhöz: i: = 0 a csatoláshoz.Count - 1 do
# xA0; ha a [i] csatolást a TIdAttachmentFile, akkor
# xA0; # xA0; csatolja a [i] .SaveToFile fájlt (csatolja [i] .FileName);
> i: = 0 csatolásához. Összeg - 1 do
> # xA0; ha a [i] csatolást a TIdAttachmentFile, akkor
> # xA0; # xA0; csatolja a [i] .SaveToFile fájlt (csatolja [i] .FileName);
Tehát nem segít csatolni nincs sv-va vagy eljárás Count # xA0; - a fordítás során pirosra mutat, talán nem használok minden egységet.
> Hogy nem?
miért ez az üzenet? Ezt láttam már a TIdMessage és a
TIDAttachment.
> miért ez az üzenet?
Mindig egy sorban, nyilvánvalóan.
És honnan kérdezte, hogy ön külön fájlban kíván különálló részt menteni?
> attach nincs sv-va vagy eljárás Count
Lásd a TIdMessage.MessageParts.AttachmentCount fájlt
> Lásd a TIdMessage.MessageParts.AttachmentCount fájlt
Ez érthető az sv-in tartalmazza a mellékletek számát, és hogyan lehet mindegyiket külön menteni a merevlemezre?
Talán tévedek?
IGEN, ez ostobaság
használ. IdMessageParts.
var
# xA0; attfile: TIdAttachmentFile;
a MyMessage.MessageParts do
# xA0; az i: = 0 a gráf - 1 do
# xA0; # xA0; # xA0; # xA0; ha elemek [i] .PartType = mptAttachment akkor
# xA0; # xA0; # xA0; # xA0; # xA0; kezdődik
# xA0; # xA0; # xA0; # xA0; # xA0; # xA0; attfile: = Tételek [i] mint TIdAttachmentFile;
# xA0; # xA0; # xA0; # xA0; # xA0; # xA0; attfile.SaveToFile (attfile.FileName);
# xA0; # xA0; # xA0; # xA0; # xA0; végén;
> használ. IdMessageParts.
Most szidtam meg [Halálos hiba] Unit1.pas (8): A fájl nem található: "IdMessageParts.dcu"
> attfile: TIdAttachmentFile;
és itt [Hiba] Unit1.pas (37): Nem bejelentett azonosító: "TIdAttachmentFile"
> [Halálos hiba] Unit1.pas (8): A fájl nem található: "IdMessageParts.
> dcu "
>
Hát akkor rossz. Mi az Indy változata? A tizedikről beszélek.
> Nos, akkor rossz. Mi az Indy változata? A tizedikről beszélek.
Akkor minden világos 9.00.10 :)
de a 9-ke-ben mindegyiket valahol TIdMessageParts típusnak nevezik. Keresse meg a modulok szövegét, és adja hozzá a szükséges adatokat a felhasználónak.
A TIdMessage tartalmaz olyan MessagePart-okat, amelyek nem rendelkeznek a SaveToFile (.) Függvénnyel, a következő üzenetet küldtem:
TIDAttachment.Create (MainForm.MyMessage.MessageParts, "Unload.xml"); és minden rendben van, és amikor megkapom, nem tudom, hogyan juthatok hozzá a csatolt adatokhoz
talán nem használtam helyesen a TIDAttachmentet.
> de a 9-ke-ben mindegyik valahol a TIdMessageParts típusnak nevezik.
> # xA0; Keresse meg a modulok szövegének keresését, és adja hozzá a szükséges adatokat a felhasználónak.
>
A keresés nem hozott eredményt. (
> A keresés sikertelen
Nem lehet.
Ha nincs problémád a TIdMessage programmal, akkor a TIdMessageParts nem jelenik meg - mindkét ID-ra azonos IdMessage.pas egységben kerül bejelentésre.
Hol és hogyan "kereste" - nem világos)
> Hol és hogyan "keresett" - nem világos)
Search-> Find in Files; Keresd meg a TIdMessageParts-ot
>> Hol és hogyan "keresett" - nem világos)
>
> Keresés -> Keresés a fájlokban; Keresés keresése a TIdMessageParts-ban
Sajnálom, találtam :)
> Keresse meg a modulok szövegét, és adja hozzá a szükséges egységet a felhasználóhoz.
ez szerepel az IdMessage-ban, de ezt én használom.
Én használom
Akkor összetévesztesz valamit.
Pontosan a TIdMessagePartson van, hogy egyáltalán nem lehet "káromkodni".
> Akkor összetévesztesz valamit.
>
> "káromkodás" a TIdMessageParts-on nem lehet semmilyen módon.
>
azaz Var: mess_parts: TIdMessageParts; és minden legyen nishtyak.
így írok.
És az igazság nem esküszik. )
Tovább fogok választani.
>> aztán zavarodtál valamit.
>>
>> a "káromkodás" a TIdMessageParts-on nem lehet semmilyen módon.
>
>>
>
> azaz. Var: mess_parts: TIdMessageParts; és mindent meg kell
hogy nishtyak legyen.
> így írok.
>
És az igazság nem esküszik. )
> Tovább fogok választani.
de a mess_parts nem rendelkezik a SaveToFile függvénnyel
a MyMessage.MessageParts do
# xA0; i: = 0 a grófnak - 1 nem
# xA0; # xA0; # xA0; ha az [i] tétel a TIdAttachment
# xA0; # xA0; # xA0; # xA0; # xA0; # xA0; TIdAttachment (elemek [i]). SaveToFile (TIdAttachment (elemek [i]) .Fájlnév);
> a MyMessage.MessageParts do
> # xA0; i: = 0 a grófnak - 1 nem
> # xA0; # xA0; # xA0; ha az [i] tétel a TIdAttachment
> # xA0; # xA0; # xA0; # xA0; # xA0; # xA0; TIdAttachment (elemek [i]). SaveToFile (TIdAttachment (elemek [i]).
> Fájlnév);
Mint minden nishtyak - már feldolgozott. de.
Írja a lista indexét a határokon kívül (0)
Checked - írta a ShowMessage (IntToStr (MyMessage.MessageParts)) nulla értéket, bár az üzenet két mellékletet tartalmaz. (
> Checked - írta a ShowMessage (IntToStr (MyMessage.MessageParts))
> nulla értéket ad vissza, bár az üzenet két mellékletet tartalmaz.
> :(
Talán az én Exchange gyorsabban veszi fel a leveleket, mint a program. )
Megpróbálok egy másik dobozt.
> Talán az én Exchange gyorsabban veszi fel a leveleket, mint a program.
>. )
> Megpróbálok egy másik dobozt.
Nem ugyanaz a shnyaga
Nos, van egy demo projekt Indy-maildemo.dpr-ben, miért nem tanulmányozod?
> Nos, van egy demo projekt Indy-maildemo.dpr-ben, miért
> nem tanulni?
C: \ Program Files \ Borland \ Delphi7 \ Demos \ Indy - ha ott van, ez egy szöveges fájl, amely a következőket tartalmazza:
Delphi 7
Indy V9 Demos
Az Indy V9 bemutató alkalmazásai elérhetők a
letöltés szakasz az Indy oldalon:
Mivel az új demókat folyamatosan építik és tesztelik,
ez a legfrissebb hely a demo számára
letöltés.
Ha bármilyen problémája van a demókkal kapcsolatban, kérjük, csatlakozzon a
"Indy Demos" csoport yahoo csoportokban, és jelentse azokat
ott:
Megértettem, hogy mi a ciklus - van egy ördög tudja, minti:
CountMessages: = IdPOP31.CheckMessages ();
míg a CountMessages> 0 megkezdődik
# xA0; a MyMessage.MessageParts elindul
# xA0; # xA0; mert i: = 0 a számláláshoz - 1 megkezdődik
# xA0; # xA0; # xA0; ha az [i] tételek a TIdAttachment, akkor kezdődnek
# xA0; # xA0; # xA0; # xA0; # xA0; # xA0; TIdAttachment (elemek [i]). SaveToFile (TIdAttachment (elemek [i]) .Fájlnév);
# xA0; # xA0; # xA0; végén;
# xA0; # xA0; végén;
# xA0; # xA0; vége;
# xA0; CountMessages: = CountMessages - 1;
végén;
A MyMessage.MessageParts mindig ugyanaz az üzenet, pl. nincs átmenet a másikra. Hogyan kell végrehajtani?
> MyMessage.MessageParts mindig ugyanaz az üzenet,
> # xA0; nincs átmenet a másikra. A megvalósítás nem
mondja meg?
Mindent megértettem
IdPOP31.Retrieve (CountMessages, MyMessage)
TIdAttachment (elemek [i]) SaveToFile (TIdAttachment (elemek [i]) .Fájlnév);
E vonal után most szidalmazás írja, hogy nem menthető.
> azt írja, hogy nem menthető
mit és hol? az üzenet teljes szövege lehetséges?
Hiba történt a csatolás mentése közben
És ha egy hibakeresőben megnézzük, hogy mi azonos az Fájlnév-vel?
És hol gondolod, hogy tárolásra kerül?
Írja be - az Undeclare Identifier [i] elemeket, de miután írtam:
SaveToFile (TIdAttachment (MyMessage.MessageParts .Items [i]) .Fájlnév);
Minden dolgozott! Köszönet mindenkinek!
> És hol gondolod, hogy tárolásra kerül?
Ha csak a projekt mappában található nevet adja meg, akkor a "C: \ blah blah blah" + "MyMessage.MessageParts.Items [i])"
> És ha egy hibakeresőben megnézzük, hogy mi azonos a fájlnévvel?
És mit kell keresni és annyira egyértelműen, hogy megegyezik a levélben szereplő információkkal, ha meg van írva.
Előfordulhat, hogy feldolgozni kell egy elfogadható értékre, és meg kell adnia, hogy hova kell menteni, ahogy a levelezők tennék, és nem arra, hogy hol az ördög tudja, mit írjon le.
> Írás - Undeclare azonosító elemek [i], de utána
> Írtam:
Ahogy vártuk - megtévesztett minket.
> Ha csak a projekt mappában megadja a nevet,
csalódás
> Hibás elképzelés
De még mindig megmutatom, hogy hol menthetem meg, és a fájlnevem repedésekből áll, ezért nem tartja fenn - azt hiszem, úgy tűnik problémásnak tűnik a kódolásban.
Mint ahogy vártuk - megtévesztett minket.
Csak itt a fájl neve nem teljesen oroszul - ezért a mentési hiba (úgy gondolom)
> Csak itt a fájlnév nem teljesen oroszul - innen
> és egy mentési hiba (úgy gondolom)
Igen. Az angolul. a nevek csak rendben vannak, de az orosz nevek nem mentenek.
> És mit kell keresni és annyira egyértelműen, hogy megegyezik a levélben szereplő információkkal,
> # xA0, ha írva van.
> Előfordulhat, hogy feldolgozni kell egy elfogadható értékre és meg kell adni, hogy hol
> mentse, mint a postás, és nem az ördög elvitte
> tudja, mit írjon le.
Igen, igazad van, most próbáltad - nem menteni írja az eerror megtakarító mellékletet.
De mi van az orosz fájlnevekkel? AttacmentEncoding. Vagy valami mást?
> Csak a fájlnév nem teljesen oroszul
valami ilyesmi:
=? koi8-r? B? 09fJztjJLnJ0Zg ==? =
> valami ilyesmi:
> =? koi8-r? B? 09fJztjJLnJ0Zg ==? =
Igen. csak a kiterjesztés helyesen jelenik meg :)
> csak a kiterjesztés helyesen jelenik meg
amit nem tudok elhinni. Megmutatja, hogy az összes vagy semmi.
Valami nem hisz. Megmutatja, hogy az összes vagy semmi.
A Vach Windows MyMessage.MessageParts.Items [i]) hibakeresésnél a FileName Value = itt a r? B? 09fJztjJLnJ0Zg.zip típusa
> r? B? 09fJztjJLnJ0Zg.zip
teljes képtelenség. ez nem lehet.
> teljes ostobaság. ez nem lehet.
Most szó szerint írok
Mint ahogy vártuk - megtévesztett minket.
>
> Csak itt a fájlnév nem teljesen oroszul - innen
> és egy mentési hiba (úgy gondolom)
Nem hazudtál itt, nem tudtad megmenteni, nem is csináltad össze a programot!
>> r? B? 09fJztjJLnJ0Zg.zip
>
> teljes ostobaság. ez nem lehet.
"= koi8-rBBa 99nH0tXay8E = a = xml"
fájlnév Unload.xml
Folytatja a tésztát a fülekre.
Nem hazudtál itt, nem lehetett beszélni a megőrzésről,
> # xA0, akkor még nem fordította le a programot!
Hibák, fordítások és hibaüzenetek a RUN időből származnak
> feltérképezték, és a hibaüzenetek a RUN időből származtak
Itt van:
> Írás - Undeclare azonosító elemek [i]
Pontosan nem.
> Folytatja a tésztát a fülekre.
A fájlokat már csak angolul mentették. címei
Nem is kérdeztem az összeállításról. ha igen. És a kérdés az, hogyan kell menteni az "orosz" fájlokat.
Egyébként nagyon sokat köszönünk umbra számára, hogy segítséget és segítséget nyújtson ehhez a feladathoz, de egyelőre véget ér a végére (az orosz nevek nem kerülnek mentésre). (
> Pontosan nem a.
Sajnálom a debugger, de a fordítás nem esküszöm.
100% -ban biztos vagyok benne, hogy ez a fájlnév. # xA0, speciális karaktereket tartalmaz (ha a mellékelt fájl oroszul van)
> = koi8-rBBa 99nH0tXay8E = a =
az első kérdőjel után - a cím kódolása
a második - az átviteli kódolási módszer, In-Base64, Q - idézett-nyomtatható
a harmadik után és az utolsóig - maga a név. A visszaállításhoz át kell fordítanod a Base64-ről - kapd meg a nevet a koi8-r-ban. Ezután le kell fordítanunk a koi8-r-ről az windows-1251-re (ha szükséges)
> az első kérdőjel után - a cím kódolása
> a második után - az átvitel kódolási módja, az In-Base64,
> # xA0; Q - idézett-nyomtatható
> a harmadik után és az utolsóig - maga a név. Az ő
> restore, le kell fordítanod a Base64-ről - kapd meg a nevet
> a koi8-r-ban. Ezután le kell fordítanunk a koi8-r-ről az windows-1251-re
> (ha szükséges)
Ez minden lehetséges Delphi-ban?
> Mindez a Delphi-ban állítható be?
Inkább, hogy milyen irányba csöpög.
a Base64 esetében például a TIdDecoderMIME vagy a DecodeString funkció az EncdDecd.pas modulból
a koi8-r-hez - tele van a Delphi internetes megvalósításaiban, és saját maga is írhat.
> Base64 esetén például a TIdDecoderMIME vagy a DecodeString funkció
> az EncdDecd.pas modulból
> a koi8-r-hez - teljes körű megvalósítások a Delphi-n az interneten, és
> írhatod a sajátodat.
Köszönöm a segítséget. )
file_name: = IdDecoderMIME1.DecodeString (String (TIdAttachment (MyMessage.MessageParts.Items [i]) .FileName));
Akár lehetséges, hogy tegyük meg, hogy ez téves: Egyenetlen # xA0; méret a dekóderben ToStream
> Lehetséges,
lehetetlen. Csak a nevét kell dekódolni, nem pedig a FileName teljes értékét. Lásd [60]
> lehetetlen. Csak a nevét kell dekódolni, és nem mindet
> a FileName értéke. Lásd [60]
Aztán a kérdés az, hogy ez a vonal hogyan értelmezhető a határolókkal, van-e a Delin funkció ontológiája a VB-ből, vagy van-e más megközelítés?
> Létezik-e a Delin funkciója a VB-ből vagy más megközelítésről?
> Szüksége van?
analóg funkció Delim :) izvenyayus
> lehetetlen. Csak a nevét kell dekódolni, és nem mindet
> a FileName értéke. Lásd [60]
Kiderült, hogy megkapja a fájl nevét, de dekódolásakor mindez kegyetlen, de most különleges karakterek nélkül, és továbbra is fennáll, azaz Úgy gondolom, hogy be kell vonulni a vonalat # xA0, windows-1251, ha igen, hogyan kell csinálni? Adjon naprstvlenie kérjük.
> be kell vonni egy stringet # xA0; windows-1251,
kell
Vigye a karaktereket a karakterláncba, és ha a kód nagyobb mint 127 ($ 79), akkor helyezze el a kívánt karaktert a windows-1251-ből
Memória: 0,89 MB
Hossza: 0,195 másodperc