Avatar billede charlot Nybegynder
20. juni 2006 - 22:06 Der er 10 kommentarer og
2 løsninger

Probs med PHP mail script!

Pige i nød...igen igen!Har fundet et PHP-script på nettet og skal tilføjes, at jeg er PHP-pap-dum, så jeg har brug for udførlig hjælp!

Mit problem kort: Mit script virker....sender og jeg modtager i min outlook, desværre er der et par ting, som jeg gerne vil have rettet: Man skriver sit navn i formularen, men det optræder ikke i emailen. Jeg modtager ingen attachments, den skriver det blot i mailen, men der er ingen "papirclips" som indikerer vedhæftning.Der skal kunne vedhæftes.doc/.rtf/.pdf og jpeg. Sidst men ikke mindst skal der byttes om på modtager og afsender.Og hvad med max kb??

Vedhæfter kildekode og håber på snarlig assistance:

<?php
// Your e-mail adress:
$mailto = "mail@gate-1.eu";

# Maximum size of attachment in bytes:
$max_attach_size = 500000;

?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<title>Formmailer</title>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
<style type="text/css">
<!--
body                { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; color: #000000; background: #ffff3; margin: 20px; padding: 0px; border: 0px; }
.caution            { color: red; font-weight: bold; }
-->
</style>
</head>
<body><?php
/*if (empty($_POST['form_submitted']))
{
  ?><p>Please fill out the form:</p><?php
}
*/
if (isset($_POST["form_submitted"]))
{
  $name = trim(preg_replace("/\r/", "", $_POST['name']));
  $name = preg_replace("/\n/", "", $name);
  $name = stripslashes($name);
  $email = trim(preg_replace("/\r/", "", $_POST['email']));
  $email = preg_replace("/\n/", "", $email);
  $subject = trim(stripslashes($_POST['subject']));
  $text = trim(stripslashes($_POST['text']));

  unset($errors);
  if($email == "") $errors[] = "no e-mail address entered";
  elseif($email != "" and !preg_match("/^[^@]+@.+\.\D{2,5}$/", $email)) $errors[] = "e-mail address seems to be invalid";
  if($text == "") $errors[] = "no message entered";
  if($_FILES['probe']['size'] > $max_attach_size) $errors[] = "attachment too large (".number_format($_FILES['probe']['size']/1000,0,",","")." KB) - maximum size: ".number_format($max_attach_size/1000,0,",","")." KB";

  if (empty($errors))
  {
    #if ($name != "") $mail_name=$name; else $mail_name="Unknown";
    if ($subject != "") $mail_subject = $subject; else $mail_subject = "No subject";
    #if ($email != "") $mail_email = $email; else $mail_email = "email@unknown.xyz";
    $ip = $_SERVER["REMOTE_ADDR"];

    // if attachment, MIME-Mail:
    if (isset($_FILES['probe']['name']) && trim($_FILES['probe']['name']) != "")
    {
      // read and encode file:
      $datei_content = fread(fopen($_FILES['probe']['tmp_name'],"r"),filesize($_FILES['probe']['tmp_name']));
      $datei_content = chunk_split(base64_encode($datei_content),76,"\n");
      // Boundary:
      $boundary = md5(uniqid(rand()));
      // Mail-Header:
      $mail_header = "From: ".$name." <".$email.">\n";
      $mail_header .= "X-Sender-IP: ".$ip."\n";
      $mail_header .= "MIME-Version: 1.0\n";
      $mail_header .= "Content-Type: multipart/mixed; boundary=\"".$boundary."\"\n";
      $mail_header .= "This is a multi-part message in MIME format.\n";
      // Mail-Text:
      $mail_header .= "--".$boundary;
      $mail_header .= "\nContent-Type: text/plain";
      $mail_header .= "\nContent-Transfer-Encoding: 8bit";
      $mail_header .= "\n\n".$text;
      // Attachment:
      $mail_header .= "\n--".$boundary;
      $mail_header .= "\nContent-Type: ".$_FILES['probe']['type']."; name=\"".$_FILES['probe']['name']."\"";
      $mail_header .= "\nContent-Transfer-Encoding: base64";
      $mail_header .= "\nContent-Disposition: attachment; filename=\"".$_FILES['probe']['name']."\"";
      $mail_header .= "\n\n".$datei_content;
      // End:
      $mail_header .= "\n--".$boundary."--";
      // Sende E-Mail und gebe Fehler bzw. Bestaetigung aus
      if (@mail($mailto,$mail_subject,"",$mail_header)) $sent = true; else $errors[] = "no connection to the mailserver - please try again later";
    }
    // no attachment, normal E-mail:
    else
    {
      $mail_header = "From: ".$name." <".$email.">\n";
      $mail_header .= "X-Sender-IP: $ip\n";
      $mail_header .= "Content-Type: text/plain";
      if (@mail($mailto,$mail_subject,$text,$mail_header)) $sent = true; else $errors[] = "no connection to the mailserver - please try again later";
    }

    // copy to sender:
    if (isset($sent))
    {
      $copy_subject = strip_tags($mail_subject);
      $copy_subject = str_replace('http://','',$copy_subject);
      $copy_subject = str_replace('www.','www. ',$copy_subject);
      $copy_text = strip_tags($text);
      $copy_text = str_replace('http://','',$copy_text);
      $copy_text = str_replace('www.','www. ',$copy_text);
      if (isset($_FILES['probe']['name']) && trim($_FILES['probe']['name']) != "") $copy_text = "Subject: ".$copy_subject."\n\n".$copy_text."\n\nAttachment: ".$_FILES['probe']['name']; else $copy_mail_text = "Subject: ".$mail_subject."\n\n".$copy_text;
      $header= "From: ".$mailto."\n";
      $header .= "X-Sender-IP: ".$ip."\n";
      $header .= "Content-Type: text/plain";
      @mail($email, "Copy of sent e-mail", $copy_text, $header);
    }
  }
}

if (empty($sent))
{
  if(isset($errors))
  {
    ?><p class="caution">Error:</p><ul><?php foreach($errors as $f) { ?><li><?php echo $f; ?></li><?php } ?></ul><br /><?php
  }

  ?><form method="post" action="<?php echo basename($_SERVER["PHP_SELF"]); ?>" enctype="multipart/form-data"><div>
  <p><b>Name:</b><br /><input type="text" name="name" value="<?php if (isset($name)) echo htmlentities(stripslashes($name)); else echo ""; ?>" size="35" /></p>
  <p><b>E-mail:</b><br /><input type="text" name="email" value="<?php if (isset($email)) echo htmlentities(stripslashes($email)); else echo ""; ?>" size="35" /></p>
  <p><b>Subject:</b><br /><input type="text" name="subject" value="<?php if (isset($subject)) echo htmlentities(stripslashes($subject)); else echo ""; ?>" size="35" /></p>
  <p><b>Message:</b><br /><textarea name="text" cols="55" rows="12"><?php if (isset($text)) echo htmlentities(stripslashes($text)); else echo ""; ?></textarea></p>
  <p>&nbsp;
</p>
  <b>Attachment:</b><br />
  <input type="file" name="probe" value="<?php if (isset($_POST['probe'])) echo htmlentities(stripslashes($_POST['probe'])); else echo ""; ?>" size="20"/></p>
  <br /><br />
  <p><input type="submit" name="form_submitted" value="OK - Submit" /></p>
  </form><?php
}
else
{
  if (empty($email)) { ?>
  <p><b>Thank you!</b><br />The message has been sent successfully but you didn't specify your e-mail address so I can't reply.</p><?php }
  else { ?><p><b>Thank you!</b><br />The message has been sent successfully.</p><?php }
}


?><p style="margin-top: 25px; font-size: 11px;"></a></p>
</body>
</html>
Avatar billede morpheus Nybegynder
21. juni 2006 - 07:59 #1
Hej,

Har du husket at rette linie 3: $mailto = "mail@gate-1.eu"; ?
Scriptet ser ellers ud til at virke fint her også.

Jeg modtager på den mail der angivet i $mailto den vedhæftede fil. På den mail adresse jeg indtaster i formularen modtager jeg en kopi af mailen, dog uden attachment.
Avatar billede charwester Nybegynder
21. juni 2006 - 08:20 #2
Hej

Det skal være sådan, at modtageren skal være mail@gate1.eu og afsenderen skal være personen som skriver i formularen....eller???sådan synes jeg jo det burde være, da det er gate-1 som skal have oplysningerne fra formen! Og så vil jeg jo gerne kunne åbne vedhæftningerne...om det er .rtf, eller.doc, eller pdf. eller jpeg. og hvorfor står står der ikke et navn i mailen, når man nu udfylder et txtfelt med selvsamme i formularen????
Avatar billede morpheus Nybegynder
21. juni 2006 - 08:41 #3
Hvis du kigger på afsenderen af mailen, så står navnet der. Sammen med afsenderens mailadresse.

Det er kun modtageren (mail@gate-1.eu) der kan åbne den vedhæftede fil. Afsenderen får en kopi af det sendte - minus den vedhæftede fil.
Avatar billede charwester Nybegynder
21. juni 2006 - 09:09 #4
Ok, så er det fordi jeg ikke modtager mailen til gate-1 adressen...og altså kun kopien som jeg afsender fra min egen email. Jeg har jo cliche som webhotel og de skriver i deres "ringe" support:

Hvilken SMTP server skal jeg benytte i mine ASP/PHP scripts?
Der kan du benytte: "smtp.cliche.dk"

Dette er en mailserver som kun er åben for vore servere.

Er det noget jeg skal brug i denne sammenhæng? - ja udskyld men er altså lidt fatsvag....gate-1 emailen ser nemlig kun ud til at kunne afsende, men altså ikke modtage.

Og kan jeg sende de omtalte filtyper, når de ikke er specificeret ud i scriptet...og uanset hvor meget de fylder?
Avatar billede charwester Nybegynder
21. juni 2006 - 09:19 #5
har nu sat en anden emailadresse ind i scriptet og kan se, at det virker både med afsendelse og kopi + vedhæftning...men kan man sende de føromtalte filtyper uanset størrelse?
Avatar billede morpheus Nybegynder
21. juni 2006 - 10:49 #6
I scriptet er der angivet et max på 500.000 kb (0.5 MB).

Du kan finde ud af hvad du max kan uploade ved at lave en fil med følgende indhold:
<?php
phpinfo();
?>

Her kigger du efter post_max_size og upload_max_filesize

På den anden side... 0.5 MB skulle vel også være rigeligt at sende i en mail :)
Avatar billede charwester Nybegynder
21. juni 2006 - 11:43 #7
Superman Morpheus...så har jeg så lige en sidste ting: hvis jeg nu vil tilføre flere tekstfelter, til eksempelvis: Company name, hvordan gør jeg så det lettest? kunne man kopiere:

<p><b>name:</b><br /><input type="text" name="name" value="<?php if (isset($name)) echo htmlentities(stripslashes($name)); else echo ""; ?>" size="35" /></p>

Og så ændre name? hvor i kilden skal jeg så ændre? og hvis jeg ønsker et felt med telefonnummer? er der så forskel, når der indsættes tal evt. med et + for def. af landekode?

Så tror jeg nemlig, at jeg er ved at være der....ved godt jeg er kropumulig, men jeg håber jo at lære noget også...så undskyld hvis jeg spørger dumt...ihvertfald tak for din hjælp :)

Kh. Charlotte
Avatar billede morpheus Nybegynder
21. juni 2006 - 12:46 #8
Du har fat i det rigtige med HTML'en...

Men for at lette arbejdet lidt tog jeg mig den frihed at lave lidt...

<?php
// Your e-mail adress:
$mailto = "mail@gate-1.eu";
# Maximum size of attachment in bytes:
$max_attach_size = 500000;

?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<title>Formmailer</title>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
<style type="text/css">
<!--
body                { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; color: #000000; background: #ffff3; margin: 20px; padding: 0px; border: 0px; }
.caution            { color: red; font-weight: bold; }
-->
</style>
</head>
<body><?php
/*if (empty($_POST['form_submitted']))
{
  ?><p>Please fill out the form:</p><?php
}
*/
if (isset($_POST["form_submitted"]))
{
  $name = trim(preg_replace("/\r/", "", $_POST['name']));
  $name = preg_replace("/\n/", "", $name);
  $name = stripslashes($name);
  $companyname = trim(stripslashes($_POST['companyname']));
  $phone = trim(stripslashes($_POST['phone']));
  $email = trim(preg_replace("/\r/", "", $_POST['email']));
  $email = preg_replace("/\n/", "", $email);
  $subject = trim(stripslashes($_POST['subject']));
  $text = trim(stripslashes($_POST['text']));

  unset($errors);
  if($email == "") $errors[] = "no e-mail address entered";
  elseif($email != "" and !preg_match("/^[^@]+@.+\.\D{2,5}$/", $email)) $errors[] = "e-mail address seems to be invalid";
  if($text == "") $errors[] = "no message entered";
  if($_FILES['probe']['size'] > $max_attach_size) $errors[] = "attachment too large (".number_format($_FILES['probe']['size']/1000,0,",","")." KB) - maximum size: ".number_format($max_attach_size/1000,0,",","")." KB";

  if (empty($errors))
  {
    #if ($name != "") $mail_name=$name; else $mail_name="Unknown";
    if ($subject != "") $mail_subject = $subject; else $mail_subject = "No subject";
    #if ($email != "") $mail_email = $email; else $mail_email = "email@unknown.xyz";
    $ip = $_SERVER["REMOTE_ADDR"];

    // if attachment, MIME-Mail:
    if (isset($_FILES['probe']['name']) && trim($_FILES['probe']['name']) != "")
    {
      // read and encode file:
      $datei_content = fread(fopen($_FILES['probe']['tmp_name'],"r"),filesize($_FILES['probe']['tmp_name']));
      $datei_content = chunk_split(base64_encode($datei_content),76,"\n");
      // Boundary:
      $boundary = md5(uniqid(rand()));
      // Mail-Header:
      $mail_header = "From: ".$name." <".$email.">\n";
      $mail_header .= "X-Sender-IP: ".$ip."\n";
      $mail_header .= "MIME-Version: 1.0\n";
      $mail_header .= "Content-Type: multipart/mixed; boundary=\"".$boundary."\"\n";
      $mail_header .= "This is a multi-part message in MIME format.\n";
      // Mail-Text:
      $mail_header .= "--".$boundary;
      $mail_header .= "\nContent-Type: text/plain";
      $mail_header .= "\nContent-Transfer-Encoding: 8bit";
      $mail_header .= "\n\n".$text."\n\nCompany name: ".$companyname."\nPhone number: ".$phone;
      // Attachment:
      $mail_header .= "\n--".$boundary;
      $mail_header .= "\nContent-Type: ".$_FILES['probe']['type']."; name=\"".$_FILES['probe']['name']."\"";
      $mail_header .= "\nContent-Transfer-Encoding: base64";
      $mail_header .= "\nContent-Disposition: attachment; filename=\"".$_FILES['probe']['name']."\"";
      $mail_header .= "\n\n".$datei_content;
      // End:
      $mail_header .= "\n--".$boundary."--";
      // Sende E-Mail und gebe Fehler bzw. Bestaetigung aus
      if (@mail($mailto,$mail_subject,"",$mail_header)) $sent = true; else $errors[] = "no connection to the mailserver - please try again later";
    }
    // no attachment, normal E-mail:
    else
    {
      $mail_header = "From: ".$name." <".$email.">\n";
      $mail_header .= "X-Sender-IP: $ip\n";
      $mail_header .= "Content-Type: text/plain";
      if (@mail($mailto,$mail_subject,$text,$mail_header)) $sent = true; else $errors[] = "no connection to the mailserver - please try again later";
    }

    // copy to sender:
    if (isset($sent))
    {
      $copy_subject = strip_tags($mail_subject);
      $copy_subject = str_replace('http://','',$copy_subject);
      $copy_subject = str_replace('www.','www. ',$copy_subject);
      $copy_text = strip_tags($text);
      $copy_text = str_replace('http://','',$copy_text);
      $copy_text = str_replace('www.','www. ',$copy_text);
      if (isset($_FILES['probe']['name']) && trim($_FILES['probe']['name']) != "") $copy_text = "Subject: ".$copy_subject."\n\n".$copy_text."\n\nAttachment: ".$_FILES['probe']['name']; else $copy_mail_text = "Subject: ".$mail_subject."\n\n".$copy_text;
      $header= "From: ".$mailto."\n";
      $header .= "X-Sender-IP: ".$ip."\n";
      $header .= "Content-Type: text/plain";
      @mail($email, "Copy of sent e-mail", $copy_text, $header);
    }
  }
}

if (empty($sent))
{
  if(isset($errors))
  {
    ?><p class="caution">Error:</p><ul><?php foreach($errors as $f) { ?><li><?php echo $f; ?></li><?php } ?></ul><br /><?php
  }

  ?><form method="post" action="<?php echo basename($_SERVER["PHP_SELF"]); ?>" enctype="multipart/form-data"><div>
  <p><b>Name:</b><br /><input type="text" name="name" value="<?php if (isset($name)) echo htmlentities(stripslashes($name)); else echo ""; ?>" size="35" /></p>
  <p><b>Company name:</b><br /><input type="text" name="companyname" value="<?php if (isset($companyname)) echo htmlentities(stripslashes($companyname)); else echo ""; ?>" size="35" /></p>
  <p><b>Phone number:</b><br /><input type="text" name="phone" value="<?php if (isset($phone)) echo htmlentities(stripslashes($phone)); else echo ""; ?>" size="35" /></p> 
  <p><b>E-mail:</b><br /><input type="text" name="email" value="<?php if (isset($email)) echo htmlentities(stripslashes($email)); else echo ""; ?>" size="35" /></p>
  <p><b>Subject:</b><br /><input type="text" name="subject" value="<?php if (isset($subject)) echo htmlentities(stripslashes($subject)); else echo ""; ?>" size="35" /></p>
  <p><b>Message:</b><br /><textarea name="text" cols="55" rows="12"><?php if (isset($text)) echo htmlentities(stripslashes($text)); else echo ""; ?></textarea></p>
  <p>&nbsp;
</p>
  <b>Attachment:</b><br />
  <input type="file" name="probe" value="<?php if (isset($_POST['probe'])) echo htmlentities(stripslashes($_POST['probe'])); else echo ""; ?>" size="20"/></p>
  <br /><br />
  <p><input type="submit" name="form_submitted" value="OK - Submit" /></p>
  </form><?php
}
else
{
  if (empty($email)) { ?>
  <p><b>Thank you!</b><br />The message has been sent successfully but you didn't specify your e-mail address so I can't reply.</p><?php }
  else { ?><p><b>Thank you!</b><br />The message has been sent successfully.</p><?php }
}


?><p style="margin-top: 25px; font-size: 11px;"></a></p>
</body>
</html>

MSN: dn@bsd-box.dk
Avatar billede morpheus Nybegynder
21. juni 2006 - 12:47 #9
Det eneste der mangler er, at der bliver chekket for om felterne er udfyldte.
Avatar billede charwester Nybegynder
21. juni 2006 - 13:13 #10
Du er da for fantastisk...aiii det er jeg virkelig glad for...tusinde tak! Prøv så lige at kigge her:

http://www.gate-1.eu/html/mail.php

Kan jeg få det bakset lidt sammen, så selve tabellen ikke bliver større end index-siden evt. ved at rykke messageboksen over i højre side? Jeg ved godt, at jeg presser citronen, men nu jeg lige har dig :-)

Var det din email: dn@bsd-box.dk hvis jeg nu får akut brug for hjælp igen...he he :-0
Avatar billede morpheus Nybegynder
21. juni 2006 - 13:18 #11
Hvis du benytter messenger kan jeg kontaktes der...

Vedr. opbygningen af siden, så vil jeg foreslå at du rykker hele formularen over i venstre side, og bruger højre side til at beskrive felterne med.
Avatar billede charwester Nybegynder
21. juni 2006 - 13:31 #12
Du må heller få dine velfortjente point...
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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