---
title: "Egen mailklass med phpMailer och mallhantering"
type: "forum-thread"
url: "https://www.webforum.nu/amne/php/184680-egen-mailklass-med-phpmailer-och-mallhantering"
topic: "PHP"
topic_url: "https://www.webforum.nu/amne/php"
author: "MickeA.com"
published: "2010-09-21T07:00:37.000Z"
updated: "2010-09-24T05:51:04.000Z"
replies: 2
views: 564
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/php/184680-egen-mailklass-med-phpmailer-och-mallhantering"
---

# Egen mailklass med phpMailer och mallhantering

## #1 — MickeA.com, 2010-09-21T07:00Z

Hej

Jag har byggt en egen mailklass som använder sig av phpMailer för att skicka mail. Såhär ser det ut:

*MyClass.php*

```php
require("phpMailer/class.phpmailer.php");

Class MyMailer extends PHPMailer {

// __construct och allt annat som är bra...

    public function parseMail(){
        $data = $this->template;
        foreach($this->vars as $key => $value){
            $data = str_replace($key, $value, $data);
        }
        return $data;
    }

    public function setTemplate(){
        $template = $this->template;
        $fp = fopen($template, "r");
        $data = fread($fp, filesize($template));
        fclose($fp);
        $this->template = $data;
        return $data;
    }
}
```

*SendMail.php*

```php
function replaceVars($data, $vars = array()){
    foreach($vars as $key => $value){
        $data = str_replace($key, $value, $data);
    }
    return $data;
}
...
$mail = new MyMailer();
...
while($res = mysql_fetch_assoc($result)){
    $vars = array(
                    "{USER_NAME}"    => $res['user_name'],
                    "{FIRST_NAME}"    => $res['user_firstname'],
                    "{LAST_NAME}"    => $res['user_lastname']
                );
    
    $mail_body = replaceVars($res['mail_body'], $vars);
    $mail->template = ROOTPATH . "inc/template.newsletter.htm";
    
    if(!$mail->SetTemplate() == false){
        $mail->vars = array(
                            "{SKINPATH}"         => SKINPATH,
                            "{CONTENT}"             => $mail_body,
                            "{DATETIME}"         => date("Y-m-d H:i:s"),
                            "{IPADDR}"             => $_SERVER['REMOTE_ADDR']
                            );

        $msgBody = $mail->parseMail();
        $mail->MsgHTML($msgBody);

        $mail->AddAddress($res['user_email'], $res['user_firstname'] . " " . $res['user_lastname']);

        $mail->SetFrom(MAIL_FROM, MAIL_FROMNAME);
        $mail->Subject = $res['mail_subject'];

        if($mail->Send()){
            $numMail++;
        }else{
            echo $mail->ErrorInfo . "<br />";
        }
        $mail->ClearAddresses();
        $mail->ClearCCs();
        $mail->ClearBCCs();
        $mail->template = null;    
    }
}
$mail = null;
...
```

När jag kör ovanstående för att skicka massmail har vissa hört av sig att det står fel namn osv. i mailen. Det händer inte hela tiden och inte hos alla som använder sig av scriptet, men hos vissa. Därför misstänker jag att det sker något konstigt när **$vars** osv ersätts i loopen.

Någon som ser några direkta fel i ovanstående, eller finns det något jag kan göra annorlunda för att det ska bli bättre? Det här är väldigt svårt att felsöka eftersom när jag använder scriptet för att skicka till mig själv blir det rätt, felet uppkommer när man skickar till \> 100 eller där i krokarna.

Tycker det borde funka som det är nu med tanke på att jag sätter *$template = null* vid varje loop.

Tacksam för förslag!

Permalänk: https://www.webforum.nu/p/184680

## #2 — b242569, 2010-09-21T15:57Z

Det händer ibland att jag på mitt yahookonto får mail som skulle gå till någon annan, och denne har alltid också ändelsen yahoo.se och, tror jag i alla fall, alltid samma startbokstäver som jag. Är det liknande för dig?

Ex. du har 2 adressater med adresserna <leif@yahoo.se> respektive <lena@yahoo.se> och du skriver ett mail till Leif med texten:

"Hej Leif

osv osv"

Men det blir Lena som får det istället?

Eller påminner det inte alls om hur det är för dig? Jag har inget direkt svar på din fråga eller förslag på hur det ska lösas. Tog bara upp ett exempel på hur det är när jag tar emot e-post ifall det liknar ditt problem.

Permalänk: https://www.webforum.nu/p/2255065

## #3 — MickeA.com, 2010-09-24T05:51Z

En sak som slog mig... I nuläget initierar jag klassen **innan** min *while-loop*, undra om man inte skulle testa att initiera den inuti loopen och stänga den efter varje varv? Kommer jag tappa mycket prestanda på det? Variablerna verkar ju inte "släppa", så vet inte riktigt hur jag ska lösa det här.

Permalänk: https://www.webforum.nu/p/2255201

---

Tråden på webben: https://www.webforum.nu/amne/php/184680-egen-mailklass-med-phpmailer-och-mallhantering
