Při odesílání mailu se přidá adresát z předchozího odeslání mailu

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

Zdravím a prosím o pomoc.

Mám objednávkový formulář po jehož vyplnění, odeslání, uložení do DB odešlu klientovi potvrzující mail a zároveň sobě notifikační mail, jenže ten notifikační mail obsahuje po odeslání i adresu adresáta z předchozího mailu.

poradíte mi kde dělám chybu? S nette se teprve učím tak budu rád za každou radu.

po odeslání formuláře:

public function tourFormSubmitted(Form $form) {
    $this->productRepository->createProduct($form->getValues());
    $this->myMessage->sendConfirmMail($form->getValues());
    $this->myMessage->sendNotificationMail($form->getValues());
    $this->flashMessage('objednano.', 'success');
    $this->redirect('Homepage:default');
}

MyMessage mam registrovanou jako sluzbu a vypada takhle:

<?php

namespace Offer;

use Nette\Mail\Message;

class MyMessage extends Message {



    //oznameni na mail o nove obednavce
    public function sendNotificationMail($form) {
        $this->setFrom('Objednávka VT <mail@mail.xx>')
                ->addTo('mail2@mail2.yy')
                ->setSubject('predmet')
                ->setHTMLBody("text")
                ->send();
    }

    //potvrzujici mail
    public function sendConfirmMail($form) {
        if ($form['owen_use'] == 1) {
            $owen_use = "Ano";
        } else {
            $owen_use = "Ne";
        }
        $this->setFrom('Objednávka VT <mail@mail.xx>')
                ->addTo($form['mail'])
                ->setSubject('predmet')
                ->setHTMLBody("text")
                ->send();
    }

    public function sendConfirmOrderMail($form) {
        $this->setFrom('Objednávka VT <mail@mail.xx>')
                ->addTo($form['mail'])
                ->setSubject('predmet')
                ->setHTMLBody("text")
                ->send();
    }

}
?>
jiri.pudil
Nette Blogger | 1032
+
0
-

Problém je v tom, že používáš pořád stejnou instanci třídy Message. A zatímco metody set* příslušné vlastnosti přepíšou, metoda addTo adresáta přidá.

Podědil bych si spíš Mailer než Message:

class MyMailer extends Nette\Mail\SendmailMailer
{

	public function sendNotificationMail($data)
	{
		$mail = new Nette\Mail\Message;
		$mail->setFrom('Objednávka VT <mail@mail.xx>')
			->...;
		$this->send($mail);
	}

	// další metody obdobně

}

Editoval jiri.pudil (25. 11. 2012 0:06)

tessicz
Člen | 5
+
0
-

Tak sem to udělal jak píšeš, ale vyskytl se další problém – vyhazuje mi to chybu:

Service 'nette.mail': Multiple services of type Nette\Mail\IMailer found: nette.mailer, mymailer
enumag
Člen | 2118
+
0
-

Imho není vhodné dědit ani Message ani Mailer, ale napsat si vlastní službu, která bude využívat @nette.mailer.

Nox
Člen | 378
+
0
-

Nepleť si Mailer a Message. Mailer je entita co posílá zprávy, Message je ta jedna zpráva. Mailer stačí používat normálně jeden, ale u Message pro každou zprávu vytvoř novou instanci. Mělo by to jít přes context->createMail() pro message, ale nejsem si jistý (dle https://api.nette.org/…ion.php.html#207 )

Editoval Nox (25. 11. 2012 11:00)