Emailové notifikace + MySQL – timer?

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Desttro
Člen | 126
+
0
-

Zdravím,
chtěl jsem se zeptat, zda by mi nekdo mohl poradit, jak udělat notifikace emailem.
Konkrétně:

  1. případ: Budu mít v MySQL vložený termín, a potřeboval bych, aby 2 týdny před termínem přišel email a potom ještě jeden 1 týden před termínem
  2. případ: V databázi bude políčko pro váhu a pro skutečně dodanou váhu. Když bude rozdíl mezi váhou a skutečne dodanou váhou víc a nebo méně jak 10%, tak zase příjde email.

Jak se tohle řeší? Nějaké timery?

Děkuji mnohokrát

Tirus91
Člen | 199
+
0
-

napíšeš si nějakou službu, která bude dělat jen toto mailování a tu přidáš do cronu (nejlépe).

Tudíž jako první proběhne SQL dotaz, kterým si vyselektuješ jen ty záznamy, které splňují tvou podmínku

( where termin = termin-1tyden OR termin = termin-2tydny or vaha > skutecnaVaha OR vaha < 10%)

a nasledne uz tvoříš jen maily a rozesíláš je

Desttro
Člen | 126
+
0
-

Děkuji, je možno udělat normálně cron na presenter? Nebo kde je nejlepší tuhle funkci napsat? Dělal jsem cron pouze na normální php script a ne v Nette.

Díky

Tirus91
Člen | 199
+
0
-

Tak záleží zda to máš u nějakého poskytovatele či na svém serveru. Například u Wedosu to jde jen na URL adresu, což by bylo pro tebe nejjednodušší skript. V ostatních případech si tu sám nechám poradit (teprve mne toto čeká – s Nette pracuji krátce a dělal jsem jen jednoduché aplikace/weby)

Desttro
Člen | 126
+
0
-

Mám možnost jak přes URL, tak přímo na virtuálu, akorát teď googlím, jak by takový cron script pro nette mohl vypadat.

David Kudera
Člen | 455
+
0
-

Tak buď je tady např. cronner a nebo kdyby/console , což používám i já, protože je to super nejen pro cron, ale i pro jakýkoliv jiný cli skripty.

iguana007
Člen | 970
+
0
-

@Desttro tady máš návod, jak na to: https://pla.nette.org/…tovani-v-cli

Desttro
Člen | 126
+
0
-

Díky, zkusím si s tí pohrát

Desttro
Člen | 126
+
0
-

Zdravím,
konečně jsem se k tomu cronu dostal. Cronner nefunguje – už jsem informoval autora tady.
Tak zkouším kdyby/console, ten názorný příklad na GitHubu.
Spouštím v konzoli: php index.php app:newsletter
ale furt to hází chybu: ERROR: application encountered an error and can not continue.

zde je kód:

namespace App\Console;

use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;

class SendNewslettersCommand extends Command
{
    protected function configure()
    {
        $this->setName('app:newsletter')
            ->setDescription('Sends the newsletter');
    }

    protected function execute(InputInterface $input, OutputInterface $output)
    {
        //$newsletterSender = $this->getHelper('container')->getByType('Models\NewsletterSender');

        try {
            //$newsletterSender->sendNewsletters();
            $output->writeLn('Newsletter sended');
            return 0; // zero return code means everything is ok

        } catch (\Nette\Mail\SmtpException $e) {
            $output->writeLn('<error>' . $e->getMessage() . '</error>');
            return 1; // non-zero return code means error
        }
    }
}

není nějaká jednodušší cesta jak spustit cron? Potřebuju jenom aby se mi v presenteru kontrolovala podmínka, a po její splnění, aby se odeslal email.

Děkuji

iguana007
Člen | 970
+
0
-
ERROR: application encountered an error and can not continue

ok a jaký error to tedy do logu vygenerovalo?

Desttro
Člen | 126
+
0
-

aha já jsem blb

[2014-09-15 13-22-09] Nette\Utils\AssertionException: The url 'localhost:8888' is not valid, please use this format: 'http://domain.tld/path'. in /Users/petr/Disk Google/htdocs/lija.cz/vendor/kdyby/console/src/Kdyby/Console/DI/ConsoleExtension.php:108  @  CLI: index.php app:newsletter  @@  exception-2014-09-15-12-37-54-5769e0e5a974548acd9e43b117cda248.html

na lokálu to nepůjde, zkusím upravit /etc/hosts – třeba to půjde.

Desttro
Člen | 126
+
0
-

Funguje to, ale jak napojím moji funkci v presenteru na ten command?

David Kudera
Člen | 455
+
+1
-

Docela jednoduše. Asi jde o nějakou „pomocnou“ funkci že? Vše jde mít někde jinde, kde to dává větší smysl, než v presenterech. Nějaký model, služba, fasády, cokoliv… Pokud potřebuješ použít v presenteru, jen to zavoláš, pokud potřebuješ v cli, taky jen zavoláš..

Nakonec budeš mít jen hezké a jednoduché presentery, které sami celkem nic nedělají

Desttro
Člen | 126
+
0
-

Díky, ještě jsem modely nepoužíval – asi je načase. Furt mi to ale hází chybu:

Nette\DI\MissingServiceException
Service of type Models\NewsletterSender not found.

v app/models mám NewsletterSender.php

namespace App\Model;

use \Nette\Mail\Message;
use \Nette\Mail\SendmailMailer;

class NewsletterSender extends Nette\Object {

	public function SendNewsletters()
	{
		$mail = new Message;
		$mail->setFrom('Franta <franta@example.com>')
	    ->addTo('test@test.cz')
	    ->setSubject('Potvrzení objednávky')
	    ->setBody("Dobrý den,\nvaše objednávka byla přijata.");

	    $mailer = new SendmailMailer;
		$mailer->send($mail);
	}
}

furt to nemůžu rozchodit :/ Jak kdybych to měl někde zaregistrovat

Editoval Desttro (15. 9. 2014 21:41)

David Kudera
Člen | 455
+
0
-

Přihodím tu odkaz na namespaces (doporučuji pořádně nastudovat ;-)

Do configu si pak zaregistruješ tuhle svoji službu a její celý název je \App\Model\NewsletterSender a ne \Models\NewsletterSender, takže tam, kde to tak je, to přepiš.

Ukázka configu:

services:

	- App\Model\NewsletterSender

a dál už to stačí si to nechat jen injectnout tam, kam potřebuješ..

jo a ještě v use nemusí být počáteční zpětné lomítko

Desttro
Člen | 126
+
0
-

Děkuji