Avatar billede aagren Nybegynder
18. januar 2003 - 11:37 Der er 6 kommentarer og
1 løsning

e-mail med vedhæftet fil

Den virker nogenlunde, men teksten der bliver skrevet i $mail_body kommer ikke med.
Er der en der kan finde fejlen eller fortælle mig hvorfor?

Koden ser sådan ud:

<?php

function mailer_header()
{
?>
<html>
<head>
      <title>E-mailer</title>
</head>
<body>
<?php
}

function mailer_footer()
{
?>
</body>
</html>
<?php
}

function error_message($msg)
{
mailer_header();
echo "<SCRIPT>alert(\"Error: $msg\");history.go(-1)</SCRIPT>";
mailer_footer();
exit;
}

function user_message($msg)
{
mailer_header();
echo "<SCRIPT>alert(\"$msg\");history.go(-1)</SCRIPT>";
mailer_footer();
exit;
}

function mail_form()
{
global $PHP_SELF;
?>
<FORM METHOD="POST" ENCTYPE="MULTIPART/FORM-DATA" ACTION=<?php echo $PHP_SELF ?> >
<INPUT TYPE="hidden" NAME="action" VALUE="send_mail">
<DIV ALIGN="CENTER"><TABLE CELLSPACING="2" CELLPADDING="5" WIDTH="90%" BORDER="1">
      <TR>
          <TH ALIGN="CENTER" WIDTH="30%">Til</TH>
          <TD WIDTH="70%">
              <INPUT NAME="mail_to" SIZE="20"></TD>
      </TR>
      <TR>
          <TH ALIGN="CENTER" WIDTH="30%">Fra</TH>
          <TD WIDTH="70%">
              <INPUT NAME="mail_from" SIZE="20"></TD>
      </TR>
      <TR>
          <TH ALIGN="CENTER" WIDTH="30%">Vedhæft</TH>
          <TD WIDTH="70%">
              <INPUT TYPE="file" NAME="userfile"></TD>
      </TR>
      <TR>
          <TH ALIGN="CENTER" WIDTH="30%">Type</TH>
          <TD WIDTH="70%">
              <INPUT TYPE="RADIO" VALUE="text" NAME="mail_type" CHECKED>TEXT
              <INPUT TYPE="RADIO" VALUE="html" NAME="mail_type">HTML</TD>
      </TR>
      <TR>
          <TH ALIGN="CENTER" WIDTH="30%">Emne</TH>
          <TD WIDTH="70%">
              <INPUT NAME="mail_subject" SIZE="40"></TD>
      </TR>
      <TR>
          <TH ALIGN="CENTER" WIDTH="30%">Tekst</TH>
          <TD WIDTH="70%">
              <TEXTAREA NAME="mail_body" ROWS="16"
                        COLS="70"></TEXTAREA></TD>
      </TR>
      <TR>
          <TH WIDTH="100%" COLSPAN="2" ALIGN="CENTER">
              <INPUT TYPE="SUBMIT" VALUE="Send" NAME="SUBMIT">
              <INPUT TYPE="RESET" VALUE="Reset" NAME="RESET">
          </TH>
      </TR>
</TABLE>
</DIV>
</FORM>
<?php
}

function send_mail()
{
global $mail_to, $mail_from;
global $mail_body, $mail_subject;

global $userfile, $userfile_type, $userfile_name, $userfile_size;
global $mail_type;

$mail_parts["mail_to"] = $mail_to;
$mail_parts["mail_from"] = $mail_from;
$mail_parts["mail_subject"] = trim($mail_subject);
$mail_parts["mail_body"] = $mail_body;
$mail_parts["mail_type"] = $mail_type;
$mail_parts["userfile"] = $userfile;
$mail_parts["userfile_type"] = $userfile_type;
$mail_parts["userfile_name"] = $userfile_name;
$mail_parts["userfile_size"] = $userfile_size;

if(my_mail($mail_parts))
    user_message("Din e-mail er blevet sendt. Emne: '$mail_subject'.");
else error_message("Der er sket en fejl, da du forsøgte at sende, emne: '$mail_subject'.");
}

function my_mail($mail_parts)
{
$mail_to = $mail_parts["mail_to"];
$mail_from = $mail_parts["mail_from"];
$mail_subject = $mail_parts["mail_subject"];
$mail_body = $mail_parts["mail_body"];
$mail_type = $mail_parts["mail_type"];

$userfile = $mail_parts["userfile"];
$userfile_type = $mail_parts["userfile_type"];
$userfile_name = $mail_parts["userfile_name"];
$userfile_size = $mail_parts["userfile_size"];

if(empty($mail_to)) error_message("Empty to field!");
if(empty($mail_subject)) error_message("Empty subject!");
if(empty($mail_body)) error_message("Empty body!");

$mail_to = str_replace(";", ",", $mail_to);

$mail_header = '';

if(!empty($mail_from)) $mail_header .= "From: $mail_from\n";

$mail_subject = stripslashes($mail_subject);
$mail_body = stripslashes($mail_body);

if($userfile_size > 0)
{
  $mail_boundary = md5 (uniqid(time()));
  $mail_headers .= "MIME-Version: 1.0\r\n";
  $mail_headers .= "Content-type: multipart/mixed;
                                  boundary=\"$mail_boundary\"\r\n\r\n";
  $mail_headers .= "This is a multi-part message in MIME format.\r\n\r\n";
 
  $fp = fopen($userfile, "r");
  $file = fread($fp, filesize($userfile));
  $file = chunk_split(base64_encode($file));
 
  $new_mail_body = "--$mail_boundary\r\n";
  $new_mail_body .= "Content-type:text/plain;charset=$mail_charset\r\n";
  $new_mail_body .= "$mail_body\r\n";
  $new_mail_body .= "--$mail_boundary\r\n";
  if(!empty($userfile_type)) $mime_type = $userfile_type;
  else $mime_type = "application/octet-stream";
 
  $new_mail_body .= "Content-type:$mime_type;name=$userfile_name\r\n";
  $new_mail_body .= $file . "\r\n\r\n";
  $new_mail_body .= "--$mail_boundary--";
  $mail_body = $new_mail_body;
}
else if($mail_type == 'html')
{
  $mail_header .= "Content-type: text/html; charset=$mail_charset\r\n";
}
else
{
  $mail_header .= "Content-type: text/plain; charset=$mail_charset\r\n";
}

return mail($mail_to,$mail_subject,$mail_body,$mail_headers);
}

switch ($action)
{
case "send_mail":
      mailer_header();
      send_mail();
      mailer_footer();
      break;
case "mail_form":
      mailer_header();
      mail_form();
      mailer_footer();
      break;
default:
      mailer_header();
      mail_form();
      mailer_footer();
      break;
}
?>
Avatar billede _darkstar_ Nybegynder
18. januar 2003 - 13:17 #1
Er det *kun* $mail_body der ikke kommer med?

Kan du ikke barbere din kode ned, så fejlen stadigvæk er med, men der er mindre kode?
Avatar billede tipsen Nybegynder
18. januar 2003 - 13:36 #2
Synes det er mærkelig kode i dine funktioner, hvor du hopper ind og ud af html - fungerer det virkelig efter hensigten!!??
Avatar billede aagren Nybegynder
18. januar 2003 - 13:50 #3
"beskeden eller teksten" jeg skriver i mit textarea som hedder $mail_body bliver ikke sendt med, hvis jeg har vedhæftet en fil. Hvis jeg ikke vedhæfter noget, kommer det godt nok med.

Og ja, det fungerer fint....borset fra mit problem.
Avatar billede aagren Nybegynder
18. januar 2003 - 14:32 #4
Hey hey....jeg har selv løst problemmet.
Ellers mange tak.
Avatar billede aagren Nybegynder
18. januar 2003 - 14:50 #5
Venter lidt med point uddelingen.....hvis der er nogle der vil have dem...så skriv et svar. Den bedste kommentar synes jeg selv kommer fra darkstar!
Og løsningen:

<?php

function mailer_header()
{
?>
<html>
<head>
      <title>E-mailer</title>
</head>
<body>
<?php
}

function mailer_footer()
{
?>
</body>
</html>
<?php
}

function error_message($msg)
{
mailer_header();
echo "<SCRIPT>alert(\"Error: $msg\");history.go(-1)</SCRIPT>";
mailer_footer();
exit;
}

function user_message($msg)
{
mailer_header();
echo "<SCRIPT>alert(\"$msg\");history.go(-1)</SCRIPT>";
mailer_footer();
exit;
}

function mail_form()
{
global $PHP_SELF;
?>
<FORM METHOD="POST" ENCTYPE="MULTIPART/FORM-DATA" ACTION=<?php echo $PHP_SELF ?> >
<INPUT TYPE="hidden" NAME="action" VALUE="send_mail">
<DIV ALIGN="CENTER"><TABLE CELLSPACING="2" CELLPADDING="5" WIDTH="90%" BORDER="1">
      <TR>
          <TH ALIGN="CENTER" WIDTH="30%">Til</TH>
          <TD WIDTH="70%">
              <INPUT NAME="mail_to" SIZE="20"></TD>
      </TR>
      <TR>
          <TH ALIGN="CENTER" WIDTH="30%">Fra</TH>
          <TD WIDTH="70%">
              <INPUT NAME="mail_from" SIZE="20"></TD>
      </TR>
      <TR>
          <TH ALIGN="CENTER" WIDTH="30%">Vedhæft</TH>
          <TD WIDTH="70%">
              <INPUT TYPE="file" NAME="userfile"></TD>
      </TR>
      <TR>
          <TH ALIGN="CENTER" WIDTH="30%">Type</TH>
          <TD WIDTH="70%">
              <INPUT TYPE="RADIO" VALUE="text" NAME="mail_type" CHECKED>TEXT
              <INPUT TYPE="RADIO" VALUE="html" NAME="mail_type">HTML</TD>
      </TR>
      <TR>
          <TH ALIGN="CENTER" WIDTH="30%">Emne</TH>
          <TD WIDTH="70%">
              <INPUT NAME="mail_subject" SIZE="40"></TD>
      </TR>
      <TR>
          <TH ALIGN="CENTER" WIDTH="30%">Tekst</TH>
          <TD WIDTH="70%">
              <TEXTAREA NAME="mail_body" ROWS="16"
                        COLS="70"></TEXTAREA></TD>
      </TR>
      <TR>
          <TH WIDTH="100%" COLSPAN="2" ALIGN="CENTER">
              <INPUT TYPE="SUBMIT" VALUE="Send" NAME="SUBMIT">
              <INPUT TYPE="RESET" VALUE="Reset" NAME="RESET">
          </TH>
      </TR>
</TABLE>
</DIV>
</FORM>
<?php
}

function send_mail()
{
global $mail_to, $mail_from;
global $mail_body, $mail_subject;

global $userfile, $userfile_type, $userfile_name, $userfile_size;
global $mail_type, $mail_charset, $mail_encoding;

$mail_parts["mail_to"] = $mail_to;
$mail_parts["mail_from"] = $mail_from;
$mail_parts["mail_subject"] = trim($mail_subject);
$mail_parts["mail_body"] = $mail_body;

$mail_parts["mail_type"] = $mail_type;
$mail_parts["mail_charset"] = $mail_charset;
$mail_parts["mail_encoding"] = $mail_encoding;

$mail_parts["userfile"] = $userfile;
$mail_parts["userfile_type"] = $userfile_type;
$mail_parts["userfile_name"] = $userfile_name;
$mail_parts["userfile_size"] = $userfile_size;

if(my_mail($mail_parts))
    user_message("Successfully sent an e-mail titled '$mail_subject'.");
else error_message("An unknown error occurred while attempting to send an e-mail titled '$mail_subject'.");
}

function my_mail($mail_parts)
{
$mail_to = $mail_parts["mail_to"];
$mail_from = $mail_parts["mail_from"];
$mail_subject = $mail_parts["mail_subject"];
$mail_body = $mail_parts["mail_body"];
$mail_type = $mail_parts["mail_type"];
$mail_charset = $mail_parts["mail_charset"];
$mail_encoding = $mail_parts["mail_encoding"];

$userfile = $mail_parts["userfile"];
$userfile_type = $mail_parts["userfile_type"];
$userfile_name = $mail_parts["userfile_name"];
$userfile_size = $mail_parts["userfile_size"];

if(empty($mail_to)) error_message("Empty to field!");
if(empty($mail_subject)) error_message("Empty subject!");
if(empty($mail_body)) error_message("Empty body!");

$mail_to = str_replace(";", ",", $mail_to);

$mail_header = '';

if(!empty($mail_from)) $mail_header .= "From: $mail_from\n";

$mail_subject = stripslashes($mail_subject);
$mail_body = stripslashes($mail_body);

if($userfile_size > 0)
{
  $mail_boundary = md5 (uniqid(time()));
  $mail_headers .= "MIME-Version: 1.0\r\n";
  $mail_headers .= "Content-type: multipart/mixed;
                                  boundary=\"$mail_boundary\"\r\n\r\n";
  $mail_headers .= "This is a multi-part message in MIME format.\r\n\r\n";

  $fp = fopen($userfile, "r");
  $file = fread($fp, filesize($userfile));
  $file = chunk_split(base64_encode($file));

  $new_mail_body = "--$mail_boundary\r\n";
  $new_mail_body .= "Content-type:text/plain;charset=$mail_charset\r\n";
  $new_mail_body .= "Content-transfer-encoding:$mail_encoding\r\n\r\n";
  $new_mail_body .= "$mail_body\r\n";
  $new_mail_body .= "--$mail_boundary\r\n";
  if(!empty($userfile_type)) $mime_type = $userfile_type;
  else $mime_type = "application/octet-stream";

  $new_mail_body .= "Content-type:$mime_type;name=$userfile_name\r\n";
  $new_mail_body .= "Content-transfer-encoding:base64\r\n\r\n";
  $new_mail_body .= $file . "\r\n\r\n";
  $new_mail_body .= "--$mail_boundary--";
  $mail_body = $new_mail_body;
}
else if($mail_type == 'html')
{
  $mail_header .= "Content-type: text/html; charset=$mail_charset\r\n";
  $mail_header .= "Content-transfer_encoding:$mail_encoding\r\n\r\n";
}
else
{
  $mail_header .= "Content-type: text/plain; charset=$mail_charset\r\n";
  $mail_header .= "Content-transfer_encoding:$mail_encoding\r\n\r\n";
}

return mail($mail_to,$mail_subject,$mail_body,$mail_headers);
}

switch ($action)
{
case "send_mail":
      mailer_header();
      send_mail();
      mailer_footer();
      break;
case "mail_form":
      mailer_header();
      mail_form();
      mailer_footer();
      break;
default:
      mailer_header();
      mail_form();
      mailer_footer();
      break;
}
?>
Avatar billede _darkstar_ Nybegynder
18. januar 2003 - 14:54 #6
Ih tak. Jeg nåede egentlig ikke at give dig et svar.
Avatar billede _darkstar_ Nybegynder
18. januar 2003 - 14:54 #7
Men så er der et "svar" her.
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