Gå til innhold

Anbefalte innlegg

Akkurat som topic, hvordan kan jeg sende en mail med et vedlegg?

Er det nødvendig ed en SMTP server (eller hva det heter...)? :p

 

Takker for all hjelp.

 

EDIT: Joda, jeg har googlet meg rimelig grønn før jeg posta dette... ;)

Endret av @kd
Lenke til kommentar
Videoannonse
Annonse

Tror du har følgende tre alternativer:

1) MAPI

2) SMTP Klient

3) SMTP Server

 

Alt 1:

Sende mail vha MAPI krever at brukeren har en MAPI kompatibel epost-klient på maskina. Det utelukker f.eks. Opera... JCL har en del på MAPI. Tror også Delphi inneholder en SendMail( )-funksjon.

 

Alt 2:

Bruke f.eks. smtpklient komponent fra Indy. Krever at du har adressen til en server + brukernavn og passord

 

Alt 3:

Her er jeg litt usikker, men i utgangspunktet kan du f.eks. bruke en smtpserver-komponent fra Indy til å koble deg til pop-serveren til epost-mottakeren. Så kan du sende meldingen direkte dit den skal. Har aldri forsøkt dette og er veldig usikker på hvordan dette vil fungere i nett med brannmur. Vet imidlertid at det er en mulig løsning. Se f.eks. Eurekalog. Har du tilgang til Delphi Magazine er det der en artikkel om dette i siste utgave.

 

-Vegar

Lenke til kommentar

Alt 2:

Bruke f.eks. smtpklient komponent fra Indy. Krever at du har adressen til en server + brukernavn og passord

Er du på nettet, har du som regel ISPens SMTP server tilgjengelig. Jeg har 2 programmer ute hos (mange) kunder som bruker denne måten å sende mail på - funker utmerket både med og uten vedlegg. Kunden må bare bruke litt tid til å angi adressen til SMTP serveren hos ISPen.

 

Alt 3:

Her er jeg litt usikker, men i utgangspunktet kan du f.eks. bruke en smtpserver-komponent fra Indy til å koble deg til pop-serveren til epost-mottakeren. Så kan du sende meldingen direkte dit den skal. Har aldri forsøkt dette og er veldig usikker på hvordan dette vil fungere i nett med brannmur.

 

SMTP server kommuniserer med andre SMTP (ikke pop, men det er bare flisespikring) servere via SMTP protokoll, dvs. via port 25. Samme protokoll og port som brukes når du sender mail fra SMTP klient. Klarer du å sende mail fra SMTP klient, skal det ikke være noe problem å sende mail på den måten. Det skal normalt ikke være noe problem selv om du sitter bak brannmuren, med mindre admin har spesifikt blokkert utgående trafikk via port 25, men da får du ikke sendt mail fra SMTP client heller. Ja, og trafikken tilbake kommer via upriviligert port (høyere enn 1023) som normalt står åpne, i hvert fall for etablert kommunikasjon som i dette tilfelle.

Lenke til kommentar
Hvordan kan jeg sette opp en SMTP Klient?

Eller finnes det noen gratis?

Forum71 har svaret:

Alt 2:

Bruke f.eks. smtpklient komponent fra Indy. Krever at du har adressen til en server

Indy project ligger her

 

Eller, hvis du bruker Delphi7, har du den allerede. Du trenger TIdMessage for å lage mail og TIdSMTP for å sende den.

Er jeg bare treig, eller fikk jeg ikke helt svar på spørsmålet mitt?

Det var denne serveren da... Er det ikke nødvendig?

 

Takk for at dere hjelper meg... :blush:

Lenke til kommentar

Hva er det egentlig du spør om?

 

Trenger man en smtp-server?

Ja, en smtp server er nødvendig

Nei, du trenger ikke lage den selv.

 

Hvordan sende mail m/attachment vha indy-komponenter:

(fra about.com)

procedure TMailerForm.btnSendMailClick(Sender: TObject);
begin
 StatusMemo.Clear;

 //setup SMTP
 SMTP.Host := ledHost.Text;
 SMTP.Port := 25;

 //setup mail message
 MailMessage.From.Address := ledFrom.Text;
 MailMessage.Recipients.EMailAddresses := 
     ledTo.Text + ',' + ledCC.Text;

 MailMessage.Subject := ledSubject.Text;
 MailMessage.Body.Text := Body.Text;

 if FileExists(ledAttachment.Text) then
   TIdAttachment.Create(MailMessage.MessageParts, 
                        ledAttachment.Text);

 //send mail
 try
   try
     SMTP.Connect(1000);
     SMTP.Send(MailMessage);
   except on E:Exception do
     StatusMemo.Lines.Insert(0, 'ERROR: ' + E.Message);
   end;
 finally
   if SMTP.Connected then 
     SMTP.Disconnect;
 end;

end; (* btnSendMail Click *)

Det som i koden refereres til som 'host' er adressen (ip eller hostname) til en smtp-server. Denne host'en må endten brukeren skrive inn eller så må du ha tilgang på en smtp-server som du er villig til å dele med alle...

 

Var det svar?

 

-Vegar

Lenke til kommentar

Liker å lage alt fra bånn av jeg, for best mulig kontroll over detta (med TCustomTCPClient).

 

Uansett, skal du gjørra forslaget til Format71, så burde du gjøre det i en egen thread, for å forhindre at applikasjonen "lagger" mens den sender mail.

Lenke til kommentar

Jepp, kjekt å lage alt fra bunnen av - dersom du ikke tilfeldig vis skulle ha et liv, da...

 

Med andre ord - totalt unødvendig å skrive egen kode for å sende mail når det finnes x antall helt brukbare gratis alternativer. Indy f.eks. dekker antagelig @kd's behov med ca 110%, det brukes av ca. yyyyyy antall ivrige delphiprogrammerere allerede, så du kan regne med at komponentene er testet bedre enn du noen sinne ville få testet ut din egen kode.

 

Dersom du ikke har et særdeles sært behov er det totalt bortkastet tid å gjøre slike ting selv!

 

Når det gjelder threads så kan det være en god idé. Et annet alternativ er å droppe en 'AntiFreeze'-komponent på formen og se om ikke det også gjør susen...

 

-Vegar

Lenke til kommentar

Ikke vær lame :p. Grunnen til at jeg lager det meste fra bånn av, er fordi jeg hater disse fra-før-lagde indy komponentene. Jeg lager ganske tilfeldigvis en P2P klient for å operere på mitt eget P2P nettverk, og å proppe på en hel hævv av indy klienter/servere der ville blitt HELT bortkasta, ettersom jeg trenger FULL kontroll over hva som skjer for å spare bandwidth, og hindre exploits (komponenter kan gjøre masse en ikke veit om, som gjør at du kan lage exploits uten å vite om det, særlig når det er så mye fra før å passe på når man lage sånne programmer).

 

Det er bare n00bs som bruker mesteparten av tida de programmerer på å searche google etter komponenter for å gjøre alt for dem, og bare sette dem sammen.

 

Og vel, du skulle ikke tilfeldigvis ha en komponent for ett ferdiglagd P2P system? Skjønner du pointet... Og forresten, jeg skriver først en komponent og tester etterpå, og i 90% av tilfellene er alt riktig, så ting tar virkelig ikke så lang tid.

 

 

 

En antifreeze komponent er mest sannsynlig en thread som tar over for den vanlige ProcessMessages loopen, så lag heller en thread du :). Med mindre du syns de få linjene som skal til for å lage en fully functional thread er for mye å teste :roll:

Lenke til kommentar

Nå kjører vi litt OT, men likevel. Hvorfor skal Indy komponentene gjøre "masse man ikke vet om"? De er opensource, så du kan gå inn i kilden og sjekke selv. Siden disse brukes av så mange, er de allerede kontrollert av mange. Dersom de inneholdt noe som ikke burde vært der, hadde sikkert noen allerede publisert advarsel om dette. Så jeg ser ikke noe grunn til å frykte Indy.

 

I ditt tilfelle, når du lager helt ny TCP-basert protokoll, kan du selvfølgelig velge om du skal begynne fra Borlands TCP socket komponenter eller fra Indy sine. De bruker Microsofts TCP/IP stack uansett.

 

Påstanden om at du får alle Indy komponentene ("hel hævv av indy klienter/servere") kompilert inn i programmet er likevel feil. Hvis du bruker TIdTCPClient, blir det kun IdTCPClient.pas og alle lavere nivå unit-ene som blir kompilert, ikke f. eks. IdTelnet.pas, IdSMTP.pas osv!

 

P.S. Jeg vet at nicken til Vegar er Format71, ikke Forum, beklager, jeg tenkte sikkert på noe annet mens jeg skrev det.

Lenke til kommentar
Det er bare n00bs som bruker mesteparten av tida de programmerer på å searche google etter komponenter for å gjøre alt for dem, og bare sette dem sammen.

Jeg vil nå si det er bra 'fjortis' og tro at ting blir så mye bedre av at man lager det selv. (no offence...)

 

Vet ikke om du jobber som programmerer eller om du bare har det som hobby, men ute i næringslivet kommer du ikke langt med å skulle lage alt selv. Det lønner seg rett og slett ikke å bruke utviklingskostnader på ting du kan få kjøpt på kiosken til en femmer.

 

Men for all del. Det er kjekt å kunne protokollene man jobber med. Sett deg ned og les rfc's, kod til du er grønn, men er alt du ønsker å få sendt avgåre en mail med et filvedlegg så kan jeg ikke forstå hvorfor det skulle være nødvendig.

 

Selv jobber jeg innen regnskapsavslutning og skatt. Vi bruker vanvittig med tid på å lage f.eks. skatteberegningen så effektiv og riktig som mulig. Det er noe vi kan bedre enn alle andre her i norge. Men når kunden våres ønsker å ta sikkerhetskopi av en klient og sende denne på epost til revisor, så er det helt uaktuelt for oss og først skrive masse kode for å pakke filer og så sette oss inn i rfc821 for å få send mail. For det første koster det tid, for det andre er det (dessverre) en viss sansynlighet for at det blir bugs. I stede henter vi et gratis zip-bibliotek og bruker Indy som alikevel kommer med delphi. På den måten kan vi tilby brukeren det han vil ha til en pris av 1 dag utvikling. Konkurenten vår ønsker ingen ferdig lagde ting tang og setter seg ned og koder. Kommer med samme funksjonalitet 2 uker senere og må prise produktet der etter. Brukeren gir f***. Han ønsker som sagt bare å ta sikkerhetskopi og sende denne. Hvorfor skal han da betale 10 ganger så mye for konkurentens løsning? Kunden bytter leverandør. 1-0 til oss ;-)

 

Du sier du lager et p2p-program og føler du har behov for 100% kontroll over hva som blir gjort og hvordan. Fint. @kd sier ingen ting om at han driver og utvikler neste generasjons super-turbo-epost-klient der 2ms fra eller til ved sendingn av mail vil bety forskjellen mellom gullkantet kontrakt og total fjasko. Dersom det alikevel skulle være tilfelle så går jeg ut i fra at han også har godt med penger til rådighet. I så fall vil jeg anbefale ham å kjøre et evalueringsprosjekt der han ser på potensielle løsninger som f.eks. Indy og IP*Works kontra det å kode selv. Det er ikke gitt at du klarer å gjøre det noe bedre enn de som har holdt på med det i en 10 års tid allerede...

 

-Vegar

Lenke til kommentar

Å bruke Delphi uten å benytte seg av mulighetene det vanvittige utvalget av komponenter gir (både SW FW og Open Source) er vel som å dytte en Jaguar fordi man syns man har bedre kontroll over trafikkbildet...

 

Har du enorme behov for å skrive alle dine greier selv, og kansje attpåtil liker å vise frem det du har laget, stikk innom http://www.lazarus.freepascal.org , der er din hjelp mere enn velkommen, og du får din lønn i form av heder og ære :green:

 

Selv så hender det at jeg bruker bare fragmenter av komponenter, altså dersom du har en komponent som f.x kan 10 ting mens jeg bare har bruk for to av disse (klønete skrevet, men dere skjønner sikkert), så hender det at jeg lugger ut disse to rutinene og skriver dem inn i programmet istede for å inkludere komponenten, dette fordi jeg har opplevd at jeg minsker ofte konflikt/bug-lista mi betydelig med dette dersom jeg har et program som har flere/mange komponenter som attpåtil er skrevet av forskjelige folk.

 

bækk tu topik:

SMTP-komponent jeg har brukt, og liker er NetMasters`s greie (NMSMTP) den gjør absolutt jobben, men koster desværre litt dersom man ikke har en Delphi-utgave der den fulgte med på lasset..

Lenke til kommentar

Vel, en ting er å sende en mail med vedlegg. En annen ting er å lage ett fullt funksjonelt P2P nettverk. Fjortis er en ting, fjorten år er en annen ting. Riktignok, jeg er 14 år. Greit nok at Indy er opensource, men ikke kom å si at å proppe en form full av komponentikoner er bedre enn å kode det sjæl.

 

Jeg har til og med sett folk bruke en egen komponent, for å kopiere en fil. Det er bullshit. Rett og slett bullshit, særlig når windows til og med har en egen API for det. Det å bruke en egen komponent for å laste ned en fil over HTTP er også bullshit, ettersom det er ikke mange linjene basert på TCustomIPClient (som er en TCP klient som bare har basic funksjonene som skal til for å connecte, of sende/motta buffers over internet, og litt ekstra).

 

Hvis du går litt ut fra dette forumet hvor flesteparten (legg merke til *flesteparten*, ikke alle, noen er flinke :)) ligger på nybegynner-stadiet, og går ut i verden, vil du finne ut at det i virkeligheten ikke er altfor mange som faktisk sitter 9 av 10 timer på Google søkende etter komponenter å putte sammen. Grunnen til at Delphi ofte blir kalt n00bspråket er nettopp fordi det lar deg skru vegger sammen til hus uten å kunne en dritt (det krever virkelig ikke kunnskap å overføre en fil over idTCPClient (eller hva f*** den indy komponenten heter)).

 

Skulle likt å se store software developers som Microsoft bygge programmene sine ut fra en "Indy for Dummies" bok forklarer åssen man legger en indy komponent til en form, og connecter til en remote host.

 

Jeg er ingen dårlig programmerer, og nettopp derfor vil jeg ha full kontrol over hva programmet mitt er. Hvis jeg sitter der med komponenter som tilfeldigvis kanskje ikke er opensource, kan jeg aldri vite om det jeg lager er "exploitfritt", eller ikke, men lager jeg alt fra bånn av, ser jeg det med en gang. Komponenter som TRichEdit kan jeg skjønne at man ikke lager fra bånn av, ettersom det er å reoppfinne hjulet, men trenger du noe mer, som for eksempel en syntax highlighter, kan TRichEdit være en nice komponent å basere den på (allerede her ville nok Dino_ searcha Google for en premade syntax highlighter, som han bare trenger å klæsje på formen, selv om det tar deg toppen noen timer med skriving å lage en sjæl for enkle språl som Basic).

 

Det jeg egentlig mener er at det er ingen vits å reoppfinne hjulet ved å lage alt fullstendig fra bånn av (skrive TString i asm på nytt for eksempel), men bygg dine komponenter på de som du har mest kontroll over, og som har de basic funkjsonene du trenger for å bygge noe på.

 

Den eneste måten jeg kan bli ferdig med ett exploitfritt P2P system, er å bygge det på en komponent jeg har full kontroll over, og som har verken mer eller mindre funksjoner enn jeg trenger for å bygge videre. For eksempel TCustomIPClient, hvor de funksjonene jeg trenger er Connect, Disconnect, SendLN, SendBuf, ReceiveLN, ReceiveBuf, og WaitForData. Ut i fra det, kan ett fully functional P2P system bygges.

Endret av chrml
Lenke til kommentar

searcha Google for en premade syntax highlighter

Den ligger her Synedit - Delphi open source (full source, full kontroll! :thumbs: ) syntax highlighter (eller memokomponent med highlighter) som er skrevet fra bunn av, dvs. uten bruk av RichEdit :p

Jeg liker den veldig godt og har brukt den i flere produkter.

Lenke til kommentar

Neinei!!, du må ikke finne på å bruke den! du MÅ skrive din egen, basert på TRichEdit, det tar bare et par timer, selv om vi snakker om støtte for 35 forskjellige programmeringsspråk, eller flere...

 

Vi bruker forresten Synedit i The Lazarus project, det er suverene saker :green:

 

chrml kan jo forresten få vise sin dugelighet hvis han ønsker:

Gi meg 1 stk komponent basert på TRichEdit som gir meg syntaxfremheving i følgende språk: PHP, Ada, C++ og Python. siden det var 4 språk er det vel fair å gi deg et døgn på jobben, mind you: jeg skal ikke bare ha fremheving av reserverte ord, men også kontroll over lukkede/åpne tagger, hvertfall kommentar-tagger.

 

Og så vil jeg gjerne ha en oppegående grunn til å ikke bruke alle muligheter delphi gir meg fullt ut når de allikevel er der.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...