Ako pouzit SMTP v komponente ked mam definovane info v neone?

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

Caute viete mi poradit? Chcel by som si zadefinovat info pre SMTP mail v neone a potom v komponente uz len nadefinovat telo, komu .. a odoslat, viete mi poradit ako?
mam neon:

		mailer:
			smtp:
				host: 'smtp.example.com'
				username: 'username'
				password: 'heslo'
				secure: 'ssl'
	services:
		nette.mailer:
			class: Nette\Mail\SmtpMailer

a v komponente mam klasicky mail :

$template = new Nette\Templating\FileTemplate('email.phtml');
$template->registerFilter(new Nette\Latte\Engine);
$template->orderId = 123;

$mail = new Message;
$mail->setFrom('Franta <franta@example.com>')
    ->addTo('petr@example.com')
    ->setHtmlBody($template)
    ->send();

ako toto poslem cez SMTP MAILER?

pidiclovek
Člen | 91
+
0
-

V první řadě musíš nějak dostat do komponenty službu nette.mailer. Doporučuju přečíst toto a toto. U komponenty si dej bacha, pokud budeš závisost předávat přes konstruktor, abys dodržel předávané parametry a nezapomněl zavolat konstruktor na předkovi.

Samotný mailer přidáš, pokud sis ho dodal do komponenty, takto:

$mail = new Message;
$mail->setMailer($this->mailer)
$mail->setFrom('Franta <franta@example.com>')
    ->addTo('petr@example.com')
    ->setHtmlBody($template)
    ->send();
h4kuna
Backer | 740
+
0
-

duskohu napsal(a):
mam neon:

		mailer:
			smtp:
				host: 'smtp.example.com'
				username: 'username'
				password: 'heslo'
				secure: 'ssl'
	services:
		nette.mailer:
			class: Nette\Mail\SmtpMailer

Já to mám takto:

		mailer:
			smtp: true
			host: 'smtp.example.com'
			username: 'username'
			password: 'heslo'
			secure: 'ssl'
#	services:
#		nette.mailer:
#			class: Nette\Mail\SmtpMailer

Editoval h4kuna (1. 10. 2012 9:58)

duskohu
Člen | 778
+
0
-

No skusal som si to poslat do modelu, ale jde mi to, ked su dam dumpnut triedu tak mi vrati:

Nette\Mail\SmtpMailer(7) ▼ {
   connection private => NULL
   host private => "localhost" (9)
   port private => 25
   username private => ""
   password private => ""
   secure private => ""
   timeout private => 20

vrati mi :
Doslo k pokusu o pristup k soketu sposobom zakazanym jeho pristupovimi pravami.,
ale ked si to nastavim manualne tak to ide, v com moze bit este problem?

$mailer = new Nette\Mail\SmtpMailer(array(
        'host' => 'host',
        'username' => 'username',
        'password' => 'heslo',
        'secure' => 'ssl',
));
$mail = new Nette\Mail\Message;
$mail->setMailer($this->mailer);
......
Jan Mikeš
Člen | 771
+
0
-

Uprav si to v neonu tak at to mas podle h4kuna, je dulezite tam mit ten radek smtp: true

duskohu
Člen | 778
+
0
-

no to mam

h4kuna
Backer | 740
+
0
-

Pokud to tak máš tak nemusíš řešit

<?php
$mail->setMailer($this->mailer);
?>

Koukni se jak se ti v temp/cache/_Nette.Configurator/„soubor.php“ překládá createServiceNette_mailer a createNette_mail, případně ukaž.

duskohu
Člen | 778
+
0
-

No mam tam toto:

	/**
	 * @return Nette\Mail\Message
	 */
	public function createNette__mail()
	{
		$service = new Nette\Mail\Message;
		$service->setMailer($this->getService('nette.mailer'));
		return $service;
	}


	/**
	 * @return Nette\Callback
	 */
	protected function createServiceNette__mailFactory()
	{
		$service = new Nette\Callback($this, 'createNette__mail');
		return $service;
	}


	/**
	 * @return Nette\Mail\SmtpMailer
	 */
	protected function createServiceNette__mailer()
	{
		$service = new Nette\Mail\SmtpMailer;
		return $service;
	}

samozrejme v neonu mam toto:

	nette:
		mailer:
			smtp:
				smtp: true
				host: smtp.test.com
				username: 'user'
				password: 'pass'
				secure: 'ssl'
h4kuna
Backer | 740
+
0
-

duskohu napsal(a):

	/**
	 * @return Nette\Mail\SmtpMailer
	 */
	protected function createServiceNette__mailer()
	{
		$service = new Nette\Mail\SmtpMailer;
		return $service;
	}

je vidět že se ti sem nepředávaj přihlašovací údaje, uprav na:

	nette:
		mailer:
			smtp: true
			host: smtp.test.com
			username: 'user'
			password: 'pass'
			secure: 'ssl'

já to mám totiž v parameters, za nedorozumění se omlouvám

parameters:
    smtp:
        smtp: true
        host: smtp.test.com
        username: 'user'
        password: 'pass'
        secure: 'ssl'

nette:
    mailer: %smtp%
duskohu
Člen | 778
+
0
-

Dakujem, ale aj po zmene nerozumiem preco to nejde v: temp/cache/_Nette.Configurator/„soubor.php“ mam uz v parametroch to spravne nastavenie, ale stale mi to nepredava parametre ake ma, cache som premazal

**
* @return Nette\Mail\SmtpMailer
*/
protected function createServiceNette__mailer()
{
  $service = new Nette\Mail\SmtpMailer;
  return $service;
}

v modelu mam:

public function __construct(Nette\Mail\SmtpMailer $mailer)
{
  $this->mailer = $mailer;
  \Nette\Diagnostics\Debugger::barDump($mailer);
}

a ten debug mi vrati toto:

Nette\Mail\SmtpMailer(7) ▼ {
   connection private => NULL
   host private => "localhost" (9)
   port private => 25
   username private => ""
   password private => ""
   secure private => ""
   timeout private => 20

proste uplne ine nastavenia ako som dal do neonu, a ake mam v cache, nevies co by som mohol robit este zle?

h4kuna
Backer | 740
+
0
-

Zkus ještě ten druhý způsob, všechno přesunout do sekce parameters a pak to vytáhnout pomocí %smtp%.

Mělo by to generovat něco takového, první parametr vložit jako pole

/**
 * @return Nette\Mail\SmtpMailer
 */
protected function createServiceNette__mailer()
{
    $service = new Nette\Mail\SmtpMailer(array(
        'smtp' => TRUE,
        'username' => 'login',
        'password' => 'heslo',
        'host' => 'server',
        'port' => 465,
        'secure' => 'ssl',
    ));
    return $service;
}

Editoval h4kuna (1. 10. 2012 10:27)

duskohu
Člen | 778
+
0
-

pave ze tak to uz mam, ci je aj nejaka ina moznost?
neon:

common:
	parameters:
		smtp:
			smtp: true
			host: smtp.test.com
			username: 'user'
			password: 'pass'
			secure: 'ssl'

	nette:
		mailer: %smtp%

	services:
		nette.mailer:
			class: Nette\Mail\SmtpMailer

cache:

	/**
	 * @return Nette\Mail\Message
	 */
	public function createNette__mail()
	{
		$service = new Nette\Mail\Message;
		$service->setMailer($this->getService('nette.mailer'));
		return $service;
	}


	/**
	 * @return Nette\Callback
	 */
	protected function createServiceNette__mailFactory()
	{
		$service = new Nette\Callback($this, 'createNette__mail');
		return $service;
	}


	/**
	 * @return Nette\Mail\SmtpMailer
	 */
	protected function createServiceNette__mailer()
	{
		$service = new Nette\Mail\SmtpMailer;
		return $service;
	}

tuto variantu si myslel?

h4kuna
Backer | 740
+
0
-

Tuto část smaž.

duskohu napsal(a):

		nette.mailer:
			class: Nette\Mail\SmtpMailer

Servisu nedefinuj, tu jsem už v předchozím příspěvku zakomentoval.

Editoval h4kuna (1. 10. 2012 11:08)

duskohu
Člen | 778
+
0
-

:-) Parada uz to ide, prepac,to zakomentovane som nejako prehliadol, Dakujem velmi pekne.

h4kuna
Backer | 740
+
0
-

Není zač.