Email csatolmány küldése Drupal-ban a HtmlMimeMail osztállyal
Egyik ügyfelünknél felmerült az igény, hogy egy form kitöltése után automatikusan küldjünk ki egy email-t csatolmánnyal együtt.
A probléma megoldására a régebbről ismert HtmlMimeMail PHP osztályt használtam.
Nagyon jól megszerkesztett osztály úgyhogy nagyon könnyű használni, ám Drupal alatt mégsem lehetett alkalmazni a leírásban olvastakat.
Az első problémát az jelentette, hogy nem lehetett az osztályt beilleszteni, illetve objektumot készíteni belőle. Egyszerűen kifagyott tőle a Drupal és fehér képernyő jelent meg. Szerencsére van olyan verziója is, amitől nem jelentkezik ez a probléma.
Innen telölthető zip-el tömörítve (20 KB): HtmlMimeMail Drupal.
Miután ez megoldódott nagyjából a HtmlMimeMail oldalán található leírásokat kellett alkalmazni néhány dolgot kivéve.
Először egy ellenőrzés arról, hogy nem-e létezik már az osztály:
-
if (!class_exists('htmlMimeMail') && !class_exists('Mail_mimePart')) {
-
require_once(dirname(__FILE__)."/htmlmimemail/htmlMimeMail.php");
-
}
Utána a szokásos eljárást követve létrehozzuk az objektumot, és beállítjuk a karakterkódolást is, hiszen a Drupal UTF-8 -at használ
-
$mail = new htmlMimeMail();
-
$mail->setTextCharset('UTF-8');
-
$mail->setHtmlCharset('UTF-8');
-
$mail->setHeadCharset('UTF-8');
A setFrom() setSubject() és a setText() vagy setHTML() beállítása ugynúgy történik mint általában:
-
$mail->setFrom($_POST["offer_name"] . " <" . $_POST["offer_email"] . ">");
-
$mail->setSubject('Ezt nézd meg');
-
$mail->setText($uzenet); // Ha text levelt kuldunk
-
$mail->setHTML($uzenet); // Ha HTML levelet kuldunk
Na ezután jöhetett a csatolmány hozzárendelése! A HtmlMimeMail weboldalán a következőt olvashatjuk:
-
$mail->addAttachment(new fileAttachment('example.zip', 'application/zip', new Base64Encoding()));
Ez sajnos hibát generál, mivel nem létezik a FileAttachement osztály, így nincs miből objektumot létrehozni.
A megoldást a következő eljárás jelentette:
-
$filename = $node->field_nyitolap_top10_latvany[0]['filepath'];
-
$attachment = '';
-
-
if ($fp = fopen($filename, 'rb')) {
-
while (!feof($fp)) {
-
$attachment .= fread($fp, filesize($filename));
-
}
-
}
-
fclose($fp);
Így a csatolmány egyből bekerült a levélbe!
Végül be kell állítani a fejlécet és elküldeni:
-
$mail->setHeader('Date',date('D, d M y H:i:s 0'));
-
$mail->setHeader('X-Mailer','Drupal');
-
$mail->send(array('<' . $_POST["offered_email_$i"] . '>'),'mail');
És tökéletesen működik a csatolmány elküldése Drupal alatt.
