Avatar billede thingholm.dk Nybegynder
08. marts 2003 - 17:33 Der er 5 kommentarer og
1 løsning

HTML mail med vedhæftning

Hej

Jeg bruger dette script til at sende plain text mail med vedhæftninger. Men jeg kunne godt tænke mig at kunne HTML formatere mine mails.

Jeg håber at nogen kan hjælpe.

VH

Anders Thingholm

*****

<?
    include("../inc/security.php");
    include ("../inc/class.FastTemplate.php");
    $tpl = new FastTemplate(".");
    $tpl->define(array("tabel" => "newsletter_send.htm"));


// Hvis formen er submitted
if ($submit){
   
    if ($filen)
    {
   
        // Definér $boundary
        // boundary er en unik streng der identifiserer vores email
        $boundary = uniqid("");
       
        // Hvis filtypen genkendes af browseren, sætter vi mime-typen til filtypen
        if ($filen_type)
        {
        $mimeType = $filen_type;
           
        // Ellers, sætter vi mime-type til ukendt
        }
        else
        {
        $mimeType =  "application/unknown";
        }
       
        // Læs filen ind i en variable
        $fil_var = fread(fopen($filen, "r"), filesize($filen));
       
        // Gør filen læsevenlig for email-klienten
        $fil_var = base64_encode($fil_var);
       
        // Split filkoden op i linier med 76 tegn i hver
        $fil_var = chunk_split($fil_var);
   
        // Følgende lille stykke klarer det meste mht. headers, der fortæller email-klienten hvad der er på vej
   
        // Vi sætter vores unikke streng ind her
        $body  = "\n--$boundary\n";
               
        // Vi fortæller at følgende stump er af typen text/plain samt
        // hvilket tegnsæt vi bruger
        $body .= "Content-type: text/html; charset=iso-8859-1\n";
        $body .= "Content-transfer-encoding: 8bit\n\n";
        // Vi sætter body-texten ind her
        $body .= $body_text."\n\n";
       
        // Slut på brødteksten
        $body .= "--$boundary\n";
       
        // Så er det filens tur
        // Vi fortæller lige mime-typen og filnavnet
        $body .= "Content-type: $mimeType; name=$filen_name\n";
       
        // Fortæller at vi vil have filen hæftet ved - ikke direkte i mailen.
        // Vil du gerne have den direkte i mailen, ændres 'attachment' til 'inline'
        // Bemærk: Bl.a. OE viser _også_ filen i selve mailen selvom du angiver 'attachment'
        $body .= "Content-disposition: attachment; filename=$filen_name\n";
       
        // Klienten skal have at vide at meddelelsen er encoded med base64
        $body .= "Content-transfer-encoding: base64\n\n";
       
        // Vi sætter filkoden ind
        $body .= $fil_var."\n\n";
       
        // Vi slutter af med den samme unikke streng som vi startede med
        $body .= "--$boundary--";
   
        // Vi definerer from-headeren
        $headers  = "From: <info@xyz.dk>\n";
       
        // Vi fortæller hvilken type indhold mailen indeholder
        // samt emailens unikke id-streng
        $headers .= "Content-type: multipart/mixed; boundary=\"$boundary\"";
       
        // Send mailen til alle brugere i databasen
           
        include ("../inc/dbconnect.inc");
        $sql = Mysql_query("SELECT email FROM newsletter") or die(mysql_error());
       
        while ($row = Mysql_fetch_array($sql))
        {
        mail("$row[email]",$emne, $body, $headers);
        }
    }
    else
    {
        $body = $body_text;
       
        $headers  = "From: <info@xyz.dk>";
       
        include ("../inc/dbconnect.inc");
        $sql = Mysql_query("SELECT email FROM newsletter") or die(mysql_error());
       
        while ($row = Mysql_fetch_array($sql))
        {
        mail("$row[email]",$emne, $body, $headers);
        }
   
   
       
    }   
}




    $tpl->parse("GLOBAL", "tabel");
    $tpl->FastPrint();

?>
Avatar billede jakoba Nybegynder
08. marts 2003 - 17:45 #1
Det er korrekt at mange mail-programmer vil forstå of vis HTML formatteret mail.
Men der er også mange der ikke vil, og istedet viser modtageren den rå og uforståeelige souce.
Og de der forstår Html forstår som regel kun et subset af html ( og naturligvis ikke samme subset som hinanden :-)). Html i mails er endnu mindre standardiseret end html i browsere.

så alt ialt vil jeg anbefale du lader være med at sende html formatteret mail. Det er ikke risikoen værd.

Og har desuden den bagdel at sådan en html-formatteret mail med billeder osv tager en rum tid at hente fra mailserveren. Tid hvor den modtager du ønsker at gøre et godt indtryk på, istedet sidder og bliver irriteret, "jeg håber sku den megamail er ventetiden værd". du genererer et negativt før-førstehåndsindtryk.

hvad med at lave en webside med din mail på, og så sende en ganske almindelig text-only mail med et link til den side. Så kan modtageren selv bestemme om han ønske at klikke på det link og få din 'flotte' mail frem i et browservindue.

mvh JakobA
Avatar billede thingholm.dk Nybegynder
08. marts 2003 - 17:49 #2
Jeg er med på konsekvenserne, men det skulle gerne være HTML-formateret.
Avatar billede thingholm.dk Nybegynder
08. marts 2003 - 18:20 #3
Nu prøver jeg med dette script:

$myname = "Me Myself";
$myemail = "myself@email.com";

$contactname = "Mister Contact";
$contactemail = "anders@thingholm.dk";

$message = "hello from happy me";
$subject = "A mail not refused by Hotmail";

$headers .= "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/html; charset=iso-8859-1\r\n";
$headers .= "From: ".$myname." <".$myemail.">\r\n";
$headers .= "To: ".$contactname." <".$contactemail.">\r\n";
$headers .= "Reply-To: ".$myname." <$myreplyemail>\r\n";
$headers .= "X-Priority: 1\r\n";
$headers .= "X-MSMail-Priority: High\r\n";
$headers .= "X-Mailer: Just My Server";

mail($contactemail, $subject, $message, $headers);

Men jeg får en mail hvor der står:

Content-type: text/html; charset=iso-8859-1

From: Me Myself <myself@email.com>
To: Mister Contact <anders@thingholm.dk>
Reply-To: Me Myself <>
X-Priority: 1

X-MSMail-Priority: High

X-Mailer: Just My Server

hello from happy me



Det er vel ikke meningen...
Avatar billede thingholm.dk Nybegynder
08. marts 2003 - 18:34 #4
Hej igen

Jeg løste vil at arbejde lidt med content type...

VH

Anders
Avatar billede ulfhedne Nybegynder
10. marts 2003 - 12:00 #5
Kunne man evt. se det samlede script?
Avatar billede thingholm.dk Nybegynder
10. marts 2003 - 19:43 #6
if ($submit){
   
    if ($filen)
    {
   
        // Definér $boundary
        // boundary er en unik streng der identifiserer vores email
        $boundary = uniqid("");
       
        // Hvis filtypen genkendes af browseren, sætter vi mime-typen til filtypen
        if ($filen_type)
        {
        $mimeType = $filen_type;
           
        // Ellers, sætter vi mime-type til ukendt
        }
        else
        {
        $mimeType =  "application/unknown";
        }
       
        // Læs filen ind i en variable
        $fil_var = fread(fopen($filen, "r"), filesize($filen));
       
        // Gør filen læsevenlig for email-klienten
        $fil_var = base64_encode($fil_var);
       
        // Split filkoden op i linier med 76 tegn i hver
        $fil_var = chunk_split($fil_var);
   
        // Følgende lille stykke klarer det meste mht. headers, der fortæller email-klienten hvad der er på vej
   
        // Vi sætter vores unikke streng ind her
        $body  = "\n--$boundary\n";
       
        // Vi fortæller at følgende stump er af typen text/plain samt
        // hvilket tegnsæt vi bruger
        $body .= "Content-type: text/html; charset=iso-8859-1\n";
        $body .= "Content-transfer-encoding: 8bit\n\n";
        // Vi sætter body-texten ind her
        $body .= $body_text."\n\n";
       
        // Slut på brødteksten
        $body .= "--$boundary\n";
       
        // Så er det filens tur
        // Vi fortæller lige mime-typen og filnavnet
        $body .= "Content-type: $mimeType; name=$filen_name\n";
       
        // Fortæller at vi vil have filen hæftet ved - ikke direkte i mailen.
        // Vil du gerne have den direkte i mailen, ændres 'attachment' til 'inline'
        // Bemærk: Bl.a. OE viser _også_ filen i selve mailen selvom du angiver 'attachment'
        $body .= "Content-disposition: attachment; filename=$filen_name\n";
       
        // Klienten skal have at vide at meddelelsen er encoded med base64
        $body .= "Content-transfer-encoding: base64\n\n";
       
        // Vi sætter filkoden ind
        $body .= $fil_var."\n\n";
       
        // Vi slutter af med den samme unikke streng som vi startede med
        $body .= "--$boundary--";
   
        // Vi definerer from-headeren
        $headers  = "From: <info@xyz.dk>\n";
       
        // Vi fortæller hvilken type indhold mailen indeholder
        // samt emailens unikke id-streng
        $headers .= "Content-type: multipart/mixed; boundary=\"$boundary\"";
       
        // Send mailen til alle brugere i databasen
           
        include ("../inc/dbconnect.inc");
        $sql = Mysql_query("SELECT email FROM newsletter") or die(mysql_error());
       
        while ($row = Mysql_fetch_array($sql))
        {
        mail("$row[email]",$emne, $body, $headers);
        }
    }
    else
    {
        $body = $body_text;
       
        $headers  = "From: <info@xyz.dk>\nContent-Type: text/html; charset=iso-8859-1";
       
        include ("../inc/dbconnect.inc");
        $sql = Mysql_query("SELECT email FROM newsletter") or die(mysql_error());
       
        while ($row = Mysql_fetch_array($sql))
        {
        //mail("$row[email]",$emne, $body, $headers);

        mail("$row[email]",$emne, $body, $headers);
        }
   
   
       
    }   
}
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