Permalänk
Medlem

PHP-formulär för mail

Tjenixen

Tänkte fixa mig en enkel "portfolio" och hittade en sjysst template att utgå ifrån.
Den inkluderade även ett litet php-script till ett kontaktformulär.

Då jag kör ifrån min nas så fungerade det inte först, men insåg jag skulle installera PHP först, och då hoppar allt igång,
står att man skickat mail etc men inget kommer fram

Så undrar givetvis om det krävs vissa förutsättningar för att kunna maila via formuläret?
Kör servern lokalt just nu och inte via WAN, om det är något som kan påverka, eller ska man lägga till något i scriptet nedan tro för att
den ska kunna köra iväg mailet till min XXX@outlook.com adress?

Koden nedan är enda i PHP-filen.

<?php $name = $_POST['name']; $email = $_POST['email']; $message = $_POST['message']; $formcontent="Contact form\n\nFrom: $name \nMessage: $message"; $recipient = "minemailmenintedenna@outlook.com"; $subject = "Contact Form"; $mailheader = "From: $email \r\n"; mail($recipient, $subject, $formcontent, $mailheader) or die("Error!"); echo "Thank You! E-mail sent."; ?>

Ser allt bra ut?

Visa signatur

🎮 - AMD RYZEN THREADRIPPER 2970WX • 64GB DDR4 3200MHz • RTX 2070 SUPER • Seasonic Core GM 650 650W PSU

🖥️ - 2x ACER 27" ConceptD CP5271UV IPS QHD HDR 170 Hz

Permalänk
Medlem
Skrivet av ODDNAME:

Tjenixen

Tänkte fixa mig en enkel "portfolio" och hittade en sjysst template att utgå ifrån.
Den inkluderade även ett litet php-script till ett kontaktformulär.

Då jag kör ifrån min nas så fungerade det inte först, men insåg jag skulle installera PHP först, och då hoppar allt igång,
står att man skickat mail etc men inget kommer fram

Så undrar givetvis om det krävs vissa förutsättningar för att kunna maila via formuläret?
Kör servern lokalt just nu och inte via WAN, om det är något som kan påverka, eller ska man lägga till något i scriptet nedan tro för att
den ska kunna köra iväg mailet till min XXX@outlook.com adress?

Koden nedan är enda i PHP-filen.

<?php

$name = $_POST['name'];
$email = $_POST['email'];
$message = $_POST['message'];
$formcontent="Contact form\n\nFrom: $name \nMessage: $message";
$recipient = "minemailmenintedenna@outlook.com";
$subject = "Contact Form";
$mailheader = "From: $email \r\n";

mail($recipient, $subject, $formcontent, $mailheader) or die("Error!");
echo "Thank You! E-mail sent.";

?>

Ser allt bra ut?

Hur menar du att du kör servern lokalt? Att du går in på ett lokalt ip exempelvis 192.168.1.5? Det ska inte vara några problem.

För att skicka mail så behöver du en SMTP-server. Vissa ISPs tillhandahåller detta åt dig av anledningen att de försöker hindra spam. Med andra ord så tillåter de flesta ISPs INTE att du skickar mail via din egna SMTP-server. Hör med ISPn du har så får du säkert tillgång till en.

Kolla i php.ini och se över vilka inställningar är inskrivna för SMTP samt smtp_port.

Visa signatur

ηλί, ηλί, λαμά σαβαχθανί!?

Permalänk
Medlem

@Leedow:

Tack för svar.

Hittade lite om det du skrev, så petade in Outlooks/Hotmails smtp-server i php.ini

EDIT

Visade sig vara lite begränsningar med just Outlook och det jag vill göra med scriptet, kan man peta in annan kod tro som fungerar rakt av?

https://github.com/PHPMailer/PHPMailer

Detta verkar vara något som kan fixa det jag önskar, dock vet jag inte hur jag ska implementera detta i koden

Visa signatur

🎮 - AMD RYZEN THREADRIPPER 2970WX • 64GB DDR4 3200MHz • RTX 2070 SUPER • Seasonic Core GM 650 650W PSU

🖥️ - 2x ACER 27" ConceptD CP5271UV IPS QHD HDR 170 Hz

Permalänk
Medlem
Skrivet av ODDNAME:

Visade sig vara lite begränsningar med just Outlook och det jag vill göra med scriptet, kan man peta in annan kod tro som fungerar rakt av?

https://github.com/PHPMailer/PHPMailer

Detta verkar vara något som kan fixa det jag önskar, dock vet jag inte hur jag ska implementera detta i koden

Jag använder mig av PHPMailer till mina projekt och det var lite klurigt först, men nu i dagsläget skrattar jag bara åt hur "svårt" det var att lägga in funktionen till projekten

Jag har lagt class-phpmailer.php, class-phpmailer-autoloader.php, class-pop3.php och class-smtp.php i configurations-katalogen, och följande kod ligger i functions.php (även den i configurations-katalogen), som är länkad från en huvudfil, preferences.php.

Sen kör jag bara följande för att skicka e-post: send_mail('Ämne', 'Innehåll i sann <b>HTML</b>-anda', 'till@adress.se');

# FUNKTION function send_email($subject, $content_html, $email) { # INKLUDERA require_once 'class-phpmailer.php'; require_once 'class-phpmailer-autoloader.php'; $content_htmlbody_top = '<html>'; $content_htmlbody_top .= '<style>'; $content_htmlbody_top .= 'body { font-family: "Tahoma", sans-serif; font-size: 11px; }'; $content_htmlbody_top .= 'a { color: #6b7d99; text-decoration: none; }'; $content_htmlbody_top .= '.special { border-left: 2px solid #eaeaea; margin: 20px 0; padding: 10px 15px; }'; $content_htmlbody_top .= '.space { color: #999999; cursor: default; display: inline-block; margin: 0 5px; user-select: none; -moz-user-select: none; -khtml-user-select: none; -webkit-user-select: none; -webkit-user-drag: none; }'; $content_htmlbody_top .= '.new-pw { border-left: 2px solid #9fbfd0; margin: 20px 0; padding: 10px 20px; }'; $content_htmlbody_top .= '</style>'; $content_htmlbody_top .= '<body>'; $content_htmlbody_bottom .= '</body>'; $content_htmlbody_bottom .= '</html>'; $content = $content_htmlbody_top . $content_html . $content_htmlbody_bottom; /** ** ** ** ** ** ** ** ** ** **/ $mail = new PHPMailer; # $mail->SMTPDebug = 3; $mail->isSMTP(); $mail->Host = 'smtp.gmail.com'; $mail->SMTPAuth = true; $mail->Username = '****@gmail.com'; $mail->Password = '****'; $mail->SMTPSecure = 'ssl'; $mail->Port = 465; $mail->From = $admin_email; $mail->FromName = $admin_sitename; $mail->addAddress($email, utf8_decode('Användare')); $mail->addReplyTo($admin_email, utf8_decode($subject)); # $mail->addCC('cc@example.com'); # $mail->addBCC('bcc@example.com'); # $mail->addAttachment('footer.php'); $mail->isHTML(true); $mail->Subject = utf8_decode($subject); $mail->Body = utf8_decode($content); # $mail->AltBody = utf8_decode($content); if(!$mail->send()) { echo 'email-error|'.$mail->ErrorInfo; } else { echo 'email-sended'; } }

Visa signatur

Citera mig om du vill att jag ska hitta till ditt svar.
airikr.me /device:desktop. Andra projekt: Keizai, Koroth & Serenum.

Permalänk
Medlem

Aha.

Om jag förstår det rätt i index.html filen så är detta nedan det som styr och ställer för mailen:
http://pastebin.com/uqFvtG11

Är det bara i princip att byta ut mail.php som är gamla php-filen mot rätt fil tillhörande phpmailer och rätt "syntax" i den biten så att säga så att den förstår vad som är namn, rubrik etc då?

Visa signatur

🎮 - AMD RYZEN THREADRIPPER 2970WX • 64GB DDR4 3200MHz • RTX 2070 SUPER • Seasonic Core GM 650 650W PSU

🖥️ - 2x ACER 27" ConceptD CP5271UV IPS QHD HDR 170 Hz

Permalänk
Medlem
Skrivet av ODDNAME:

Aha.

Om jag förstår det rätt i index.html filen så är detta nedan det som styr och ställer för mailen:
http://pastebin.com/uqFvtG11

Är det bara i princip att byta ut mail.php som är gamla php-filen mot rätt fil tillhörande phpmailer och rätt "syntax" i den biten så att säga så att den förstår vad som är namn, rubrik etc då?

Du har ju det där formuläret, så nu gäller det bara att hämta informationen som har skrivits in i textfälten genom POST.

if(isset($_POST['submit'])) { $name = $_POST['name']; $email = $_POST['email']; $content = $_POST['message']; send_mail('Ämne', $content, $admin_email); }

Sen får du byta ut lite i funktionen ($admin_email och så vidare), så att allt blir så som du själv vill ha det.

Visa signatur

Citera mig om du vill att jag ska hitta till ditt svar.
airikr.me /device:desktop. Andra projekt: Keizai, Koroth & Serenum.

Permalänk
Medlem
Skrivet av Airikr:

Du har ju det där formuläret, så nu gäller det bara att hämta informationen som har skrivits in i textfälten genom POST.

if(isset($_POST['submit'])) { $name = $_POST['name']; $email = $_POST['email']; $content = $_POST['message']; send_mail('Ämne', $content, $admin_email); }

Sen får du byta ut lite i funktionen ($admin_email och så vidare), så att allt blir så som du själv vill ha det.

Förstår men ändå inte
Om du har tid och lust, kan du visa en post, typ namnet så att säga, så förstår jag nog lite bättre

Skickades från m.sweclockers.com

Visa signatur

🎮 - AMD RYZEN THREADRIPPER 2970WX • 64GB DDR4 3200MHz • RTX 2070 SUPER • Seasonic Core GM 650 650W PSU

🖥️ - 2x ACER 27" ConceptD CP5271UV IPS QHD HDR 170 Hz

Permalänk
Medlem
Skrivet av ODDNAME:

Förstår men ändå inte
Om du har tid och lust, kan du visa en post, typ namnet så att säga, så förstår jag nog lite bättre

Skickades från m.sweclockers.com

Hm. Jag har förklarat så tydligt jag bara kan, tycker jag

Den där if-satsen ska du lägga högst upp i index.php (ändra alltså filformatet från .html till .php) och ändra <form ... action="mail.php" ...> till action="index.php". Då kommer formuläret att peka POST till if-satsen och då ska allt fungera. Lägg in en echo 'test'; inom if-satsen för att vara helt säker på att det funkar.

Visa signatur

Citera mig om du vill att jag ska hitta till ditt svar.
airikr.me /device:desktop. Andra projekt: Keizai, Koroth & Serenum.

Permalänk
Medlem
Skrivet av Airikr:

Hm. Jag har förklarat så tydligt jag bara kan, tycker jag

Den där if-satsen ska du lägga högst upp i index.php (ändra alltså filformatet från .html till .php) och ändra <form ... action="mail.php" ...> till action="index.php". Då kommer formuläret att peka POST till if-satsen och då ska allt fungera. Lägg in en echo 'test'; inom if-satsen för att vara helt säker på att det funkar.

Nu förstår jag inte alls dock Index.html > index.php ??? Varför? Krävs väl för att sidan ska fungerar och läsas in överhuvudtaget?
Att man ska ändra till vilken fil den pekar till förstår jag, men inte vilken index.php skulle vara?

Känner mig heeeelt lost just nu, ingen aning om vad som ska bytas ut eller var allt ska vara

Visa signatur

🎮 - AMD RYZEN THREADRIPPER 2970WX • 64GB DDR4 3200MHz • RTX 2070 SUPER • Seasonic Core GM 650 650W PSU

🖥️ - 2x ACER 27" ConceptD CP5271UV IPS QHD HDR 170 Hz

Permalänk
Medlem
Skrivet av Leedow:

Hur menar du att du kör servern lokalt? Att du går in på ett lokalt ip exempelvis 192.168.1.5? Det ska inte vara några problem.

För att skicka mail så behöver du en SMTP-server. Vissa ISPs tillhandahåller detta åt dig av anledningen att de försöker hindra spam. Med andra ord så tillåter de flesta ISPs INTE att du skickar mail via din egna SMTP-server. Hör med ISPn du har så får du säkert tillgång till en.

Kolla i php.ini och se över vilka inställningar är inskrivna för SMTP samt smtp_port.

du behöver väl inte alls ha en smtp server för att skicka mail genom php. gjorde ett script på jobbet där allt är låst för påminnelser vad jag skulle göra varje dag och skrev aldrig in något om en server den skulle gå igenom

Visa signatur

Min dator: Silent Base 600 | 1700X @ 3.9Ghz | MSI Gaming X 1080TI | RM750X | 512Gb M2 | 16Gb 3200mhz Ram | S34E790C @ 3440x1440
Tjejens dator: Define r4 | i5 3570k @ 4.2ghz | GTX Titan | 750w Supernova | 240gb SSD | 32gb ram
Citera/Tagga för svar!

Permalänk
Medlem

Kör du scriptet lokalt på datorn?
Du ska kunna mejla utan SMTP-server via php. Dock blockerar nog din ISP det om du kör lokalt. Du kan skicka via en annan server tex. outlook. Men där måste du logga in samt köra på port 465 eller 587. Sedan kanske man måste logga in och sänka kontosäkerheten på outlook.com-kontot med.

Det kommer fungera om du lägger det på ett webbhotell sedan. Men mejlar du till outlook.com, ska inte avsändaradressen vara en sådan adress eftersom den kommer klassas som spam i Microsofts server.

Permalänk
Medlem
Skrivet av ODDNAME:

Nu förstår jag inte alls dock Index.html > index.php ??? Varför? Krävs väl för att sidan ska fungerar och läsas in överhuvudtaget?
Att man ska ändra till vilken fil den pekar till förstår jag, men inte vilken index.php skulle vara?

Känner mig heeeelt lost just nu, ingen aning om vad som ska bytas ut eller var allt ska vara

Har du möjligtvis läst på om PHP? För att kunna köra PHP-funktioner i en fil, så måste du ange filformatet .php. Annars kommer inte funktionerna att fungera över huvud taget. Sunt förnuft. PHP är inte HTML.

Läs på om hur PHP fungerar och läs sedan mina inlägg igen. Då kommer du att förstå vad jag menar.

Visa signatur

Citera mig om du vill att jag ska hitta till ditt svar.
airikr.me /device:desktop. Andra projekt: Keizai, Koroth & Serenum.

Permalänk
Medlem

@Airikr:

Jodå, jag förstår hur det fungerar, men måste jag skapa en helt ny php-fil som anropar de övriga i phpmailer?
Index.html ska ju "anropa" något, som i sin tur "anropar" index.php t ex som "anropar" de övriga php-filerna då?

Tolkade det som att du ville att jag döpte om index.html-filen till php Det vore ju inte bra tänker jag liksom

Det är väl egentligen det som är den stora hindret just nu, att veta vilken fil i html-filen som ska bytas från mail.php i pastebinen, och vad som ska stå i den, om det inte är någon av de som medföljer phpmailer

Visa signatur

🎮 - AMD RYZEN THREADRIPPER 2970WX • 64GB DDR4 3200MHz • RTX 2070 SUPER • Seasonic Core GM 650 650W PSU

🖥️ - 2x ACER 27" ConceptD CP5271UV IPS QHD HDR 170 Hz

Permalänk
Medlem
Skrivet av ODDNAME:

@edgren:

Jodå, jag förstår hur det fungerar, men måste jag skapa en helt ny php-fil som anropar de övriga i phpmailer?
Index.html ska ju "anropa" något, som i sin tur "anropar" index.php t ex som "anropar" de övriga php-filerna då?

Tolkade det som att du ville att jag döpte om index.html-filen till php Det vore ju inte bra tänker jag liksom

PHPMailer är uppdelade i olika filer som gör sin egna lilla sak. Fixa in dem i samma katalog som du har funktionen som jag gav dig innan i, och så följer du mina råd i mina andra inlägg.

Konfigurera sedan PHPMailer så att du kan skicka med hjälp av Googles servrar och du kan då skicka iväg hur många e-postmeddelanden som du vill, till vem som helst från din webbsida.

Visa signatur

Citera mig om du vill att jag ska hitta till ditt svar.
airikr.me /device:desktop. Andra projekt: Keizai, Koroth & Serenum.

Permalänk
Medlem
Skrivet av Airikr:

PHPMailer är uppdelade i olika filer som gör sin egna lilla sak. Fixa in dem i samma katalog som du har funktionen som jag gav dig innan i, och så följer du mina råd i mina andra inlägg.

Konfigurera sedan PHPMailer så att du kan skicka med hjälp av Googles servrar och du kan då skicka iväg hur många e-postmeddelanden som du vill, till vem som helst från din webbsida.

Så funktionen ska ligga i en egen php-fil då?
Om ja så förstår jag nog :). Dvs typ mailer.php som jag anropar i formuläret?

Skickades från m.sweclockers.com

Visa signatur

🎮 - AMD RYZEN THREADRIPPER 2970WX • 64GB DDR4 3200MHz • RTX 2070 SUPER • Seasonic Core GM 650 650W PSU

🖥️ - 2x ACER 27" ConceptD CP5271UV IPS QHD HDR 170 Hz

Permalänk
Medlem
Skrivet av ODDNAME:

Så funktionen ska ligga i en egen php-fil då?
Om ja så förstår jag nog :). Dvs typ mailer.php som jag anropar i formuläret?

Skickades från m.sweclockers.com

Du kan ha funktionen ovanför all HTML-kod om du så vill, men jag skulle rekommendera att du har den i en egen fil.

Såhär kan filstrukturen se ut:

- root -- index.php -- functions.php -- class-phpmailer.php -- class-phpmailer-autoloader.php -- class-pop3.php -- class-smtp.php

functions.php innehåller send_email() och index.php innehåller HTML-koden (formuläret och det), samt if-satsen som hanterar POST-förfrågan.

Visa signatur

Citera mig om du vill att jag ska hitta till ditt svar.
airikr.me /device:desktop. Andra projekt: Keizai, Koroth & Serenum.

Permalänk
Medlem
Skrivet av Airikr:

Du kan ha funktionen ovanför all HTML-kod om du så vill, men jag skulle rekommendera att du har den i en egen fil.

Såhär kan filstrukturen se ut:

- root -- index.php -- functions.php -- class-phpmailer.php -- class-phpmailer-autoloader.php -- class-pop3.php -- class-smtp.php

functions.php innehåller send_email() och index.php innehåller HTML-koden (formuläret och det), samt if-satsen som hanterar POST-förfrågan.

Ahaaaaa ta bort formuläret helt ifrån index.html och placera i en egen fil Mao tillsammans med if etc?

Skickades från m.sweclockers.com

Visa signatur

🎮 - AMD RYZEN THREADRIPPER 2970WX • 64GB DDR4 3200MHz • RTX 2070 SUPER • Seasonic Core GM 650 650W PSU

🖥️ - 2x ACER 27" ConceptD CP5271UV IPS QHD HDR 170 Hz

Permalänk
Medlem
Skrivet av ODDNAME:

Ahaaaaa ta bort formuläret helt ifrån index.html och placera i en egen fil Mao tillsammans med if etc?

Skickades från m.sweclockers.com

Woot? Jag har inte sagt att du ska ta bort något O.o In på Discord, så ska jag förklara allt!

Visa signatur

Citera mig om du vill att jag ska hitta till ditt svar.
airikr.me /device:desktop. Andra projekt: Keizai, Koroth & Serenum.

Permalänk
Medlem
Skrivet av ODDNAME:

Ahaaaaa ta bort formuläret helt ifrån index.html och placera i en egen fil Mao tillsammans med if etc?

nej formuläret ska vara i din html-fil. Där action på form-taggen ska vara din php-fil. Med method post
Sedan läser php post-datan som är innehållet i dina fält. Vilket fält som är vilket anges av name-attributet

Permalänk
Medlem

Fick lite hjälp av Edgren (med betoning på att lite = enormt mycket)
Men det strulade att smtp inte kunde connecta, så ska se om nissen som gjort scriptet kan belysa problemet lite, eller om någon här kan gissa på varför det inte vill fungera trots ALLT verkar korrekt.

Visa signatur

🎮 - AMD RYZEN THREADRIPPER 2970WX • 64GB DDR4 3200MHz • RTX 2070 SUPER • Seasonic Core GM 650 650W PSU

🖥️ - 2x ACER 27" ConceptD CP5271UV IPS QHD HDR 170 Hz

Permalänk
Medlem
Skrivet av ODDNAME:

Fick lite hjälp av Edgren (med betoning på att lite = enormt mycket)
Men det strulade att smtp inte kunde connecta, så ska se om nissen som gjort scriptet kan belysa problemet lite, eller om någon här kan gissa på varför det inte vill fungera trots ALLT verkar korrekt.

Och nu verkar allt fungera klockrent

Visa signatur

Citera mig om du vill att jag ska hitta till ditt svar.
airikr.me /device:desktop. Andra projekt: Keizai, Koroth & Serenum.

Permalänk
Medlem

@Airikr:

Yes! En hel del Edgren, en liten del oddname och en massa människor som haft samma problem som gjorde susen

Visa signatur

🎮 - AMD RYZEN THREADRIPPER 2970WX • 64GB DDR4 3200MHz • RTX 2070 SUPER • Seasonic Core GM 650 650W PSU

🖥️ - 2x ACER 27" ConceptD CP5271UV IPS QHD HDR 170 Hz