27. januar 2011 - 15:32Der er
30 kommentarer og 1 løsning
Sende mail med attachment via mail formular
Hej,
Jeg prøver at lave en mail formular som sender sender en mail til mig med en attachment som jeg har uploadet via formularen, men indtil videre sender den kun teksten, jeg kan ikke få den til at sende attachment.
Jeg tror muligvis at det er fordi jeg ikke har defineret at den skal hente filen fra feltet som hedder "upfile" kan det passe?
og hvordan ville jeg kunne gøre det?
Her er min kode:
[code]
<?php function spamcheck($field) { //filter_var() sanitizes the e-mail //address using FILTER_SANITIZE_EMAIL $field=filter_var($field, FILTER_SANITIZE_EMAIL);
//filter_var() validates the e-mail //address using FILTER_VALIDATE_EMAIL if(filter_var($field, FILTER_VALIDATE_EMAIL)) { return TRUE; } else { return FALSE; } }
if (isset($_REQUEST['email'])) {//if "email" is filled out, proceed
//check if the email address is invalid $mailcheck = spamcheck($_REQUEST['email']); if ($mailcheck==FALSE) { echo "Invalid input"; } else {//send email $email = $_REQUEST['email'] ; $subject = $_REQUEST['subject'] ; $message = $_REQUEST['message'] ;
//Get the uploaded file information $name_of_uploaded_file = basename($_FILES['uploaded_file']['name']); //get the file extension of the file $type_of_uploaded_file = substr($name_of_uploaded_file, strrpos($name_of_uploaded_file, '.') + 1);
$size_of_uploaded_file = $_FILES["uploaded_file"]["size"]/1024;//size in KBs
if(!$allowed_ext) { $errors .= "\n The uploaded file is not supported file type. ". " Only the following file types are supported: ".implode(',',$allowed_extensions); }
//copy the temp. uploaded file to uploads folder $path_of_uploaded_file = $images . $name_of_uploaded_file; $tmp_path = $_FILES["uploaded_file"]["tmp_name"];
if(is_uploaded_file($tmp_path)) { if(!copy($tmp_path,$path_of_uploaded_file)) { $errors .= '\n error while copying the uploaded file'; } }
mail("min@e-mail.com", "Subject: $subject", $message, "From: $email" ); echo "Thank you for using our mail form"; } } else {//if "email" is not filled out, display the form echo "<form method='post' action='formmail.php' ENCTYPE='multipart/form-data'> Email: <input name='email' type='text' /><br /> Subject: <input name='subject' type='text' /><br /> Message:<br /> <textarea name='message' rows='15' cols='40'> </textarea><br /> File to upload:<br> <INPUT TYPE='FILE' NAME='upfile'><br> <input type='submit' /> </form>"; } ?>
Nu har jeg overført filen til en mappe på serveren, men kan stadig ikke helt finde ud af at tilføje den til den mail som bliver sendt som en attachment.
Er der nogen der kan hjælpe?
Tak. Jeg håber i kan hjælpe.
Her er min kode nu:
<?php
function spamcheck($field) { //filter_var() sanitizes the e-mail //address using FILTER_SANITIZE_EMAIL $field=filter_var($field, FILTER_SANITIZE_EMAIL);
//filter_var() validates the e-mail //address using FILTER_VALIDATE_EMAIL if(filter_var($field, FILTER_VALIDATE_EMAIL)) { return TRUE; } else { return FALSE; } }
if (isset($_REQUEST['email'])) {//if "email" is filled out, proceed
//check if the email address is invalid $mailcheck = spamcheck($_REQUEST['email']); if ($mailcheck==FALSE) { echo "Invalid input"; } else {//send email $email = $_REQUEST['email'] ; $subject = $_REQUEST['subject'] ; $message = $_REQUEST['message'] ;
Nu har jeg prøvet at sætte denne lille stump kode ind:
$path = "/sendmail/formmail_with_attachment/uploads";////need to pass the field name of the file field $att_file_name = split("/",$path); $att_file_name = $att_file_name[1]; $mail->AddAttachment($path, $att_file_name, $encoding = "base64", $type = "application/octet-stream");
men får bare denne fejl:
Fatal error: Call to a member function AddAttachment() on a non-object in /home/www/wearecrunch.dk/sendmail/formmail_with_attachment/formmail.php on line 52
Er der nogen der vil være søde og hjælpe mig. Tak ;)
Men jeg forsår det stadig ikke helt. Jeg kan ikke rigtigt finde en god tutorial på hvordan man bruger phpmailer.
Kan man ikke bare skrive koden så den sender attachment med? altså den sender jo alt texten i felterne, er det så ikke bare at tilføje noget om at den skal også tage filen med?
Sådan noget som:
Hvis der er en fil i upfile feltet så skal den tage den includere den i mailen som attachment.
Men hvordan ville man kunne skrive det i koden, ved du det?
at komandoen for at vedhæfte er: AddAttachment($path);
men jeg har prøvet at sætte den ind forskellige steder i koden, og skrevet den på forskellige måde, men uden held. Er det fordi at den spiller kun samme med phpmailer eller hvorfor virker komandoen ikke?
min kode ser sådan ud det sted:
if (isset($_REQUEST['email'])) {//if "email" is filled out, proceed
//check if the email address is invalid $mailcheck = spamcheck($_REQUEST['email']); if ($mailcheck==FALSE) { echo "Invalid input"; } else {//send email $email = $_REQUEST['email'] ; $subject = $_REQUEST['subject'] ; $message = $_REQUEST['message'] ;
////attachment file $path = "/sendmail/formmail_with_attachment/uploads";////need to pass the field name of the file field AddAttachment($path);
og jeg får denne fejl:
Fatal error: Call to undefined function AddAttachment() in /home/www/wearecrunch.dk/sendmail/formmail_with_attachment/formmail.php on line 52
jeg kan se at det ser ud til at de har problemer med deres links, linket til php5 og 6 linker til version 0.9, som er til php4, så måske du har fået hente den?
og så prøv at følg deres tutorial fra starten, for du er nødt til at bruge det som der står derinde, du kan ikke bare smide AddAttachment ind i din eksisterende kode...
hmm, virker stadig ikke, men har læst at der nok ikke er så meget at gøre ved det, det kan være at det bare er mailprogrammets indstillinger med junk e-mail indstillinger.
Og det sker oftest kun med hotamail.
Men jeg har nu et andet problem, jeg sender mailen med nogle info som bliver indtastet i en form, det er fint nok. Men den bliver altid sendt fra "Root user" og emailen er "root@localhost"
Men den kører ikke på min local host.
Håber du kan hjælpe med det, tak :)
Sådan her ser koden ud:
<?php require("class.phpmailer.php"); $mail = new PHPMailer();
Ja ok, det kan jeg godt se, men hvordan er det man ville skulle skrive det hvis man bruger @_request og jo tager infoen fra en form, jeg har prøvet mig lidt frem men det er helt forkert. det her er hvad jeg prøvede:
Men nu tilbage til mit oprindelige spørgsmål. attachment. Jeg har prøvet lidt forskellige ting, med det jeg havde læst: men det her er hvad jeg fandt frem til:
$mail->AddAttachment = $_REQUEST['upfile'];
mailen bliver sendt, men stadig ikke med attachment. :(
Ved du hvad der er galt? jeg havde prøvet nogle andre ting også, men så sagde den at den ikke kunne få fat i filen, men det siger den ikke nu, den bliver bare ikke sendt med.
du er nødt til at gemme filen til din server, inden du sender mailen. når du uploader en fil, og ikke gør mere ved den bliver den slettet når sessionen slutter.
find et simpelt upload-script og så er du ved at være kørende :)
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.