Form to Email with attachment file

Μια περιοχή όπου τα μέλη μας μπορούν να βάζουν τα PHP scripts που έχουν φτιάξει και θέλουν να τα μοιραστούν με τα υπόλοιπα μέλη.

Συντονιστές: WebDev Moderators, Super-Moderators, PHP Moderators

Απάντηση
Άβαταρ μέλους
vassilism
Δημοσιεύσεις: 1950
Εγγραφή: 17 Μαρ 2007 14:47
Επικοινωνία:

Form to Email with attachment file

Δημοσίευση από vassilism » 07 Νοέμ 2007 19:24

Αγαπητοί Designers & Developers του freestuff καλησπέρα σας.
Μετά από πολλές ώρες καψίματος, ψαξίματος, μελέτης και με την βοήθεια του Alice_Cooper, κατάφερα να φτιάξω μια mailform η οποία στέλνει και attachment στο mail του παραλήπτη.
Παρακάτω παραθέτω τους κώδικες και ελπίζω να βοηθήσουν και άλλους ταλαίπωρους όπως εγώ.

styles.css

Κώδικας: Επιλογή όλων

.mailformbutton {
background-color: white; 
border-left: 1px #000066 solid; 
border-right: 1px #000066 solid; 
border-bottom: 1px #000066 solid; 
border-top: 1px #000066 solid;
font-family: Verdana; 
font-size: 8pt;
color: #000066; 
}

.mailformfield { 
background-color: white; 
border: 1px solid #000066; 
font-family: Verdana; 
font-size: 8pt 
}

.mailformtext{
font-family:Verdana,Geneva,Arial,Helvetica,sans-serif;
font-size:10px;
BORDER: none;
color: #000066;
font-weight:bold;
}
A.link {
text-decoration: none;
font-family:Verdana,Geneva,Arial,Helvetica,sans-serif;
font-size:10px;
BORDER: none;
color: #999999;
font-weight:bold;
}
A.link:hover {
text-decoration: none;
font-family:Verdana,Geneva,Arial,Helvetica,sans-serif;
font-size:10px;
BORDER: none;
color: black;
font-weight:bold;
}
mail.php

Κώδικας: Επιλογή όλων

<html>
<title>Επικοινωνία</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-7">
<Head>
<link rel=stylesheet href="styles.css">
</Head>
<body>

            <form method="post" enctype="multipart/form-data" action="send_email.php">
              <table align="center" cellpadding="2" cellspacing="0">
                <tr>
                  <td width="104"><font class="mailformtext">Όνομα&#58;</font></td>
                  <td width="280"><input name="name" type="text" class="mailformfield" id="name" value="" size="32" maxlength="20"></td>
                </tr>
                <tr>
                  <td><font class="mailformtext">Τηλέφωνο&#58;</font></td>
                  <td><input name="tel" type="text" class="mailformfield" id="tel" value="" size="32" maxlength="15"></td>
                </tr>
                <tr>
                  <td><font class="mailformtext">Διεύθυνση email&#58;</font></td>
                  <td><input class=mailformfield type="text" name="email" id="email" size="32" /></td>
                </tr>
                <tr>
                  <td valign="top"><font class="mailformtext">Μήνυμα&#58;</font></td>
                  <td><textarea class=mailformfield name="message" cols="34" rows="5" id="message"></textarea></td>
                </tr>
                <tr>
                  <td><font class="mailformtext">Επισύναψη&#58;</font></td>
                  <td><input class=mailformfield type="file" name="file1"></td>
                </tr>
                <tr>
                  <td height="43"></td>
                  <td>
                    <div align="left">
                      <input class=mailformbutton name="Send message" type="submit" id="Send message "value="Αποστολή μηνύματος"/>
                      <input class=mailformbutton type="reset" name="Reset" id="button" value="Καθαρισμός">
                    </div>                    <label>
                    <div align="left"></div>
                  </label></td>
                </tr>
                <tr>
                  <td colspan="2"><div align="right"> 
          <p>&nbsp;



            <b><font class="mailformtext">			  
            <?php

$status = $_GET&#91;'status'&#93;;

if&#40;$status=="1"&#41; &#123;

   echo 'Το μήνυμα στάλθηκε επιτυχώς!';
   
   &#125; elseif &#40;$status=="0"&#41; &#123;
   
   echo 'Το μήνυμα δεν στάλθηκε! Ελέγξτε τα στοιχεία σας.';
   
   &#125; else &#123;
   
   echo"";
   
   &#125;

?>
            </font></b></p>
              </div>                  </td>
                </tr>
              </table>
</form>
     </div>
  </div>
  </body>
 
  </html>
send_email.php

Κώδικας: Επιλογή όλων

<?php 
$admin_email =   "my@mail.gr"; // <== edo vazete to email sas//

$email_subject = "New message"; 
$check_email =   check_email_address&#40;$_REQUEST&#91;'email'&#93;&#41;;  
$mime_boundary=  "==Multipart_Boundary_x".md5&#40;mt_rand&#40;&#41;&#41;."x"; 
$headers =       "From&#58; $check_email\r\n" .
                 "MIME-Version&#58; 1.0\r\n" . 
                 "Content-Type&#58; multipart/mixed;\r\n" . 
                 " boundary=\"&#123;$mime_boundary&#125;\""; 

$message = "Onoma&#58;" .$_POST&#91;'name'&#93;    ."\n".
           "Til&#58;"   .$_POST&#91;'tel'&#93;     ."\n".
           "Minima&#58;".$_POST&#91;'message'&#93;; 

$message = "This is a multi-part message in MIME format.\n\n" . 
           "--&#123;$mime_boundary&#125;\n" . 
           "Content-Type&#58; text/plain; charset=\"iso-8859-7\"\n" . 
           "Content-Transfer-Encoding&#58; 7bit\n\n" . $message . "\n\n"; 
		   
function check_email_address&#40;$email&#41; &#123; 
  if &#40;!ereg&#40;"^&#91;^@&#93;&#123;1,64&#125;@&#91;^@&#93;&#123;1,255&#125;$", $email&#41;&#41; &#123; 
    header&#40;"Location&#58; mail.php?status=0"&#41;; 
  &#125; 
  $email_array = explode&#40;"@", $email&#41;; 
  $local_array = explode&#40;".", $email_array&#91;0&#93;&#41;; 
  for &#40;$i = 0; $i < sizeof&#40;$local_array&#41;; $i++&#41; &#123; 
     if &#40;!ereg&#40;"^&#40;&#40;&#91;A-Za-z0-9!#$%&'*+/=?^_`&#123;|&#125;~-&#93;&#91;A-Za-z0-9!#$%&'*+/=?^_`&#123;|&#125;~\.-&#93;&#123;0,63&#125;&#41;|&#40;\"&#91;^&#40;\\|\"&#41;&#93;&#123;0,62&#125;\"&#41;&#41;$", $local_array&#91;$i&#93;&#41;&#41; &#123; 
       header&#40;"Location&#58; mail.php?status=0"&#41;; 
    &#125; 
  &#125;  
  if &#40;!ereg&#40;"^\&#91;?&#91;0-9\.&#93;+\&#93;?$", $email_array&#91;1&#93;&#41;&#41; &#123; 
    $domain_array = explode&#40;".", $email_array&#91;1&#93;&#41;; 
    if &#40;sizeof&#40;$domain_array&#41; < 2&#41; &#123; 
         die &#40;"Invalid email address"&#41;; 
    &#125; 
    for &#40;$i = 0; $i < sizeof&#40;$domain_array&#41;; $i++&#41; &#123; 
      if &#40;!ereg&#40;"^&#40;&#40;&#91;A-Za-z0-9&#93;&#91;A-Za-z0-9-&#93;&#123;0,61&#125;&#91;A-Za-z0-9&#93;&#41;|&#40;&#91;A-Za-z0-9&#93;+&#41;&#41;$", $domain_array&#91;$i&#93;&#41;&#41; &#123; 
         header&#40;"Location&#58; mail.php?status=0"&#41;; 
      &#125; 
    &#125; 
  &#125; 
  return $email; 
&#125; 


   foreach&#40;$_FILES as $userfile&#41;&#123; 
      $tmp_name = $userfile&#91;'tmp_name'&#93;; 
      $type = $userfile&#91;'type'&#93;; 
      $name = $userfile&#91;'name'&#93;; 
      $size = $userfile&#91;'size'&#93;; 

      if &#40;file_exists&#40;$tmp_name&#41;&#41;&#123; 
         if&#40;is_uploaded_file&#40;$tmp_name&#41;&#41;&#123; 
            $file = fopen&#40;$tmp_name,'rb'&#41;; 
            $data = fread&#40;$file,filesize&#40;$tmp_name&#41;&#41;; 
            fclose&#40;$file&#41;; 
            $data = chunk_split&#40;base64_encode&#40;$data&#41;&#41;; 
         &#125; 

         $message .= "--&#123;$mime_boundary&#125;\n" . 
            "Content-Type&#58; &#123;$type&#125;;\n" . 
            " name=\"&#123;$name&#125;\"\n" . 
            "Content-Disposition&#58; attachment;\n" . 
            " filename=\"&#123;$fileatt_name&#125;\"\n" . 
            "Content-Transfer-Encoding&#58; base64\n\n" . $data . "\n\n"; 
      &#125; 
   &#125; 

$message.="--&#123;$mime_boundary&#125;--\n";  
   
if&#40;@mail&#40;$admin_email,$email_subject,$message,$headers&#41;&#41; &#123; 
header&#40;"Location&#58; mail.php?status=1"&#41;; 
exit; 
&#125; else &#123; 
header&#40;"Location&#58; mail.php?status=0"&#41;; 
&#125; 
?>
:question: Το μόνο που έχετε να κάνετε είναι να γράψετε το email σας στην μεταβλητή $admin_email στο αρχείο send_email.php

:question: Τα αρχεία mail.php και send_email.php πρέπει να τα αποθηκεύσετε ως ANSI γιατί διαφορετικά θα έχετε πρόβλημα με τα Ελληνικά.
Αν θέλετε να ορίσετε τι είδος αρχεία (καθώς και το μέγεθος τους) θέλετε να επιτρέπονται να σας στέλνουν, τότε κάντε τα εξής:
1. Ανοίξτε το αρχείο send_email.php.
2. Κάπου θα δείτε αυτό το κομμάτι κώδικα (συγκεκριμένα στις γραμμές 47-51):

Κώδικας: Επιλογή όλων

foreach&#40;$_FILES as $userfile&#41;&#123; 
      $tmp_name = $userfile&#91;'tmp_name'&#93;; 
      $type = $userfile&#91;'type'&#93;; 
      $name = $userfile&#91;'name'&#93;; 
      $size = $userfile&#91;'size'&#93;;
3. Ακριβώς από κάτω κάντε copy paste αυτό το κομμάτι κώδικα.

Κώδικας: Επιλογή όλων

$size = &#40;$size >= 1024&#41; ? floor&#40;$size / 1024&#41; . "kbytes" &#58; $size . "bytes";  
$allowed_ext = array&#40;"jpg", "jpeg", "gif", "png", "avi"&#41;;        
if &#40;!in_array&#40;substr&#40;$name,strlen&#40;$name&#41;-3,strlen&#40;$name&#41;&#41;, $allowed_ext&#41;&#41;&#123; 
   echo "Incorect file.";
   echo "<p><a href=\"javascript&#58;history.back&#40;-1&#41;;\" class=\"mailformtext\">&#91;Back&#93;</a></p>";  
   exit; 
&#125;
Εκεί που λέει $size = ($size >= 1024) ? floor($size / 1024) . "kbytes" : $size . "bytes";
Ο αριθμός 1024 είναι το μέγεθος του αρχείου σε Kbytes, μπορείτε να τον αλλάξετε αν θέλετε.

Εκεί που λέει $allowed_ext = array("jpg", "jpeg", "gif", "png", "avi");
Ορίζετε τι είδος αρχεία θέλετε να επιτρέπονται.
Συνημμένα
Form_to_Email_with_attachment_file.zip
(2.9 KiB) Μεταφορτώθηκε 1702 φορές
Τελευταία επεξεργασία από το μέλος vassilism την 09 Σεπ 2009 02:23, έχει επεξεργασθεί 6 φορές συνολικά.

Άβαταρ μέλους
p_pan
Δημοσιεύσεις: 1248
Εγγραφή: 11 Φεβ 2007 20:45
Τοποθεσία: Άστεγος!

Form to Email with attachment file

Δημοσίευση από p_pan » 12 Νοέμ 2007 02:30

An kai den m xrisimeuei se kati ekana download to file sou kai to dokimasa.... einai polu kalo...
Mprabo ekanes kali douleia...
Αγράματος...

Άβαταρ μέλους
AAT
Δημοσιεύσεις: 379
Εγγραφή: 23 Αύγ 2007 16:31
Τοποθεσία: Lemesos, Limassol
Επικοινωνία:

Form to Email with attachment file

Δημοσίευση από AAT » 12 Νοέμ 2007 22:41

Apo ta kalitera toy idoys!!!

Feedback: Kalo tha htan na egrafes panw apo to message:

"Se periptosh poy to file den stalei, parakalw perilabete ena link gia na to katevasoyme. Eyxaristw."

Άβαταρ μέλους
changlee
Δημοσιεύσεις: 370
Εγγραφή: 13 Φεβ 2005 00:46
Τοποθεσία: Πειραιάς
Επικοινωνία:

Form to Email with attachment file

Δημοσίευση από changlee » 13 Νοέμ 2007 20:01

Συγχαρητήρια για την προσπάθεια και ευχαριστούμε.

Το ανέβασα σε δύο διαφορετικούς servers και δείχνει ότι πραγματοποιείται η αποστολή. Στο email όμως δεν λαμβάνω τίποτα.

Πρέπει να κάνω και άλλες ρυθμίσεις στο send_email.php ;
Υπάρχουν απαιτήσεις συγκεκριμένες για τον server;

Και πάλι ευχαριστούμε
:D
Τεχνολογική Ανάπτυξη (1μ.Χ. - 1975) = Τεχνολογική Ανάπτυξη (1975 - Σήμερα)

Μπορείτε να με βρείτε στην κατασκευή ιστοσελίδων BLB.gr | Δωρεάν Disavow File

Άβαταρ μέλους
p_pan
Δημοσιεύσεις: 1248
Εγγραφή: 11 Φεβ 2007 20:45
Τοποθεσία: Άστεγος!

Form to Email with attachment file

Δημοσίευση από p_pan » 13 Νοέμ 2007 22:49

AAT έγραψε: "Se periptosh poy to file den stalei, parakalw perilabete ena link gia na to katevasoyme. Eyxaristw."
sumfono me ton AAT...
kalo 8a htan na estelnes kai ena link me to file...
Αγράματος...

Άβαταρ μέλους
vassilism
Δημοσιεύσεις: 1950
Εγγραφή: 17 Μαρ 2007 14:47
Επικοινωνία:

Form to Email with attachment file

Δημοσίευση από vassilism » 14 Νοέμ 2007 14:55

Παιδία σας ευχαριστώ για τα καλά σας λόγια.
Πρέπει να διευκρινίσω ότι το attachment δεν αποθηκεύετε κάπου στον server, αλλά γίνετε προώθηση κατευθείαν στο mail σας. Οπότε δεν υφίσταται η δημιουργία link.
Φίλε changlee το μόνο που έχεις να κάνεις, είναι να ανοίξεις το αρχείο send_email.php και στην δεύτερη σειρά που λέει $admin_email = "my@mail.gr"; να βάλεις το mail σου.
Επίσης ο server οπού ανεβάζεις αυτά τα αρχεία, πρέπει να υποστηρίζει την php.Και ίσως (αν και δεν το έχω δοκιμάσει) η έκδοση της php να είναι 5+.

Άβαταρ μέλους
p_pan
Δημοσιεύσεις: 1248
Εγγραφή: 11 Φεβ 2007 20:45
Τοποθεσία: Άστεγος!

Form to Email with attachment file

Δημοσίευση από p_pan » 15 Νοέμ 2007 03:16

ego pisteuo 8a htan kalitero na to apo8ikeue ston server... den jero mou fenete kalitero apo apoci oti uparxi kapou auto to file den kremete etsi apla.....
Αγράματος...

Άβαταρ μέλους
vassilism
Δημοσιεύσεις: 1950
Εγγραφή: 17 Μαρ 2007 14:47
Επικοινωνία:

Form to Email with attachment file

Δημοσίευση από vassilism » 15 Νοέμ 2007 15:44

Μα εδώ δεν έχουμε να κάνουμε με βάση δεδομένων, αλλά με αποστολή mail (κατευθείαν προώθηση).
Αυτό που λες γίνετε, αλλά προϋποθέτει την ύπαρξη βάσης δεδομένων.
Με λίγα λόγια φτιάχνεις ένα CMS για mail.
Άλλη η χρησιμότητα του ενός και άλλη του άλλου.

Άβαταρ μέλους
p_pan
Δημοσιεύσεις: 1248
Εγγραφή: 11 Φεβ 2007 20:45
Τοποθεσία: Άστεγος!

Form to Email with attachment file

Δημοσίευση από p_pan » 15 Νοέμ 2007 20:08

ok......
katalaba ti enooeis.....
alla to script pou eftiajes den proipo8eti oti 8a einai topo8etimeno se kapoia selida???? ara mia basi xriazete...
dioti...
an to script einai gia apostoli apo tin selida pros tous episkeptes h to anti8eto prepei na exeis ena arxeio.....
tora an einai apla gia na stenleis oti 8es se opoion 8es meso tis selidas kai pali xriazete gia na mporeis na jeris tis ti kinisi exei to script kai ta sinafi.....
den jero oti protimas esu.. diko sou einai to script apla emena 8a m arese h uparji tis baseis.... :-?
Αγράματος...

Άβαταρ μέλους
vassilism
Δημοσιεύσεις: 1950
Εγγραφή: 17 Μαρ 2007 14:47
Επικοινωνία:

Form to Email with attachment file

Δημοσίευση από vassilism » 15 Νοέμ 2007 20:18

Βασικά αυτό το script είναι για να στέλνει απλά mail (σε ένα συγκεκριμένο mail).
Δεν εμπλέκετε ούτε χρειάζεται πουθενά βάση δεδομένων.
Είναι πολύ απλά, μια φόρμα επικοινωνίας που βλέπουμε στα περισσότερα site.

Άβαταρ μέλους
p_pan
Δημοσιεύσεις: 1248
Εγγραφή: 11 Φεβ 2007 20:45
Τοποθεσία: Άστεγος!

Form to Email with attachment file

Δημοσίευση από p_pan » 15 Νοέμ 2007 20:39

ok....................
:D
Αγράματος...

Άβαταρ μέλους
changlee
Δημοσιεύσεις: 370
Εγγραφή: 13 Φεβ 2005 00:46
Τοποθεσία: Πειραιάς
Επικοινωνία:

Form to Email with attachment file

Δημοσίευση από changlee » 28 Νοέμ 2007 18:10

vassilism έγραψε:...Φίλε changlee το μόνο που έχεις να κάνεις, είναι να ανοίξεις το αρχείο send_email.php και στην δεύτερη σειρά που λέει $admin_email = "my@mail.gr"; να βάλεις το mail σου...
Εννοείται ότι το έκανα. Απλά το script λειτουργεί μια χαρά. Το πρόβλημα ήταν ότι μου το έπαιρνε σαν ανεπιθύμητο.

:idea:
Τεχνολογική Ανάπτυξη (1μ.Χ. - 1975) = Τεχνολογική Ανάπτυξη (1975 - Σήμερα)

Μπορείτε να με βρείτε στην κατασκευή ιστοσελίδων BLB.gr | Δωρεάν Disavow File

Άβαταρ μέλους
vassilism
Δημοσιεύσεις: 1950
Εγγραφή: 17 Μαρ 2007 14:47
Επικοινωνία:

Form to Email with attachment file

Δημοσίευση από vassilism » 29 Νοέμ 2007 20:00

Δηλαδή στέλνει το mail και όταν το λαμβάνεις σου το βάζει στην ανεπιθύμητη αλληλογραφία?
Γιαυτό λογικά ευθύνεται το πρόγραμμα με το οποίο ανοίγεις τα mail σου ή κάποιο antivirus το κομπλάρει (το διαβάζει σαν spam).
Εγώ που δουλεύω το outlook 2007 και παρόλο που είναι πολύ ευαίσθητο σε spam μου τα λαμβάνει κανονικά.

Άβαταρ μέλους
changlee
Δημοσιεύσεις: 370
Εγγραφή: 13 Φεβ 2005 00:46
Τοποθεσία: Πειραιάς
Επικοινωνία:

Form to Email with attachment file

Δημοσίευση από changlee » 29 Νοέμ 2007 20:40

Με το gmail το ανοίγω. Μια χαρά δουλεύει γενικά και ευχαριστούμε.

:pint:
Τεχνολογική Ανάπτυξη (1μ.Χ. - 1975) = Τεχνολογική Ανάπτυξη (1975 - Σήμερα)

Μπορείτε να με βρείτε στην κατασκευή ιστοσελίδων BLB.gr | Δωρεάν Disavow File

Άβαταρ μέλους
zekia
Δημοσιεύσεις: 146
Εγγραφή: 04 Μάιος 2004 16:38
Τοποθεσία: thessaloniki

Form to Email with attachment file

Δημοσίευση από zekia » 01 Αύγ 2008 12:32

Κώδικας: Επιλογή όλων

if&#40;@mail&#40;$admin_email,$email_subject,$message,$headers&#41;&#41; &#123;
header&#40;"Location&#58; mail.php?status=1"&#41;;
exit;
&#125; else &#123;
header&#40;"Location&#58; mail.php?status=0"&#41;;
&#125;
?>
ο κώδικας αυτός ορίζει τι θα γίνεται σε περίπτωση επιτυχούς ή μη επιτυχούς αποστολής; Τι θα πρέπει να κάνω ωστε να παίρνω τέτοια μηνύματα στη σελίδα μου με απλές echo, όπως "Η αποστολή πραγματοποιήθηκε με επιτυχία" ή "Παρακαλώ προσπαθήστε ξανά"?

Επίσης τι πρέπει να γίνει ωστε να είναι υποχρεωτικά συμπληρωμένα όλα τα πεδία?

Απάντηση

Επιστροφή στο “PHP τα δικά μας scripts”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες