Avatar billede avminarm Juniormester
16. februar 2007 - 19:41 Der er 8 kommentarer og
1 løsning

HTML via mail-funktionen - problemer med ligheds og citationstegn

Hej

JEg bakser lidt med en HTML mail der skal sendes via en form. Jeg kan godt få sendt alle mulige tags, men lige så snart jeg benytte f.eks.

<style type='text/css'>
body{
    font-family: Verdana, Arial, Helvetica, sans-serif;
    font-size: 10px;
    font-style: normal;
    font-variant: normal;
}
</style>

Bliver det til:

<style typeext/css'>  ##### FEJL HER
body{
    font-family: Verdana, Arial, Helvetica, sans-serif;
    font-size: 10px;
    font-style: normal;
    font-variant: normal;
}
</style>

Hvordan kan det være??
Avatar billede coderdk Praktikant
16. februar 2007 - 22:24 #1
Lav din Content-Transfer-Encoding til quoted-printable og kør din HTML igennem imap_8bit()...
Avatar billede coderdk Praktikant
16. februar 2007 - 22:25 #2
Alternativt kan du lave Content-Transfer-Encoding til base64 og køre din HTML igennem base64_encode efterfulgt af chunk_split :)
Avatar billede avminarm Juniormester
17. februar 2007 - 09:59 #3
ehhh har du et eksempel: jeg benytter denne klasse fra phpclasses.org - er det dumt?

class sec {
    var $secVersion = '1.0';
    var $to = '';
    var $Cc = array();
    var $Bcc = array();
    var $subject = '';
    var $message = '';
    var $attachment = array();
    var $embed = array();
    var $charset = 'ISO-8859-1';
    var $emailboundary = '';
    var $emailheader = '';
    var $textheader = '';
    var $errors = array();
   
    function sec($toname, $toemail, $fromname, $fromemail) {
        $this->emailboundary = uniqid(time());
        $this->to = "{$toname} <".$this->validateEmail($toemail).">";
        $email = $this->validateEmail($fromemail);
        $this->emailheader .= "From: {$fromname} <{$email}>\r\n";
    }
   
    function validateEmail($email) {
        if (!preg_match('/^[A-Z0-9._%-]+@(?:[A-Z0-9-]+\\.)+[A-Z]{2,4}$/i', $email))
            die('The Email '.$email.' is not Valid.');
           
        return $email;
    }
   
    function Cc($email) {
        $this->Cc[] = $this->validateEmail($email);
    }
   
    function Bcc($email) {
        $this->Bcc[] = $this->validateEmail($email);
    }
   
    function buildHead($type) {
        $count = count($this->$type);
        if($count > 0) {
            $this->emailheader .= "{$type}: ";
            $array = $this->$type;
            for($i=0; $i < $count; $i++) {
                if($i > 0) $this->emailheader .= ',';
                $this->emailheader .= $this->validateEmail($array[$i]);
            }
            $this->emailheader .= "\r\n";
        }
    }
   
    function buildMimeHead() {       
        $this->buildHead('Cc');
        $this->buildHead('Bcc');
       
        $this->emailheader .= "X-Mailer: simpleEmailClass v{$this->secVersion}\r\n";
        $this->emailheader .= "MIME-Version: 1.0\r\n";
    }
   
    function buildMessage($subject, $message = '') {
        $textboundary = uniqid(time());
        $this->subject = strip_tags(trim($subject));
       
        $this->textheader = "Content-Type: multipart/alternative; boundary=\"$textboundary\"\r\n\r\n";
        $this->textheader .= "--{$textboundary}\r\n";
        $this->textheader .= "Content-Type: text/plain; charset=\"{$this->charset}\"\r\n";
        $this->textheader .= "Content-Transfer-Encoding: quoted-printable\r\n\r\n";
        //$this->textheader .= strip_tags($message)."\r\n\r\n";
        $this->textheader .= "--$textboundary\r\n";
        $this->textheader .= "Content-Type: text/html; charset=\"$this->charset\"\r\n";
        $this->textheader .= "Content-Transfer-Encoding: quoted-printable\r\n\r\n";
        $this->textheader .= "<html>\n<body>\n{$message}\n</body>\n</html>\r\n\r\n";
        $this->textheader .= "--{$textboundary}--\r\n\r\n";
    }
   
    function mime_type($file) {
        return (function_exists('mime_content_type')) ? mime_content_type($file) : trim(exec('file -bi '.escapeshellarg($file)));
    }
   
    function attachment($file) {
        if(is_file($file)) {
            $basename = basename($file);
            $attachmentheader = "--{$this->emailboundary}\r\n";
            $attachmentheader .= "Content-Type: ".$this->mime_type($file)."; name=\"{$basename}\"\r\n";
            $attachmentheader .= "Content-Transfer-Encoding: base64\r\n";
            $attachmentheader .= "Content-Disposition: attachment; filename=\"{$basename}\"\r\n\r\n";
            $attachmentheader .= chunk_split(base64_encode(fread(fopen($file,"rb"),filesize($file))),72)."\r\n";
           
            $this->attachment[] = $attachmentheader;
        } else {
            die('The File '.$file.' does not exsist.');
        }
    }
   
    function embed($file) {
        if(is_file($file)) {
            $basename = basename($file);
            $fileinfo = pathinfo($basename);
            $contentid = md5(uniqid(time())).".".$fileinfo['extension'];
            $embedheader = "--{$this->emailboundary}\r\n";
            $embedheader .= "Content-Type: ".$this->mime_type($file)."; name=\"{$basename}\"\r\n";
            $embedheader .= "Content-Transfer-Encoding: base64\r\n";
            $embedheader .= "Content-Disposition: inline; filename=\"{$basename}\"\r\n";
            $embedheader .= "Content-ID: <{$contentid}>\r\n\r\n";
            $embedheader .= chunk_split(base64_encode(fread(fopen($file,"rb"),filesize($file))),72)."\r\n";
           
            $this->embed[] = $embedheader;
                       
            return "<img src=3D\"cid:{$contentid}\">";
        } else {
            die('The File '.$file.' does not exsist.');
        }
    }
   
    function sendmail() {
        $this->buildMimeHead();
       
        $header = $this->emailheader;
       
        $attachcount = count($this->attachment);
        $embedcount = count($this->embed);
       
        if($attachcount > 0 || $embedcount > 0) {
            $header .= "Content-Type: multipart/mixed; boundary=\"{$this->emailboundary}\"\r\n\r\n";
            $header .= "--{$this->emailboundary}\r\n";
            $header .= $this->textheader;

            if($attachcount > 0) $header .= implode("",$this->attachment);
            if($embedcount > 0) $header .= implode("",$this->embed);
            $header .= "--{$this->emailboundary}--\r\n\r\n";
        } else {
            $header .= $this->textheader;
        }
               
        return mail($this->to, $this->subject, $this->message, $header);
    }
}
Avatar billede coderdk Praktikant
17. februar 2007 - 10:50 #4
Jeg ville bruge http://phpmailer.sf.net/ ;)
Avatar billede avminarm Juniormester
17. februar 2007 - 22:20 #5
jeg har overvejet den - men seneste fil er fra 2005? - bliver den stadigvæk opdateret?
Avatar billede coderdk Praktikant
17. februar 2007 - 22:25 #6
Den virker i hvert tilfælde helt uden problemer herfra! :)
Avatar billede avminarm Juniormester
21. september 2007 - 20:04 #7
hey coder.dk havde lige glemt dette sprg - smider du ikke lige et svar
Avatar billede coderdk Praktikant
21. september 2007 - 20:54 #8
Ok :) I fremtiden kan du bruge SwiftMailer, den er fed: http://www.swiftmailer.org/ :)
Avatar billede avminarm Juniormester
21. september 2007 - 21:37 #9
den vil jeg lure lidt på - ta ;o)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester