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:

  1.       if (!class_exists('htmlMimeMail') && !class_exists('Mail_mimePart')) {
  2.         require_once(dirname(__FILE__)."/htmlmimemail/htmlMimeMail.php");
  3.       }

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

  1.       $mail = new htmlMimeMail();
  2.       $mail->setTextCharset('UTF-8');
  3.       $mail->setHtmlCharset('UTF-8');
  4.       $mail->setHeadCharset('UTF-8');

A setFrom() setSubject() és a setText() vagy setHTML() beállítása ugynúgy történik mint általában:

  1.       $mail->setFrom($_POST["offer_name"] . " <" . $_POST["offer_email"] . ">");
  2.       $mail->setSubject('Ezt nézd meg');
  3.       $mail->setText($uzenet);   // Ha text levelt kuldunk
  4.       $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:

  1. $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:

  1.       $filename = $node->field_nyitolap_top10_latvany[0]['filepath'];
  2.       $attachment = '';
  3.  
  4.       if ($fp = fopen($filename, 'rb')) {
  5.         while (!feof($fp)) {
  6.           $attachment .= fread($fp, filesize($filename));
  7.         }
  8.       }
  9.       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:

  1.       $mail->setHeader('Date',date('D, d M y H:i:s 0'));
  2.       $mail->setHeader('X-Mailer','Drupal');
  3.       $mail->send(array('<' . $_POST["offered_email_$i"] . '>'),'mail');

És tökéletesen működik a csatolmány elküldése Drupal alatt.

Leave a Reply