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

před 8 lety

David Grudl
founder | 6735
+
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 ;-)

před 8 lety

Patrik Votoček
Člen | 2249
+
0
-

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

před 8 lety

kravčo
Člen | 723
+
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');

před 8 lety

Patrik Votoček
Člen | 2249
+
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…

před 8 lety

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?

před 8 lety

Filip Procházka
Moderator | 4692
+
0
-

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