[2010–09–17] SmtpMailer konečně přímo v Nette

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
David Grudl
Nette Core | 8110
+
0
-

SmtpMailer konečně nativní součástí frameworku.

use Nette\Mail\Mail
	Nette\Mail\SmtpMailer;

$mail = new Mail;
$mail->setMailer(new SmtpMailer(array(
	'host' => 'smtp.gmail.com',
	'username' => 'franta@gmail.com',
	'password' => '*****',
	'secure' => 'ssl',
)));
$mail->setFrom('John Doe <doe@example.com>');
$mail->addTo('Lady Jane <jane@example.com>');
$mail->setSubject('Hello Jane!');
$mail->setBody('Have a nice day!');
$mail->send();

p.s. díky všem tvůrcům rozšíření, které tuto chybějící část tak dlouho suplovali a možná svým lepším mailerem budou i nadále suplovat ;-)

Patrik Votoček
Člen | 2221
+
0
-

já se naopak té koule na noze rád zbavím. :-) ale bylo by dobré mít možnost Mailer nastavit v konfigu.

kravčo
Člen | 721
+
0
-

vrtak-cz napsal(a):

… bylo by dobré mít možnost Mailer nastavit v konfigu.

Myslím, že možnosti na to sú:

mailing_script.php

$mail = new Mail;
$mail->setMailer(Environment::getService('Nette\Mail\IMailer'));

bootstrap.php

Mail::$defaultMailer = Environment::getService('Nette\Mail\IMailer');
Patrik Votoček
Člen | 2221
+
0
-

Já jsem líný programátor proto něco jako tohle:

$mail->setMailer(Environment::getService('Nette\Mail\IMailer'));
// nebo
Mail::$defaultMailer = Environment::getService('Nette\Mail\IMailer');

psát nechci. Bohužel jsem ve vlaku na GPRS jinak bych našel vlákno kde davídek tuhle feature sliboval…

viktorc
Člen | 21
+
0
-

Na vyber mailera v Mail pomocou config staci upravit Mail::getMailer nejako takto:

<?php
public function getMailer()
{
	if ($this->mailer === NULL) {
        try {
            $this->mailer = Environment::getService('Nette\\Mail\\IMailer');
        } catch (InvalidStateException $e) {
            if ($a = strrpos(self::$defaultMailer, '\\')) self::$defaultMailer = substr(self::$defaultMailer, $a + 1); // fix namespace
            $this->mailer = is_object(self::$defaultMailer) ? self::$defaultMailer : new self::$defaultMailer;
        }
	}
	return $this->mailer;
}
?>

a do config.ini potom staci napisat

<?php
service.Nette-Mail-IMailer = SmtpMailer
?>

Prednost bude mat samozrejme explicitne nastaveny mailer cez $mail->setMailer(), potom config:service.Nette-Mail-IMailer a najnizsiu prioritu Mail::$defaultMailer.

Dalsia drobnost je podpora konfiguracie samotneho SmtpMailera z config.ini. Staci doplnit na zaciatok jeho konstruktora:

<?php
public function __construct(array $options = array())
{
    if (empty($options))
        $options=Environment::getConfig('smtpmailer');

    if ($options['host']) {
	....
?>

Parametre ako uzivatelske meno a heslo pre SMTP autentikaciu napises raz (do config.ini) a v programe robis len to, co naozaj treba.

Slo by to doplnit (takto, ci nejako podobne) ak do Nette?

Filip Procházka
Moderator | 4668
+
0
-

trošku učesat a jsem pro přidání