Jump to content

Automatické odesílání novinek zákazníkům


DavidM

Recommended Posts

Dobrý den,

dovolil jsem si udělat takový amaterský počin. Tak mě za něj nebijte. Malý skript, který vytáhne novinky z databáze poskládá z nich email a rozešle ho registrovaným zákazníkům.

 

- Emaily bere jen z databáze "Blok newsletter", ty co mají vytvořený účet ty to nebere. (lze dopsat a rozšířit)

- Lze nastavit za kolik dní zpět má vyledat novinky

- Nutno nastavit přihlášení k emailové schránce

- emaily se rozesílají každému zákazníkovi zvlášť (nevidí ostatní příjemce)

- email se odesílá jako HTML (tudíž lze stylovat)

- pokud v daném rozsahu nejsou novinky, nic se neodešle

- nevím kolik mailů zvládne odeslat váš smtp server na hostingu

- do CRON služby stačí pak nastavit: www.vas-server.cz/auto-mailing/auto-mailing.php

 

Email se skládá ze tří částí:

- hlavičkový soubor - zde je HTML kód od začátku stránky až po generované položky

- obsahový soubor - ten se plní automaticky dle novinek

- patičkový soubor - konec mailu

 

Hlavní skript je v souboru auto-mailing.php, zde je nutno nastavit parametry. Vše okomentované.

 

Složku stačí umístit do hlavního adresáře.

 

Pokud se najde někdo kdo to pěkně nastyluje??? Byl bych rád, to už je nad mé síly, v každém mailovém klientu se to zobrazí trochu jinak.

 

Pro mé účely tohle stačí, posíláme obchoďákům jen info a položkách které se ten den naskladnili jako nové.

 

Tak uvidíte......

auto-mailing.zip

  • Like 1
Link to comment
Share on other sites

Tak jsem to zkusil, ale menší problém:

 

do emailu se dává odkaz na obrázek:

 

http://www.satanika.cz/img/p/300038-13401-home.jpg

 

Ten ale neexistuje, protože nepoužívám starý systém ukládání obrázků, ale nový, takže by to chtělo ještě zapracovat na tom, aby byla možnost změnit tohle.

 

Když se podívám na svůj odkaz na webu, tak obrázek (ten samý) má url

 

http://www.satanika.cz/13400-home/porta-inferi-cd-another-world-2011.jpg

 

Zmáknul by jsi i tohle?

 

----------------------

 

Ještě by se hodilo omezení počtu produktů, které se odešlou, i proto, aby jsi do patičky emailu mohl dát třeba odkaz jako "Chcete vidět všechny novinky?", jestli mi rozumíš, takový virálek :-)

Edited by Aramon (see edit history)
Link to comment
Share on other sites

Tak si hraju s úpravami, pokud by někdo chtěl ceny s i bez DPH, tak v souboru auto-emailing.php pod řádek 52

 

$cena = number_format ($vypis[price],2,',','');

 

Přidejte:

 

 
$cenadph = $cena*1.2; // z ceny bez DPH uděláme cenu s DPH
$cenadph = round($cenadph); // cenu s DPH zaokrouhlíme matematicky na celé číslo

 

a pod řádek 66 a 79

 

<P style="clear: left"><B>Cena: '.$cena.' bez DPH</B></P>

 

vložte

 

<P style="clear: left"><B>Cena: '.$cenadph.' s DPH</B></P>

 

nebo si nechte zobrazit cenu jen s DPH, to už je vaše věc :-)

Link to comment
Share on other sites

Tak přestože nejsem programátor, zkusil jsem si to sám předělat na to nové ukládání obrázků, ale nefachá mi to, nemohl by se někdo zkušenější na to mrknout? Píše to, že není nic k odeslání

 

<?php
 include(dirname(__FILE__).'/../config/config.inc.php');		   // cesta ke config souboru
 include(dirname(__FILE__).'/../init.php');
 require (dirname(__FILE__).'/class.phpmailer.php');

 // Nastavení proměnných k databázi v PRESTASHOPU
 $table_1 = "". _DB_PREFIX_."product";
 $table_2 = "". _DB_PREFIX_."product_lang";
 $table_3 = "". _DB_PREFIX_."newsletter";
 $table_4 = "". _DB_PREFIX_."image";
 //$web = "http://www.satanika.cz/img/p/";		  // Nastavete cestu k obrázkům produktů
 $web1 = "http://www.satanika.cz/";		  // Pro případ, že řadíme obrázky podle nového systému  
 $id_lang = 6;									   // čeština v databázi
 // Nastavení datumových proměnných
 $pocet_dni = 2;									 // kolik dni odedneška zpět vypisuje zařazené novinky
 $od = date(("Y-m-d"),Time()-60*60*24*$pocet_dni);
 $do = date("Y-m-d");

 // Nastavení proměnných pro mailing
 $smtp = 'smtp.gmail.com';					  // zadáme adresu SMTP serveru
 $username = xxx';				 // uživatelské jméno pro SMTP autentizaci
 $heslo = 'xxx';								   // heslo pro SMTP autentizaci
 $adresa_odesilatele = '[email protected]';  // adresa odesílatele skriptu
 $jmeno_odesilatele =  'www.satanika.cz';		  // jméno odesílatele skriptu (zobrazí se vedle adresy odesílatele)
 $predmet =  '[Novinky] Satanika.cz';							  // nastavíme předmět e-mailu
 $zapis_soubor = fopen('obsah.txt', 'w');			// soubor pro zápis novinek
 $text_1 = "\r\n";								   // tato varianta vytvori novy radek
 // Zjištění novinek
 $zjisti_novinky = mysql_query("SELECT id_product, link_rewrite, ean13, price, reference, supplier_reference, active, date_add FROM $table_1 WHERE active = '1' AND date_add >= '$od' ORDER BY date_add DESC");

 // Podmínka, jestli jsou vůbec novinky, pokud ano, odchází mail, pokud ne skript se ukončí
 if (mysql_num_rows($zjisti_novinky)>0) {

 // Cyklus pro zapsání všech novinek do souboru	
 while ($vypis = mysql_fetch_array($zjisti_novinky)) {	  
 // Zjištěni Názvu Produktu dle ID
 $zjisti_nazev_produktu = mysql_query("SELECT name FROM $table_2 WHERE id_product = '$vypis[id_product]' AND id_lang = '$id_lang' ");
 $nazev_produktu = mysql_fetch_array($zjisti_nazev_produktu);

 // Zjištění popisu k danému produktu
 $zjisti_popis_produktu = mysql_query("SELECT description_short FROM $table_2 WHERE id_product = '$vypis[id_product]' AND id_lang = '$id_lang' ");
 $popis_produktu = mysql_fetch_array($zjisti_popis_produktu);

 // Zjištění ID fotografie, aby se mohl složit název fotky - staré řazení
 //$zjisti_id_fotografie = mysql_query("SELECT id_image FROM $table_4 WHERE id_product = '$vypis[id_product]' AND cover = 1 ");
 //$fotografie = mysql_fetch_array($zjisti_id_fotografie);

 // Zjištění ID fotografie, aby se mohl složit název fotky - nové řazení
 $zjisti_id_fotografie = mysql_query("SELECT id_image FROM $table_4 WHERE id_product = '$vypis[id_image]' AND cover = 1 ");
 $url_rewrite_fotografie = mysql_query("SELECT link_rewrite FROM $table_2 WHERE id_product = '$vypis[link_rewrite]' AND cover = 1 ");
 $fotografie = mysql_fetch_array($zjisti_id_fotografie);
 $cestafotografie = $url_rewrite_fotografie;

 $cena = number_format ($vypis[price],2,',','');
 $cenadph = $cena*1.2;
 $cenadph = round($cenadph);




 if (mysql_num_rows($zjisti_id_fotografie)>0) {
 // zapíše výpis z databáze do souboru včetně obrázku

 fwrite ($zapis_soubor, '<div style="width: 333px; height: 250px; padding: 5px; float: left; border: solid 1px #004d5b">
					  <img style="float: left" src="'.$web1.'/'.$fotografie.'-home/'.$cestafotografie.'.jpg" alt="'.$nazev_produktu[0].'" width="129" height="129">
					  <h5>'.$nazev_produktu[0].'</h5>
					  <P>'.$popis_produktu[0].'</P>
					  <P style="clear: left"><B>Cena: '.$cena.' bez DPH</B></P>
					  <P style="clear: left"><B>Cena: '.$cenadph.' s DPH</B></P>  
					  </div>');


 }
 else {

 // zapíše výpis z databáze do souboru bez obrázku

 fwrite ($zapis_soubor, '<div style="width: 333px; height: 200px; padding: 5px; float: left; border: solid 1px #004d5b">
					  <img style="float: left" src="'.$web1.'/'.$fotografie.'-home/'.$cestafotografie.'.jpg" alt="'.$nazev_produktu[0].'" width="129" height="129">
					  <h5>'.$nazev_produktu[0].'</h5>
					  <P>'.$popis_produktu[0].'</P>
					  <P style="clear: left"><B>Cena: '.$cena.' bez DPH</B></P>
					  <P style="clear: left"><B>Cena: '.$cenadph.' s DPH</B></P>  
					  </div>');


 }


 }

 fclose($zapis_soubor);												  // uzavře soubor po zápisu

 // Hlavičkový soubor
 $cti_soubor_hlavicka = fopen("hlavicka.txt", "r");					  // otevře soubor pro čtení
 $pocet_znaku_hlavicka = filesize('hlavicka.txt');					   // zjistí počet znaků souboru
 $text_hlavicka = fread($cti_soubor_hlavicka, $pocet_znaku_hlavicka);	// načte soubor do proměnné
 fclose($cti_soubor_hlavicka);										   // uzavře soubor po čtení


 // Obsahový soubor generovaný
 $cti_soubor_obsah = fopen("obsah.txt", "r");							// otevře soubor pro čtení
 $pocet_znaku_obsah = filesize('obsah.txt');							 // zjistí počet znaků souboru
 $text_obsah = fread($cti_soubor_obsah, $pocet_znaku_obsah);			 // načte soubor do proměnné
 fclose($cti_soubor_obsah);											  // uzavře soubor po čtení

 // Patičkový soubor
 $cti_soubor_paticka = fopen("paticka.txt", "r");					   // otevře soubor pro čtení
 $pocet_znaku_paticka = filesize('paticka.txt');						// zjistí počet znaků souboru
 $text_paticka = fread($cti_soubor_paticka, $pocet_znaku_paticka);	  // načte soubor do proměnné
 fclose($cti_soubor_paticka);										   // uzavře soubor po čtení

 // Spojení souborů
 $text = $text_hlavicka.$text_obsah.$text_paticka;		  
 // Načte emaily z databaze			
 $zjisti_email = mysql_query("SELECT email FROM $table_3");

 while ($email_adresa = mysql_fetch_array($zjisti_email)) {			 // spustí cyklus ve kterem mění adresy příjemce	

 // Odesílání mailů
 $mail = new PHPMailer();
 $mail->IsHTML(true);  
 $mail->IsSMTP();					  // k odeslání e-mailu použijeme SMTP server
 $mail->Host = $smtp;
 $mail->SMTPAuth = true;			   // nastavíme true v případě, že server vyžaduje SMTP autentizaci
 $mail->Username = $username;  
 $mail->Password = $heslo;		  
 $mail->From = $adresa_odesilatele;  
 $mail->FromName = $jmeno_odesilatele;
 $mail->AddAddress($email_adresa[email]);  
 $mail->Subject = $predmet;	
 $mail->Body = "$text";				// vloží obsah souboru
 $mail->WordWrap = 50;				 // je vhodné taky nastavit zalomení (po 50 znacích)
 $mail->CharSet = "utf-8";			 // nastavíme kódování, ve kterém odesíláme e-mail

 if(!$mail->Send()) {				  // odešleme e-mail
 echo 'Došlo k chybě při odeslání e-mailu.';
 echo 'Chybová hláška: ' . $mail->ErrorInfo;
 }
 else
 {  
 echo "E-mail na adresu $email_adresa[email] byl v pořádku odeslán.<br />";
 }

 }
 }
 else {
echo "Není co odesílat.";
 }
?>

 

V podstatě jsem chtěl poskládat tu správnou URL takto:

 

$web1/"id_image"-home/"link_rewrite".jpg

 

takhle by to totiž mělo jít, jen mám asi něco blbé napsané, holt PHP neumím, ale kouknu a zkouším podle toho co vidím :-) Tak prosím, žádné že jsem Lama, že se seru do něčeho, čemu nerozumím, naopak, snažím se přijít sám na něco, čemu nerozumím :-)

Link to comment
Share on other sites

Tak tam už se vůbec nevyznám.

Každopádně chodí mejly(vloudila se mi tam chybka), ale stále bez obrázku a tentokrát už je url

 

www.satanika.cz/-home/.jpg

 

čili se tam nedávají proměnné. A přitom si myslím, že jdu na to logicky, když jsem si tam přidal

 

  $id_obrazku = mysql_query("SELECT id_image FROM $table_4 WHERE id_product = '$vypis[id_product]'");
 $obrazek = mysql_fetch_array($id_obrazku);
 $link_rewrite = mysql_query("SELECT link_rewrite FROM $table_2 WHERE id_product = '$vypis[id_product]'");
 $cesta = mysql_fetch_array($link_rewrite);

 

a cesta se má poskládat takto

 

<img style="float: left" src="'.$web1.'/'.$obrazek[0].'-home/'.$cesta[0].'.jpg" alt="'.$nazev_produktu[0].'" width="129" height="129">

 

Takže by se URL k obrázku měla poskládat takto

 

www.satanika.cz/$obrazek-home/$cesta.jpg

 

Fakt PHP neumím, ani DB, ale umím si jen vyvodit souvislosti, tak předpokládám, že opravdu jdu správnou cestou, jenže... :-)

Link to comment
Share on other sites

uvnitř feeder se o to starají tyto řádky

/* na zacaku je foreach, ktery prochazi produkty
nejprve musis ziskat id produktu*/
$image = Image::getImages((int)($cookie->id_lang), $product['id_product']);
//
//
/* kdyz dany produkt ma image, pak vypisuj */

if (is_array($image) AND sizeof($image))
{
$imageObj = new Image($image[0]['id_image']);
/* toto generuje velke obrazky; misto .jpg napis -small.jpg a mel bys dostat male */
echo "\t\t\t<IMGURL>"._PS_BASE_URL_._THEME_PROD_DIR_.$imageObj->getExistingImgPath().".jpg</IMGURL>\n";
}

 

je to z presty 1.4.3. v jiné verzi to může být malínko jiné (ale nemělo by)

Link to comment
Share on other sites

Fakt si vážím tvé pomoci nakopnout mě správným směrem, ale z toho feederu to fakt nezvládám převzít :-(

 

Ale už jsem se dostal o krůček dál, už mi to místo správné proměnné do té URL vloží slovo Array, takže asi tak :-)

 

Aspoň jak omezit ten počet produktů by někdo nevěděl?

 

------------

 

Další pokrok, už mám URL

 

http://www.satanika.cz/Resource id #53-home/Resource id #54.jpg

 

což je samozřejmě blbě :-)

Edited by Aramon (see edit history)
Link to comment
Share on other sites

Tak už mi to fachá, chybely mi tam v proměnách obrázku a url [0] :-)

 

Takže pokud má někdo nové řazení obrázků, stačí si původní soubor zaměnit za tento :-)

 

A jeden tip pro ty, co to taky neumí jako já:

 

Tahle verze vypisuje nově přidané zboží do shopu, pokud ale stejně jako já, máte zboží v shopu naládované, jen vypnuté, protože k němu děláte popisky nebo něco takového, třeba proto, že jste to natáhli z nějakého základního XML, tak na řádku 34 zaměňte "date_add" za "date_upd". Tím pádem to vypíše všechny naposledy aktualizované, tedy i když třeba změníte cenu ;-)

 

A omezení počtu výpisu provedete na tom samém řádku, před poslední uvozovky dejte LIMIT 10, desítka určuje, kolik se jich má odeslat, takže to bude vypadat takto:

 

$zjisti_novinky = mysql_query("SELECT id_product, ean13, price, reference, supplier_reference, active, date_upd FROM $table_1 WHERE active = '1' AND date_upd >= '$od' ORDER BY date_upd DESC LIMIT 10");

auto-mailing.php

Link to comment
Share on other sites

zkus tam tohle... jenom tak pro info, ikdyž ti to fachá

 


$image = Image::getImages((int)($cookie->id_lang), $vypis['id_product']);
 $imageObj = new Image($image[0]['id_image']);
 fwrite ($zapis_soubor, '<div style="width: 333px; height: 250px; padding: 5px; float: left; border: solid 1px #004d5b">
											  <img style="float: left" src="'._PS_BASE_URL_._THEME_PROD_DIR_.$imageObj->getExistingImgPath().'".jpg" alt="'.$nazev_produktu[0].'" width="129" height="129">

 

ještě možný to

(int)($cookie->id_lang)

je prostě jenom id jazyka, podle kterého je v databázi

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...