SwiftMailer 4 leírás

Az alábbi kivonatos í­rás a SwiftMailer 4.x verzióhoz használható. Jelen pillanatban a 4.0.3 a legfrissebb. Az alábbiakban nem törekszem a teljességre.

A SwiftMailer egy teljes mértékben objektum orientált levélküldő php-hez, mely nem a php mail() függvényére támaszkodik, hanem közvetlenül kommunikál az SMTP szerverrel. A program teljes mértékeben objektum-orientált, maximálisan testre szabható, bőví­thető. Emellett tapasztalataim szerint nagyon gyors, és abszolut megbí­zható.

Új levél létrehozás:

Az új levélküldőnek meg kell adnunk egy kapcsolatot is, amely lehet: SMTP, Sendmail, NativeMail, … Én az SMTP-t fogom használni. A swift 3-as verziója még Connection-nek hívta a kapcsolatot kezelő osztályokat, mostantól Transport a nevük.

$transport = Swift_SmtpTransport::newInstane($host, $port, $options);

Mindegyik paraméter opcionális. Ezután létrehozhatjuk az új levélküldőt:

$mail = Swift_Mailer::newInstance($transport);

vagy

$mail = Swift_Mailer::newInstance(Swift_SmtpTransport::newInstance());

A mailer osztály már kevesebb felelősséggel rendelkezik, mint a korábbi verzióban. Valójában csak kiosztja a feladatokat más oszályokra (akár el is hagyható, ha valaki ismeri a swift belső működését, bár nem javasolt).
Ezután már küldhetjük is a levelet:

$mail->send($message);

A 4.x-tól már nem a send() paramétereként kell megadni a címzett(ek)et, sem a küldőt.
Miután végeztünk a küldéssel le kell zárnunk a kapcsolatot:

$transport->stop();

A korábbi változattal ellentétben a mailer osztálynak nincs se connect(), se disconnect() metódusa. Ezt a feladatot most már teljes mértékben a transport végzi (start(), stop()).

Cí­mzettek:

A swift 4-es verziójával megszűnt a Swift_Address és Swift_Recipients osztályok. A címzettek a message részét képezik; számuk nem számít, a címek mindenképpen egy tömbben tárolódnak. Két típusú metódust használhatunk:

  • setX(): cím(ek) megadás a korábbi érték törlésével
  • addX(): további cím(ek) megadása

A cí­mzett(ek)et egyszerű felsorolással adhatjuk meg több módon:

  • egyszerű string literál az email cí­mmel, csak első paraméterként
  • egyszerű string literálként az email címet (első paraméter), majd a megnevezés (második paraméter)
  • tömbben kulcs-érték párként megadjuk az email címet – megnevezést; így több címzett is megadható (csak első paraméter)

Az új API lehetősége biztosít láncolásra. Az összes setter metódus láncolható. Ez nagyon kényelmes, és átlátható használatot biztosít.

$message = Swift_Message::newInstance();
// egy címzett
$message->setTo($email [, $name]);
$message->setCc($email [, $name]);
$message->setBcc($email [, $name]);

$message->addTo($email [, $name]);
$message->addCc($email [, $name]);
$message->addBcc($email [, $name]);

// több címzett
$message->setTo(array($email1, $email2 => $name));
$message->addCc(array($email1, $email2 => $name));
$message->setBcc(array($email1, $email2 => $name));

// láncolás az új API-val
$message
  ->setTo(array($email1, $email2 => $name))
  ->addCc(array($email1, $email2 => $name))
  ->setBcc(array($email1, $email2 => $name));

$mail->send($message)

Az üzenet:

Elérkeztünk a legfontosabb részhez. A swift külön message objektumot kí­nál a probléma megoldására:

$message = Swift_Message::newInstance([subject, body, content_type, charset]);

Bár több paraméter is megadható, én jobb szeretem, ha a kód jobban kifejezi a megadott adatokat, és ez a paraméterátadásos móka nem a legkifejezőbb. Szerencsére a swift mindenhez biztosít setter metódust.

$message = Swift_Message::newInstance()
  ->setSubject('abc')
  ->setBody('xyz', CONTENT_TYPE) // második paraméter opcionális
  ->setCharset('utf-8');

Szövegtörzs hozzáadása:

// első body elem
$message->setBody('xyz', CONTENT_TYPE);

// további body elem hozzáadása
$message->addPart('qwe', CONTENT_TYPE);

Melléklet hozzáadása:

Több módszer is rendelkezésre áll. Csatolhatunk már létező filet, de akár dinamukis tartalmat is.

Már létező file csatolása:

$message->attach(Swift_Attachment::fromPath(...));

A Swift_Attachment::fromPath($file_path, $filename, $content_type) paraméterei:

  • file_path: a file elérési útja
  • filename: az a név, amellyel csatolni szeretnénk a levélhez
  • content_type: a melléklet mime tí­pusa

Dinamikus tartalom csatolása:

$message->attach(Swift_Attachment::newInstance(...));

A Swift_Attachment::newInstance($file_data, $filename, $content_type) paraméterei:

  • file_data: a file tartalma
  • filename: az a név, amellyel csatolni szeretnénk a levélhez
  • content_type: a melléklet mime tí­pusa

Kép vagy bármilyen média beágyazása:

$message->embed(Swift_Image::fromPath(...));
$message->embed(Swift_Image::newInstance(...));

Ennek a módszernek a nagy előnye, hogy a fenti sor egy azonosí­tót ad vissza, amellyel a levélben a képre / médiára hivatkozhatunk. Bár a kódban Swift_Image osztályt használtam, ez azonban csak egy kis ‘syntactic sugar’, valójában a Swift_EmbeddedFile egy aliasa. Használata és paraméterezése teljesen megegyezik a Swift_Attachment használatával.

Tehát a tényleges használata:

$img = $message->attach(Swift_Image::newInstance(...));
<img src="$img" alt="" />

És kész.

A fenti í­rás csak egy rövid összefoglaló, nem teljes és nem helyettesí­theti a hivatalos tutorialt.

Végül lássunk egy komplett levelet, az új API használatának bemutatása végett. A példa magáért beszél:

$message = Swift_Message::newInstance()
  ->setFrom('sender@example.com')
  ->setTo('recipient@target.com', 'Foo')
  ->setReplyTo(array('noreply@example.com' => 'No Reply'))
  ->setSubject('test message')
  ->setBody('<b>html</b> body.', 'text/html')
  ->addPart('plain body', 'text/plain')
  ->attach($pdf_file_name, 'csatolt_file.pdf', 'application/pdf');

Swift_Mailer::newInstance(Swift_SmtpTransport::newInstance())
  ->send($message);

Egy hozzászólás a(z) 0ejegyzéshez

  1. Visszajelzés: SwiftMailer 4 leírás « blerou szerszámosládája

Vélemény, hozzászólás?

Adatok megadása vagy bejelentkezés valamelyik ikonnal:

WordPress.com Logo

Hozzászólhat a WordPress.com felhasználói fiók használatával. Kilépés / Módosítás )

Twitter kép

Hozzászólhat a Twitter felhasználói fiók használatával. Kilépés / Módosítás )

Facebook kép

Hozzászólhat a Facebook felhasználói fiók használatával. Kilépés / Módosítás )

Google+ kép

Hozzászólhat a Google+ felhasználói fiók használatával. Kilépés / Módosítás )

Kapcsolódás: %s