[ popmilan76 @ 04.09.2018. 21:01 ] @
Zanima me kako iz Delphija da pošaljem email poruku nekome?Našao sam neki EASendmail i tu mi smtp.gmail.com uvek odbija da pošaljem poruku,a probao sam sa više razlicitih portova...Pa me zanima kako najjednostavnije da to uradim,u pitanju je najobicnija poruka,koja bi imala naslov i body text,dakle bez attachmenta?

Sada sam provalio u cemu je stos,trebalo je iz mail napraviti podesavanje vezano za bezbednost?E,sada me zanima,da li mogu tu opciju da programski odradim iz same aplikacije,bez cackanja na samom mailu?

[Ovu poruku je menjao popmilan76 dana 04.09.2018. u 22:14 GMT+1]
[ popmilan76 @ 05.09.2018. 19:59 ] @
Kada kod iz ovog programa koji imam prebacim kod sebe,i kliknem na send mail,izadje mi poruka da klasa nije registrovana,a tamo radi normalno...Kao to da izvedem i kako da pomocu indy komponenti posaljem mail?
[ savkic @ 05.09.2018. 20:23 ] @
Nisi jasan, koji kod, koja klasa?
Za Indy imas primere, downloaduj sve i pogledaj examples.
[ popmilan76 @ 05.09.2018. 20:45 ] @
Imam primer sa Neta,koji radi ali kada ga kopiram kod mene nece,mada je kod za mene komplikovan,pa sam mislio da uradim sa postojecim komponentama...Mada sam i to nesto googlao i onda se svodi da moram da potrazim i openssl,pa rekoh ako može samo sa indy komponentama,bez icega dodatnog?
[ savkic @ 05.09.2018. 21:03 ] @
Ako smtp server preko koga saljes mejlove zahteva SSL pristup, onda moras imati openssl dllove.

A mozes uzeti i obican MAPI pa samo pripremiti poruku za slanje u mejl klijentu koji se koristi na racunaru (korisniku ostaje da pritisne send).
[ popmilan76 @ 05.09.2018. 22:13 ] @
Najbolje da okačim primer,evo ga...
[ popmilan76 @ 06.09.2018. 10:00 ] @
Kada radim u ovom programu , sve radi kako treba ,ali kada treba da prebacim kod u neki moj program,izlazi poruka:

EOleSysError class not registered

Mislio sam da mi te klase,bar ove dolaze uz delphi ,ali ne znam kako da ih registrujem?
[ savkic @ 06.09.2018. 13:12 ] @
Ne znam sta su te komponente, mozda neka komercijalna biblioteka. Ako je to ActiveX kontrola onda je registrujes kao i sve druge sa regsrv32 komand line aplikacijom. Search na googlu nalazi ovaj link: https://www.emailarchitect.net...il/sdk/html/object_usage_a.htm
[ popmilan76 @ 06.09.2018. 20:45 ] @
Hvala,Savkicu,radi sada,posle registracije koje si mi dao...I jos nesto,kada zavrsim taj neki program,i dam mu exe file,hoce li raditi ovo sa emailom ili ne?Ili i na toj target masini mora da se radi registracija?
[ savkic @ 07.09.2018. 05:35 ] @
Mora.
[ popmilan76 @ 09.09.2018. 22:26 ] @
Da se nadovezem na sopstvenu temu,uspeo sam da posaljem email i to radi sasvim ok.A sada drugo pitanje,kako da otvorim svoj sopstveni gmail i da u njemu popounim sva polja , da bih samo kliknuo send,da li postoji mogucnost za to?
[ savkic @ 10.09.2018. 06:24 ] @
Pokusaj sa mailto linkom:
mailto:someone@yoursite.com?cc=someoneelse@theirsite.com&bcc=lastperson@theirsite.com&subject=Big%20News&body=Body-goes-here

To ce otvoriti default mail klijent na racunaru, a probaj da podesis i chrome/gmail da reaguje na te linkove:
https://blog.hubspot.com/marke...rowser-default-email-client-ht

Ovde je problem sto mailto handleri uglavnom ne prihvataju link do fajla za attachment.
[ popmilan76 @ 10.09.2018. 10:10 ] @
Bez atachmenta,znaci obicna poruka,gde ce biti promenjeni email to , subject and textbody...I mora li da pre toga otvorim moj mail,tako da zaobidjem username i pass od emaila...
[ savkic @ 10.09.2018. 10:55 ] @
Ne razumem sta pitas. Evo pogledaj kako mailto link radi u praksi: https://www.w3schools.com/html/tryit.asp?filename=tryhtml_mailto ili pritisni Win+R pa otkucaj "mailto:mail@site.com?&Subject=Proba" (bez navodnika) i pritisni enter.
[ popmilan76 @ 10.09.2018. 11:18 ] @
Da,ali u ovim slucajevima mi otvori samo pocetnu stranu google,hocu da mi otvori moj mail u gmailu ili yahoo,nije bitno,da ode na compose new mail,i da budu popunjena sva polja,samo da kliknem na send....
[ popmilan76 @ 10.09.2018. 11:31 ] @
Ovaj kod sa shellexecute komandom mi otvori sve sa new mail...

ShellExecute(Handle,
'open',
'https://mail.google.com/mail/u/0/#inbox?compose=new',
nil,
nil,
SW_SHOW);


ali kako i gde da dodam subject,body i ostalo sto treba...
[ popmilan76 @ 08.12.2018. 15:48 ] @
Moram da se nadovezem,posto ova komponenta posle mesec dva trazi licencu,kako da posaljem mail preko gmaila iz indy i ima li delphi 7 sve indy komponente?
[ savkic @ 08.12.2018. 16:12 ] @
Ne znam da li D7 dolazi uz Indy, ako ne mozes skinuti i instalirati sam. Primeri postoje u okviru Indy biblioteke.
[ popmilan76 @ 08.12.2018. 16:22 ] @
Imam indy komponente,i bas dosta ih ima,ali izgleda da nemam jednu,a zove se openssl ili tako nesto,sve primere koje sam video,ukljucuju taj...
[ savkic @ 08.12.2018. 18:11 ] @
openssl je dll, to moras posebno da skines, samo moras skinuti verziju koja odgovora Indy verziji. Ranije to kod Indy biblioteke nije bilo uopste na jednom mestu dokumentovano, pa se moralo traziti po netu, pogledaj sad da li ima konkretan link do verzije koja ti treba.
[ popmilan76 @ 09.12.2018. 09:31 ] @
Uspeo sam nesto,ne prijavljeje mi gresku od pre...Ali po grešci bih rekao da je u pitanju ono podesavanje gmail less secure,da se stavi na on,međutim nije.Evo koda:


IdSMTP1 := TIdSMTP.Create(nil);
try
SSLHandler := TIdSSLIOHandlerSocket.Create(IdSMTP1);
SSLHandler.SSLOptions.Method := sslvTLSv1;
SSLHandler.SSLOptions.Mode := sslmUnassigned;
SSLHandler.PassThrough := False;

IdMessage1 := TIdMessage.Create(IdSMTP1);
IdMessage1.From.Address := 'xxxxxx@gmail.com';
IdMessage1.Recipients.EMailAddresses := 'xxxxxxx@yahoo.com';
IdMessage1.Subject := Memo2.Lines.Text;
IdMessage1.Body.Text := Memo3.Lines.Text;

IdSMTP1.Host := 'smtp.gmail.com';
IdSMTP1.Port := 465;
IdSMTP1.Username := 'xxxxxx@gmail.com';
IdSMTP1.Password := 'xxxx';
IdSMTP1.IOHandler := SSLHandler;

IdSMTP1.Connect;
try
IdSMTP1.Send(IdMessage1);
finally
IdSMTP1.Disconnect;
end;
finally
IdSMTP1.Free;
end;
[ popmilan76 @ 10.12.2018. 16:59 ] @
Da li ovo slanje emaila preko gmaila može bez ssl-a da se uradi?
[ savkic @ 10.12.2018. 17:14 ] @
gmail koliko se secam zahteva SSL pristup tako da ne moze bez...
[ popmilan76 @ 10.12.2018. 17:22 ] @
Ne mogu da nadjem odgovarajuci ssl,a probao sam više njih,tako da sam se izgubio u ovome?U prethodnom kodu,kada izmenim port...izlazi mi poruka errorr with connection ssl,tako nešto?
[ savkic @ 10.12.2018. 18:56 ] @
Jesi li gmail nalog podesio da radi sa spoljnim pristupom? Probaj da li ti radi iz recimo Outlooka, Thunderbirda, imas na netu uputstvo kako treba podesiti gmail parametre da bi to radilo, za Indy je slicno.

Meni je sa ovavkim podesavanjima u Indiju radilo pre nekih 5 godina kad sam to poslednje probao:

Smtp.Port := 465;
Smtp.Username := User;
Smtp.Password := Pass;
Smtp.IOHandler := TIdSSLIOHandlerSocketOpenSSL.Create(SMTP);
Smtp.UseTLS := utUseExplicitTLS;
[ popmilan76 @ 10.12.2018. 19:13 ] @
GMail sam podesio za spoljni pristup,jer to sam radio i sa TMail komponentom...Sve je i kod mene tako,samo sto nemam poslednje dve opcije...

Smtp.IOHandler := TIdSSLIOHandlerSocketOpenSSL.Create(SMTP);
Smtp.UseTLS := utUseExplicitTLS;


Imam smtp komponentu ali nemam ova dva propertija...
[ savkic @ 10.12.2018. 22:06 ] @
> Imam smtp komponentu ali nemam ova dva propertija.

Mozda ti treba noviji Indy, ako koristis default koji ide uz D7, moras uraditi upgrade. Probaj da li poslednja Indy verzija radi uz D7 ako ne onda ti treba neka starija od 5 godina.
[ popmilan76 @ 11.01.2019. 20:20 ] @
Da ne bih otvarao novu temu,evo ovde cu posto je vezano za ovaj naslov...Slanje poruka preko gmaila traje mesec dva besplatno,pa posle toga izlazi poruka da je isteklo.Međutim,u nekom od fajlova za taj easendmailobj.dll,a u vc sharpu je,tj nekakav dokument,pise da se moze zameniti datum kreiranja tog dll,i u sharpu je to ovako...

public Form1()
{
InitializeComponent();
// change the EASendMailxx.dll match with your dll
File.SetLastWriteTime("EASendMail45.dll", DateTime.Now);

SmtpMail oMail = new SmtpMail("TryIt");


E,sada postavljam pitanje,kako taj datum kreiranja da promenim u delphiju,recimo kad god hocu da pokrenem program,da mi i ovo izmeni i da li je to uopste moguce tako kako sam ja zamislio?I onda bi to znacilo da ne bi nikad isteklo to...bilo bi free?
[ savkic @ 11.01.2019. 20:43 ] @
SetFileTime je WinApi funkcija koja to radi, svi pozivi drugih se na kraju verovatno svedu na nju.
Ako neces direktno nju onda pogledaj FileSetDate iz SysUtils ili TDirectory.SetDateTimeInfo ako koristis novije Delphije.
[ popmilan76 @ 11.01.2019. 21:10 ] @
Da,hvala,to je to,samo da pogledam vremenom,hoce li raditi.
[ popmilan76 @ 22.03.2019. 17:37 ] @
Evo ovde cu,da ne pravim novu temu...Slanje emaila preko default email klijenta,koristim ovu funkciju

//function SendMailMAPI(const Subject, Body, FileName, SenderName, SenderEMail,
//RecepientName, RecepientEMail: String) : Integer;

I lepo radi,kada je u pitanju jedna adresa,ali kada umetnem dve nece,razdvojim ih i zarezom,i tacka zarezom i neće pa neće?
[ FranjoZG @ 22.03.2019. 20:08 ] @
Riješio sam to. Potražit ću sutra, za danas mi je dosta Delphi-a :)
[ FranjoZG @ 23.03.2019. 10:52 ] @
Ne znam u čemu ti je problem. Sad sam pogledao u programu koji radi više od godinu dana i svakodnenvo šalje fin. izvješća na nekoliko e-mail adresa.
INDY mi je 10.6.2.5341
Adrese su mi u ini file-u. Kreiram varijablu i u nju dodajem adrese koliko god ih ima. Na kraju dobijem:

Code:

ToMail := 'email1@email1.com; email2@email1.com';


Ono što je zanimljivo i nisam do sada primjetio:

napravim:
Code:

var IdM: TIdMessage;
...
IdM.Recipients.EMailAddresses := ToMail;


Nakon toga IdM.Recipients.EMailAddresses i ToMail nisu isti !!! U IdM.Recipients.EMailAddresses je točka-zarez zamjenjena sa zarezom tako da su nove mail adrese koji su u Recipients:
email1@email1.com, email2@email1.com'



[ popmilan76 @ 23.03.2019. 12:13 ] @
Imam var koji se zove statuspri,i u njega stavim adotable1email1.value + ',' + adotable1email2.value i on ga prikaze u TO ,ali neće da šalje...I umesto zareza sam stavio i tačka,zarez ali isto...Da li bih mogao da u ovu gore funkciju dodam onu stavku CC i kako?
[ FranjoZG @ 23.03.2019. 13:38 ] @
Ovo je moja procedura. Izvukao sam dijelove koji trebaju (valjda nisam nešto preskočio) jer je napravljena kao zaseban thread u kom se kreira i PDF izvješća koji se šalje.

idS: TIdSMTP;
IdM: TIdMessage;
IdSSLIOHandlerSocketOpenSSL1: TIdSSLIOHandlerSocketOpenSSL;
ToMail: string;

tMyClass.Parametri je moja klasa koja čita iz ini file-a podatke.
Da li verzija indy-a koju koristiš ima veze?

Code:

            IdS.Host := tMyClass.Parametri.ParamByName['MAIL_HOST'].AsString;
            IdS.IOHandler := IdSSLIOHandlerSocketOpenSSL1;
            IdS.UseTLS := utUseRequireTLS;
            IdS.Port := tMyClass.Parametri.ParamByName['MAIL_PORT'].AsInteger; //587 ;
            IdS.UserName :=  tMyClass.Parametri.ParamByName['MAIL_USERNAME'].AsString;
            IdS.Password  := tMyClass.Parametri.ParamByName['MAIL_PASSWORD'].AsString;

// kreiranje prijemnih mail adresa
            MaliBr := 1;
            while tMyClass.Parametri.SeekParam('MAIL_ADRESA_TO_' + MaliBr.ToString) do begin
               if ToMail <> '' then ToMail := ToMail + '; ';
               ToMail := ToMail + tMyClass.Parametri.ParamByName['MAIL_ADRESA_TO_' + MaliBr.ToString].AsString;
               Inc(MaliBr);
            end;

               IdM.Clear;
               idm.ContentType := 'multipart/related; charset=win-1250';
               IdM.Body.Clear;
               IdM.Body.Append('Izvješće o prometu na dan: ' + DateTimeToStr(dat));
               IdM.Encoding := meMime;
               idm.ContentType := 'multipart/text; charset=win-1250';
               IdM.From.Name := FirmaIme;
               IDM.From.Address := tMyClass.Parametri.ParamByName['Mail_Adresa_From'].AsString;
               IdM.Recipients.EMailAddresses := ToMail;
               IdM.Subject := 'Izviješče o prometu na dan: ' + DateTimeToStr(Dat);

                IdS.Connect;

                  Attachment := TIdAttachmentfile.Create(Idm.MessageParts,dir);
                  Attachment.ContentDisposition := 'attachment';
                  Attachment.ContentType := 'text/xml';
                  Attachment.FileName := dir;
                  Attachment1 := TIdAttachmentfile.Create(Idm.MessageParts,rac);
                  Attachment1.ContentDisposition := 'attachment';
                  Attachment1.ContentType := 'text/xml';
                  Attachment1.FileName := Rac;
                  Attachment2 := TIdAttachmentfile.Create(Idm.MessageParts,Spec);
                  Attachment2.ContentDisposition := 'attachment';
                  Attachment2.ContentType := 'text/xml';
                  Attachment2.FileName := Spec;
                  IdS.Send(IdM);             
                  Attachment.Free;
                  Attachment1.Free;
                  Attachment2.Free;

                     IdS.Disconnect;

I ovo su property Indy controla:
Code:

  object idS: TIdSMTP
    IOHandler = IdSSLIOHandlerSocketOpenSSL1
    SASLMechanisms = <>
    UseTLS = utUseExplicitTLS
    Left = 408
    Top = 160
  end
  object IdM: TIdMessage
    AttachmentEncoding = 'MIME'
    BccList = <>
    CharSet = 'windows-1250'
    CCList = <>
    Encoding = meMIME
    FromList = <
      item
      end>
    Recipients = <>
    ReplyTo = <>
    ConvertPreamble = True
    Left = 488
    Top = 160
  end
  object IdSSLIOHandlerSocketOpenSSL1: TIdSSLIOHandlerSocketOpenSSL
    Destination = ':25'
    MaxLineAction = maException
    Port = 25
    DefaultPort = 0
    SSLOptions.Mode = sslmUnassigned
    SSLOptions.VerifyMode = []
    SSLOptions.VerifyDepth = 0
    Left = 536
    Top = 264
  end
[ popmilan76 @ 23.03.2019. 15:04 ] @
Ja koristim funkciju ,ovu:

function SendMailMAPI(const Subject, Body, FileName, SenderName, SenderEMail,
RecepientName, RecepientEMail: String) : Integer;

I sad u delu RecepientEMail,u kodu stavim value1 + ',' + value2....ili value1 + ';' + value2,isto je,popuni polje TO u mailu,ali ne šalje,grešim u nekoj gluposti ali ne znam gde.
[ tkaranovic @ 23.03.2019. 16:44 ] @
Ukucaj u goglu:

"RecipArray: array of TMapiRecipDesc;"

sa navodnicima.

Prvi link koji izbaxi gugl je tema i kojoj pise o nizu primaoca.

Inace ne koristim mapi. Samo dajem primer da se moze sve izguglati.
Jedino treba razmisliti sta treba ukucati u gugl da izbaci pravi link.
[ popmilan76 @ 24.03.2019. 14:57 ] @
To mi menja mnogo koda,a već sam počeo sa ovom funkcijom:

function SendMailMAPI(const Subject, Body, FileName, SenderName, SenderEMail,
RecepientName, RecepientEMail: String) : Integer;
var
message: TMapiMessage;
lpSender,
lpRecepient,lpcc: TMapiRecipDesc;
FileAttach: TMapiFileDesc;
SM: TFNMapiSendMail;
MAPIModule: HModule;
begin
FillChar(message, SizeOf(message), 0);
with message do
begin
if (Subject<>'') then
begin
lpszSubject := PChar(Subject)
end;
if (Body<>'') then
begin
lpszNoteText := PChar(Body)
end;
if (SenderEMail<>'') then
begin
lpSender.ulRecipClass := MAPI_ORIG;
if (SenderName='') then
begin
lpSender.lpszName := PChar(SenderEMail)
end
else
begin
lpSender.lpszName := PChar(SenderName)
end;
lpSender.lpszAddress := PChar('SMTP:'+SenderEMail);
lpSender.ulReserved := 0;
lpSender.ulEIDSize := 0;
lpSender.lpEntryID := nil;
lpOriginator := @lpSender;
end;
if (RecepientEMail<>'') then
begin
lpRecepient.ulRecipClass := MAPI_to;
lpcc.ulRecipClass := MAPI_to;
if (RecepientName='') then
begin
lpRecepient.lpszName := PChar(RecepientEMail);

end
else
begin
lpRecepient.lpszName := PChar(RecepientName)
end;
lpRecepient.lpszAddress := PChar('SMTP:'+RecepientEMail);
lpcc.lpszAddress := PChar('SMTP:'+RecepientEMail);
lpRecepient.ulReserved := 0;
lpRecepient.ulEIDSize := 0;
lpRecepient.lpEntryID := nil;
nRecipCount := 1;
lpRecips := @lpRecepient;
end
else
begin
lpRecips := nil
end;
if (FileName='') then
begin
nFileCount := 0;
lpFiles := nil;
end
else
begin
FillChar(FileAttach, SizeOf(FileAttach), 0);
FileAttach.nPosition := Cardinal($FFFFFFFF);
FileAttach.lpszPathName := PChar(FileName);
nFileCount := 1;
lpFiles := @FileAttach;
end;
end;
MAPIModule := LoadLibrary(PChar(MAPIDLL));
if MAPIModule=0 then
begin
Result := -1
end
else
begin
try
@SM := GetProcAddress(MAPIModule, 'MAPISendMail');
if @SM<>nil then
begin
Result := SM(0, Application.Handle, message, MAPI_DIALOG or
MAPI_LOGON_UI, 0);
end
else
begin
Result := 1
end;

finally
FreeLibrary(MAPIModule);

end;

if Result<>0 then
begin
MessageDlg('Error sending mail ('+IntToStr(Result)+').', mtError, [mbOk],
0)
end;
end;
end;


I posle pošto pošaljem poruku,kada hoću nešto u svopjoj aplikaciji da uradim,ne mogu jer mi ispisuje grešku,nešto kao could not find file c\program files ....mapi\1032\baza.mdb



S tim,sto kod ovog poslednjeg slucaja izlazi oleexceptions ,file not found,i kada u taj folder mapi,postavim,bazu,onda radi kako treba?Jer mora to tako ili nesto nije uradjeno kako treba?

[Ovu poruku je menjao popmilan76 dana 24.03.2019. u 22:33 GMT+1]
[ tkaranovic @ 25.03.2019. 10:08 ] @
> Jer mora to tako ili nesto nije uradjeno kako treba?

Nije uradjeno kako treba izbor funkcije her ne mozes da je osposobis da posalje mejl.

Jednostavnje bi bilo da uzems kod koji je Franjo posotvao jer je Franjo postovao kod koji radi.
[ popmilan76 @ 25.03.2019. 10:49 ] @
Ok,sad ću probati,mada mislim da je nesto kod mene,ili je problem u outlook?

Ipak neću moći,jer moj IDs nema usetls property,i verovatno još nesto...
[ popmilan76 @ 25.03.2019. 11:29 ] @
Uspeo sam na neki drugi način,tako da sada radi...Koristio sam drugu komponentu tmail...Hvala svima na trudu.
[ savkic @ 25.03.2019. 12:17 ] @
MAPI je zamisljen kao odlicna stvar ali od pojave Win10 je postalo izuzetak da radi. Najbolje funkcionise u kombinaciji sa Outlookom ali i to ne uvek.
Ako imas veci broj racunara koji moras opsluzivati najbolje je da predjes na druge varijante (direktno povezivanje sa serverom putem smtp komponenti).
[ popmilan76 @ 25.03.2019. 19:55 ] @
Za sada sam probao dva koda,i ovaj radi za sada lepo,najviše koliko mogu opsluzivati jeste 3 racunara...Nego,on lepo radi,samo jel moguce da se poruka prikaze u default mail klijentu,koji god da je,a ne da se pošalje direktno i da li je moguce da poruka koju šaljem sadrži vise podataka iz nekog od upita iz moje aplikacije

Dakle da poruka sadrzi sledece podatke,recimo:
Molimo Vas da:
Milan mihailovic Beogradska 27 Beograd
Petar petrović Borska 25 Beograd
....


Da budu prisutni na sastanku uu 2000 sati u Beogradu:
[ savkic @ 25.03.2019. 21:20 ] @
> Nego,on lepo radi,samo jel moguce da se poruka prikaze u default mail klijentu,koji god da je,a ne da se pošalje direktno i

Jedino ako uspes da nateras MAPI da radi, kao sto rekoh ako odrzavas vise racunara i ne koriste Outlook, na to resenje zaboravi.

> da li je moguce da poruka koju šaljem sadrži vise podataka iz nekog od upita iz moje aplikacije

U body poruke mozes da upises sta god zelis, pa i podatke iz vise upita.
[ popmilan76 @ 26.03.2019. 21:16 ] @
Probao bih ja taj kod,ali nemam smtp property usetls...?Gde to da nabavim?
[ savkic @ 26.03.2019. 21:22 ] @
> Probao bih ja taj kod,ali nemam smtp property usetls...?Gde to da nabavim?

U novoj verziji Indy komponenti.
[ popmilan76 @ 26.03.2019. 21:41 ] @
Da li ima u starijim verzijama to,neka zamena za to?Koristim D7,sa ne znam kojim Indijem?
[ savkic @ 26.03.2019. 23:09 ] @
> neka zamena za to?

Zamene za Indy su Synapse (besplatan), i neke komercijalne poput ICS.

> Koristim D7,sa ne znam kojim Indijem?

D7 bez problema radi sa Indijem, koja verzija to vec ne znam, moras istrazivati i naci odgovarajucu.