Avatar billede cow2 Nybegynder
16. november 2006 - 15:16 Der er 14 kommentarer

Mail indhold også som vedhæftet HTML fil

Hvis jeg har noget $indhold som er i HTML som jeg mailer til folk, så kan dem som ikke har slået HTML email til ikke se dem, kan jeg vedhæfte filen så folk kan se den som en vedhæftet HTML fil ?
Avatar billede kinderaeg Nybegynder
16. november 2006 - 15:33 #1
Du skulle gerne kunne dele din mail op, så begge dele forekommer i samme mail. Hvis du på nedenstående link søger på $mime_boundary skulle der gerne stå lidt om det.

http://dk.php.net/mail
Avatar billede cow2 Nybegynder
16. november 2006 - 19:29 #2
Synes nu manualen er meget uoverskuelig... er der nogle som har noget kode eksempel ?
Avatar billede kinderaeg Nybegynder
16. november 2006 - 20:34 #3
Der er jo netop eksempler i brugernes kommentarer. Nu har jeg ikke en klient der kun æder plain text, men ellers skulle det her vel virke?!?

<?php
if (strtoupper(substr(PHP_OS,0,3)=='WIN')) {
  $eol="\r\n";
} elseif (strtoupper(substr(PHP_OS,0,3)=='MAC')) {
  $eol="\r";
} else {
  $eol="\n";
} ?>

<?php
# To Email Address
$emailaddress="to@mail.dk";
# Message Subject
$emailsubject="Heres An Email in plain and html ".date("Y/m/d H:i:s");
# Message Body
$body = '<html><head><title>testmail</title></head><body><b>Dette er en prøvemail</b></body></html>';

# Common Headers
$headers .= 'From: from <from@mail.dk>'.$eol;
$headers .= 'Reply-To: from <from@mail.dk>'.$eol;
$headers .= 'Return-Path: from <from@mail.dk>'.$eol;    // these two to set reply address
$headers .= "Message-ID: <".$now." from@".$_SERVER['SERVER_NAME'].">".$eol;
$headers .= "X-Mailer: PHP v".phpversion().$eol;          // These two to help avoid spam-filters
# Boundry for marking the split & Multitype Headers
$mime_boundary=md5(time());
$headers .= 'MIME-Version: 1.0'.$eol;
$headers .= "Content-Type: multipart/related; boundary=\"".$mime_boundary."\"".$eol;
$msg = "";

# Setup for text OR html
$msg .= "Content-Type: multipart/alternative".$eol;

# Text Version
$msg .= "--".$mime_boundary.$eol;
$msg .= "Content-Type: text/plain; charset=iso-8859-1".$eol;
$msg .= "Content-Transfer-Encoding: 8bit".$eol;
$msg .= "This is a multi-part message in MIME format.".$eol;
$msg .= "If you are reading this, please update your email-reading-software.".$eol;
$msg .= "+ + Text Only Email from Genius Jon + +".$eol.$eol;

# HTML Version
$msg .= "--".$mime_boundary.$eol;
$msg .= "Content-Type: text/html; charset=iso-8859-1".$eol;
$msg .= "Content-Transfer-Encoding: 8bit".$eol;
$msg .= $body.$eol.$eol;

# Finished
$msg .= "--".$mime_boundary."--".$eol.$eol;  // finish with two eol's for better security. see Injection.

# SEND THE EMAIL
ini_set(sendmail_from,'from@mail.dk');  // the INI lines are to force the From Address to be used !
  mail($emailaddress, $emailsubject, $msg, $headers);
ini_restore(sendmail_from);
?>
Avatar billede cow2 Nybegynder
16. november 2006 - 22:02 #4
Jep...men hele "send mail" funktionen har jeg!

det eneste jeg skal bruge er funktionen som vedhæfter en fil og sender den med.
Avatar billede coderdk Praktikant
16. november 2006 - 23:48 #5
Hvorfor ikke bruge phpmailer? http://phpmailer.sf.net/ den er fin, og den kan det :)
Avatar billede kinderaeg Nybegynder
17. november 2006 - 09:30 #6
Aha, det du leder efter er altså en mail der kunne se sådan ud:

$boundary = uniqid("");
$body  = "\n--$boundary\n";
$body .= "Content-type: text/plain; charset=iso-8859-1\n";
$body .= "Content-transfer-encoding: 8bit\n\n";
$body .= "Standard plaintext mail";
$body .= "--$boundary\n";
$mimeType =  "application/unknown";
$fil_var = '<html><head><title>test</title></head><body><b>test af mail</b></body></html>';
$fil_var = base64_encode($fil_var);
$fil_var = chunk_split($fil_var);

$body .= "Content-type: $mimeType; name=mail.htm\n";
$body .= "Content-disposition: attachment; filename=mail.htm\n";
$body .= "Content-transfer-encoding: base64\n\n";
$body .= $fil_var."\n\n";
$body .= "--$boundary\n";

$headers  = "From: <from@mail.dk>\n";
$headers .= "Content-type: multipart/mixed; boundary=\"$boundary\"";

$to = 'to <to@mail.dk>';
$subject = 'Test';

if (mail($to, $subject, $body, $headers)) {
  echo "<p>Dine oplysninger er nu sendt.</p>" ;
} else {
  echo "<p>Der er sket en fejl! Prøv igen!</p>" ;
}
Avatar billede cow2 Nybegynder
17. november 2006 - 10:09 #7
kinderaeg, det virker ikke helt som jeg vil have den til: når man sender en email, bliver indholdet dette:

Standard plaintext mail--455d7b618f6a4
Content-type: application/unknown; name=mail.htm
Content-disposition: attachment; filename=mail.htm
Content-transfer-encoding: base64

PGh0bWw+PGhlYWQ+PHRpdGxlPnRlc3Q8L3RpdGxlPjwvaGVhZD48Ym9keT48Yj50ZXN0IGFmIG1h
aWw8L2I+PC9ib2R5PjwvaHRtbD4=

og der er ikke nogen vedhæftet fil som man kan åbne i fx. outlook ?
Avatar billede kinderaeg Nybegynder
17. november 2006 - 10:41 #8
Ja, det er hvad du får hvis du læser body'en, men hvis du sender det som en mail, fortolker mail-klienten det rigtigt nok. Det virker i hvert fald fint i min Outlook-klient
Avatar billede cow2 Nybegynder
17. november 2006 - 10:55 #9
Jeg har prøvet at sende den til min outlook express, og webmail og en GMAIL konto, og i alle sammen er det den tekst jeg ser....!
Avatar billede kinderaeg Nybegynder
17. november 2006 - 11:30 #10
Ah, gik lidt for hurtigt med at rette det sidste til, da jeg satte det ind, her. Der manger et \n i denne linie:

$body .= "Standard plaintext mail";

Skulle naturligvis være:

$body .= "Standard plaintext mail\n";
Avatar billede cow2 Nybegynder
17. november 2006 - 12:05 #11
nu virker det i outlook og GMAIL

men i den tredje webmail er det stadig bare kode og der er inge vedhæftet fil, mailen skulle jo gerne kunne ses af alle uanset hvilken mail program de bruger:

--455d967d14641
Content-type: text/plain; charset=iso-8859-1
Content-transfer-encoding: 8bit

Standard plaintext mail
--455d967d14641
Content-type: application/unknown; name=mail.htm
Content-disposition: attachment; filename=mail.htm
Content-transfer-encoding: base64

PGh0bWw+PGhlYWQ+PHRpdGxlPnRlc3Q8L3RpdGxlPjwvaGVhZD48Ym9keT48Yj50ZXN0IGFmIG1h
aWw8L2I+PC9ib2R5PjwvaHRtbD4=


--455d967d14641

--455d967d14641--
Avatar billede kinderaeg Nybegynder
17. november 2006 - 13:26 #12
Jeg kan ikke fortælle dig, hvorfor det ikke virker i din webmail, kan også se at det ikke virker i min squirrelMail, men hvis du kigger i headeren, kan du se, at boundary'en er rigtig og at mailen er delt op i tre dele. Virker underligt :(
Avatar billede cow2 Nybegynder
17. november 2006 - 14:39 #13
Altså den her bruger jeg normalt:

$from = "email";
$text = "TEKST HVIS DET IKKE ER HTML EMAIL KLEINT";
$html = "HTML KODE";
$emne = "EMNE";
$to = "email";
             
$header = "From: JULEMANDEN <".$from.">\n";
$header .= "MIME-Version: 1.0\n";
$header .= "Content-Type: Multipart/Alternative; boundary=\"part boundary\"";

$body  = "--part boundary\n";
$body .= "Content-Type: text/plain; charset=ISO-8859-1\n";
$body .= "\n".$text."\n";
$body .= "\n--part boundary\n";
$body .= "Content-Type: text/html; charset=ISO-8859-1\n";
$body .= "\n".$html."\n";
$body .= "\n--part boundary--\n";
         
mail($to,$emne,$body,$header);

Den virker fint i alle mine webmails men der er jo ikke nogen vedhæftet fil med ;)
Avatar billede kinderaeg Nybegynder
18. november 2006 - 16:13 #14
Jamen det ser da ud til du har knækket nødden selv. Jeg får det i hvert fald til at virke i squirrelMail med nedenstående kode:

$from = "email";
$text = "TEKST HVIS DET IKKE ER HTML EMAIL KLEINT";
$html = "HTML KODE";
$emne = "EMNE";
$to = "email";

$header = "From: JULEMANDEN <".$from.">\n";
$header .= "MIME-Version: 1.0\n";
$header .= "Content-Type: Multipart/Alternative; boundary=\"part boundary\"";

$body  = "\n--part boundary\n";
$body .= "Content-type: $mimeType; name=mail.htm\n";
$body .= "Content-disposition: attachment; filename=mail.htm\n";
$body .= "\n".$html."\n";
$body .= "--part boundary\n";
$body .= "Content-Type: text/plain; charset=ISO-8859-1\n";
$body .= "\n".$text."\n";
$body .= "\n--part boundary--\n";

$to = 'To <to@mail.dk>';
$subject = 'Test';

if (mail($to, $subject, $body, $header)) {
  echo "<p>Dine oplysninger er nu sendt.</p>";
} else {
  echo "<p>Der er sket en fejl! Prøv igen!</p>";
}
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

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