Delphi - Internet áruház készítése Delphi-vel

Internet áruház 11. rész

forráskód letöltése
Múlt héten elkészült az áruház olyan szintig, hogy már képes volt rendelést fogadni.

A mostani részben az interneten beérkezett rendelést rögtön e-mail-ben vissza is igazolja a programunk, amennyiben annak adatait eltárolta a megrendelések adatbázisába. A mellékelt példaprogram megnyitása előtt a következő teendőket kell elvégezni, hogy a program működőképes legyen:
  • A HTMLProducer.pas-ban lévő komponenst telepítenie kell a Delphi alá. (Ezt a komponenst a cikksorozat 6. részénél hoztuk létre, forráskódja az ottani példánál található!)
  • Kérjük, hozza létre az ASWEBSHOP11 alias-t. Ez mutasson a mellékelt példaprogram Data könyvtárára, az adatbázis elérés végett.
  • A lefordított WS11.EXE-t helyezze a web szerver scripts könyvtárába, ahonnan az futtatható.
  • A mellékelt HTM könyvtár tartalmát pedig helyezze el a web szerveren úgy, hogy az egy böngészőn keresztül elérhető legyen. Például másolja a C:\Inetpub\wwwroot\webshop\11\ könyvtárba. Ekkor a böngészőben a www.animare.hu/webshop/11/ cím beírásakor meg kell hogy jelenjen a kezdő oldal. Persze a web szerver neve mindenkinél más és más lesz. A mellékelt példában a webshop\11\ könyvtárra több hivatkozás is van az egyes web lapokon, így kérjük ettől Ön se térjen el.


A jelenlegi cikk elolvasása előtt javasoljuk a sorozat előző részeinek megismerését, mivel a mostani ismeretek csupán kiegészítői az előzőeknek, így azok ismerete nélkül e konkrét cikk tartalma sem érthető meg teljes egészében.


A rendelést visszaigazoló e-mail küldése viszonylag egyszerű feladat. Az e-mail küldését akkor kell megtennünk, miután már megtörtént a rendelés adatainak tárolása, de az adatbázisok még nem kerültek lezárásra, vagyis épp az adott rendelés az aktuális rekord a sales.dbf-ben.

Az AddSales függvényünkbe erre a helyre tesszük a SendSalesMail eljárásunk hívását, mely elvégzi a mail küldését.
function TWebModule1.AddSales: boolean;
begin
   .....
          if tProduct.Locate('ID', StrToInt(product), 
                 []) then begin
            tSalesItemPRICE.Value:=tProductPRICE.Value;
            tSalesItemTAX.Value:=tProductTAX.Value;
          end;
          tSalesItem.Post;
        end;
      end;

      SendSalesMail;

      tProduct.Close;
      tSalesItem.Close;
      tSales.Close;

   .....
end;
A SendSalesMail egy TNMSMTP komponenst használ, melynek segítségével képesek vagyunk programból egy tetszőleges mailszerverhez kapcsolódni és egy tetszőleges e-mail-t elküldeni.

A forráskód az eljárás elején hiányos, mivel itt mindenkinek a saját adatait kell megadni, mint például az e-mailt küldő szerver nevét, saját e-mail címét, stb.

Az e-mail szöveges részében felsoroljuk a megrendelt termékeket, árukat. Ezeket a sales.dbf aktuális rekordjából, illetve a salesit.dbf-ből nyerjük.

Ha a levél összeállt, akkor már csak kapcsolódnunk kell a mailszerverhez, a Connect eljárás hívásával.
procedure TWebModule1.SendSalesMail;
var
  a, b, c, oc, cou: double;
begin
  with NMSMTP1 do begin
    Host:='';//web szerverünk neve, pl: mail.animare.hu
    with PostMessage do begin
      FromAddress:='';
        //saját e-mail címünk, pl: animare@animare.hu
      FromName:='';//küldő neve, pl: Animare Software
      ReplyTo:='';
         //hiba esetén erre az e-mail-re jön vissza a levél
      ToCarbonCopy.Add('');//másolatot kap az adott e-mail-ről
      Subject:='Megrendelés visszaigazolás';
      ToAddress.Add(tSalesEMAIL.Value);
      with Body do begin
        Add('*****************');
        Add('Az alábbi levél nem egy valós megrendelés,
             csupán egy teszt program eredménye.');
        Add('*****************');
        Add('');
        Add('');
        Add('A megrendelését megkaptuk, ezúton is 
             köszönjük!');
        Add('');
        Add('Rendelését az alábbi adatokkal vettük fel a
            nyilvántartásunkba:');
        Add('');
        Add('Az időpontja: '+FormatDateTime('yyyy. mm. dd.', 
              tSalesSALESDATE.Value)+' '+tSalesSALESTIME.Value);
        Add('');
        if tSalesItem.RecordCount>0 then begin
          Add('A rendelt termékek:');
          tSalesItem.First;
          oc:=0;
          while not tSalesItem.Eof do begin
            a:=tSalesItemPRICE.Value;
            b:=tSalesItemTAX.Value;
            cou:=tSalesItemCOUNT.Value;
            c:=Round(a*(b/100+1))*cou;
            Add('- '+tSalesItemProductName.Value+' (Ára: '+
                   IntToStr(Round(a))+' Ft + '+IntToStr(Round(b))+
                   '% ÁFA x '+tSalesItemCOUNT.AsString+' db = '+
                   IntToStr(Round(c))+' Ft)');
            oc:=oc+c;
            tSalesItem.Next;
          end;
          Add('Összesen fizetendő: '+IntToStr(Round(oc))+' Ft + 
               postaköltség');
        end;
        Add('');
        Add('');
        Add('Postai cím: '+tSalesNAME.Value+'  '+tSalesIRSZ.Value+
             ' '+tSalesCITY.Value+', '+tSalesSTREET.Value);
        if tSalesCOMPANY.Value+tSalesCIRSZ.Value<>'' then begin
          Add('Számla adatai: '+tSalesCOMPANY.Value+'  '+
              tSalesCIRSZ.Value+' '+tSalesCCITY.Value+', '+
              tSalesCSTREET.Value);
        end;
        Add('');
        Add('Fizetési mód: postai utánvét');
        Add('A rendelt terméket hamarosan feladjuk a megadott
              címre postai utánvéttel.');
      end;
    end;
    Connect;
  end;
end;
Amikor a kapcsolat létrejön a programunk és a levelező szerver között, akkor jön létre a TNMSMTP komponens OnConnect eseménye. Ekkor nincs más teendőnk, mint a SendMail eljárás hívásával az e-mail-t ténylegesen elküldeni, majd a Disconnect-el bontani a kapcsolatot.
procedure TWebModule1.NMSMTP1Connect(Sender: TObject);
begin
  NMSMTP1.SendMail;
  NMSMTP1.Disconnect;
end;

Internet áruház cikksorozat