mboost-dp1

Billede i MIME mail


Gå til bund
Gravatar #1 - pstidsen
10. feb. 2012 09:15
Hvordan får jeg et billede ind i min MIME mail. Det er ligemeget hvordan, det skal bare ind. Min kode er:

<?php
$afsendermail = "[email protected]";
$hjemmeside = "Morgenmusikken";
$mail = "[email protected]"; /* [email protected] */
$viderestil = "svar.htm";

/* Her hentes oplysningerne fra de udfyldte felter */
$Kontakt = $_REQUEST['Kontakt'] ;
$email="[email protected]"; /* E-mail */
$kopi = $_REQUEST['kopi'];
$Til = $_REQUEST['Til'] ;
$Dag = $_REQUEST['Dag'] ;
$Dat = $_REQUEST['Dat'] ;
$Mdr = $_REQUEST['Mdr'] ;
$klokken = $_REQUEST['klokken'] ;
$Spille_for = $_REQUEST['Spille_for'] ;
$Boadressen = $_REQUEST['Boadressen'] ;
$Postnummer = $_REQUEST['Postnummer'] ;
$Besked = $_REQUEST['Besked'] ;
$Aar = $_REQUEST['Aar'] ;
$Telefon = $_REQUEST['Telefon'] ;

$emne="Forespørgsel vedr. $Dag d. $Dat $Mdr $Aar";

$headers="From: $Kontakt <$email>\r\n";

$eol = "\r\n"; // Som beskrevet i RFC

$formularheaders = "From: $hjemmeside <$afsendermail>".$eol;
$formularheaders .= "MIME-Version: 1.0".$eol; // fortæller at det er en MIME mail - f.eks. HTML indhold
$formularheaders .= "Content-type: text/html; charset=ISO-8859-1". $eol;

/* Her samles afsenderens navn, mailadresse og besked i en enkelt variabel */
$oplysninger="Forespørgsel på $Til - www.morgenmusikken.dk:
$Dag d. $Dat $Mdr $Aar, kl. $klokken
Spille for: $Spille_for
Boadressen: $Boadressen
Postnummer: $Postnummer
Kontakt: $Kontakt
E-mail: $email
Telefon: $Telefon
Besked: $Besked
</body>
</html>";

/* Her samles oplysningerne til afsenderens kopi af mailen */
$kopimail="<!DOCTYPE html>
<html>
<head>
<meta http-equiv='content-type' content='text/html; charset=ISO-8859-1'/>
</head>
<body>
<div style='height:250px; widht:100px; background:url(http://runescapenews.dk/Pstidsen/musik.gif)</div><br><br>
<h1>Til: $Kontakt</h1><br>
Fra: www.morgenmusikken.dk<br>
Du har sendt en forespørgsel vedrørende
$Dag d. $Dat $Mdr $Aar, kl. $klokken<br>
Spille for: $Spille_for<br>
Boadressen: $Boadressen<br>
Postnummer: $Postnummer<br>
Kontakt: $Kontakt<br>
E-mail: $email<br>
Telefon: $Telefon<br>
Besked: $Besked<br>
Vi sender nogle prøver på sange!<br>
venlig hilsen<br>
Morgenmusikken
";

/* Her sendes til modtageradressen */
mail($mail, $emne, $oplysninger, $headers);

/* Her sendes en kopimail til afsenderen */
mail($email, $emne, $kopimail, $formularheaders);

/* Når mailen er sendt, viderestilles til denne hjemmeside */
header("Location: $viderestil");
?>
Gravatar #2 - Ronson ⅍
10. feb. 2012 10:43
Gravatar #3 - kasperd
10. feb. 2012 12:40
Ronson (2) skrev:
Liek tihs?
Overordnet er deres metode fornuftig nok. Dog er der en enkelt svaghed. Deres valg af separator afhænger kun af tidspunkt.

For at sikre korrekt parsing skal man være sikker på at ingen af de separatorer man anvender kan findes inde i en af filterne.

Man kan lige så godt gøre det rigtigt fra starten af. For når man først har skrevet kode som kan vedhæfte et billede til en email, så tænker man nok ikke så meget over det, hvis man på et senere tidspunkt har brug for at sende en email med et vedhæftet billede, som er uploadet af en anden bruger.

Og hvis ikke man har tænkt sig om fra starten af, så står man lige pludselig med et sikkerhedshul, hvor en bruger kan forudsige separatoren og uploade en billedfil som indeholder denne separator, og dermed er i stand til at vedhæfte vilkårlige filtyper til emailen.

Der er fire metoder som hver især burde være sikre til generering af separatoren.

Første metode er at bruge tilfældige data til sin separator. Det kræver at man har en måde at generere kryptografisk stærke tilfældige data. Om man kan det i php ved jeg ikke, men jeg vil gætte på at der er en måde. Og det er nok den nemmeste løsning.

Anden metode er at konstruere hele mailen med en placeholder værdi for separatoren (en hash værdi af modtager adresse og tidspunkt er fint til denne placeholder). Når man så har gjort dette tager man en kryptografisk hash af hele denne email. Så starter man forfra igen og bruger sidstnævnte hashværdi til separatorerne. Denne metode er langsommere og lidt mere kompliceret, men kræver ikke adgang til gode tilfældige tal, den kræver kun en god hash funktion.

Tredje metode er at gennemsøge de inkluderede filer for den genererede separator og blive ved med at hashe indtil den ikke findes i filen.

Fjerde metode er at bruge en encoding som sikrer at formatet af separatoren umuligt kan forekomme i de indkodede data. F.eks. ved at separatoren indeholder et tegn som ikke forekommer i encodingen.
Gravatar #4 - pstidsen
10. feb. 2012 13:38
Syens ikke rigtigt jeg kan bruge det? Det skal kunne implementeres i min eget kodeeksembel ;)
Gravatar #5 - pstidsen
11. feb. 2012 12:10
Hvor dum kan man være?! Jeg er da en stor klovn!

Så har jeg brugt dagevis på at få det til at virke og så virker det ikke fordi jeg har glemt et lighedstegn efter src. Jeg havde bare skrevet
<img src'http://minhjemmeside.dk/Pstidsen/billede.gif' />
Gravatar #6 - kasperd
11. feb. 2012 12:18
pstidsen (5) skrev:
Hvor dum kan man være?! Jeg er da en stor klovn!

Så har jeg brugt dagevis på at få det til at virke og så virker det ikke fordi jeg har glemt et lighedstegn efter src. Jeg havde bare skrevet
<img src'http://minhjemmeside.dk/Pstidsen/billede.gif' />
Muligheden for at bruge den slags i en email blev fjernet engang i 90erne, da man fandt ud af at det ikke var særligt smart. Det kunne udnyttes i spam mails til at undersøge om en email var sluppet forbi filteret, hvilket gjorde det nemmere at justere spam mails så de kunne slippe forbi filtrering.

Jeg gætter på at mange spam filtre i dag vil bruge et img tag som dit eksempel som et signal om at det sandsynligvis er en spam mail.
Gravatar #7 - Daniel-Dane
11. feb. 2012 14:13
#6
Det er korrekt, at eksterne billeder blokeres, men MANGE hjemmesider gør det stadig.
Gravatar #8 - reefermadness  
13. feb. 2012 07:59
#6 - Tror ikke man skal bekymre sig om <img> tags og spam filtre (eksterne billeder er stadig hyppigt brugt i mails). Men vær opmærksom på at de fleste email klienter ikke viser eksterne billeder før du har accepteret det.
Gravatar #9 - reefermadness  
15. feb. 2012 13:22
Kan desuden anbefale dig ikke at bruge mail(), brug istedet f.eks PECL mail eller PHPMailer klassen
Gå til top

Opret dig som bruger i dag

Det er gratis, og du binder dig ikke til noget.

Når du er oprettet som bruger, får du adgang til en lang række af sidens andre muligheder, såsom at udforme siden efter eget ønske og deltage i diskussionerne.

Opret Bruger Login