Funkcja mail() nie działa.

Wszystko o językach skryptowych takich jak PHP i Perl, serwerach WWW, CGI, bazach danych i języku SQL.
blackmagic666
Posty: 4
Rejestracja: 14 sty 2017, 14:59:45
Reputacja: 0
Płeć: Niewybrana
User Agent: Firefox Windows 1680x1050

Funkcja mail() nie działa.

Postautor: blackmagic666 » 16 sty 2017, 16:43:18

Witajcie, niedawno zacząłem bawić się w php i zrobiłem formularz do wysyłania emaila. Prawdopodobnie coś popsułem bo maile nie dochodzą.

Poniżej części kodu

Skrypt php na samej górze strony:

CodeColon Select All Code

   <?php

$NameErr = $EmailErr = $SubErr = $MessErr = "";
$Name = $Email = $Subject = $Message = "";
$From = "xxx@xxx.pl";
$To = "xxx@gmail.com";
$headers ="Od: $Name\n $Message\n E-Mail: $Email\n";
$n = NULL;
if ($_SERVER["REQUEST_METHOD"] == "POST") {
   if (empty($_POST["Name"])) {
   $NameErr = "Name is required";}
   else {
   $Name = test_input($_POST["Name"]);}
   if (!preg_match("/^[a-zA-Z ]*$/", $Name)){
   $NameErr = "Only letters and white space allowed!";}
   if (empty($_POST["Email"])) {
   $EmailErr = "Email is required";}
   else{
   $Email = test_input($_POST["Email"]);
   if(!filter_var($Email, FILTER_VALIDATE_EMAIL)){
   $EmailErr = "Invalid email format";}}
   if (empty($_POST["Subject"])) {
   $SubErr = "Subject is required";}
   else {
   $Message = test_input($_POST["Subject"]);}
   if (empty($_POST["Message"])) {
   $MessErr = "Message is required";}
   else {
   $Message = test_input($_POST["Message"]);}
}
   
   $Name = test_input($_POST["Name"]);
   $Email = test_input($_POST["Email"]);
   $Subject = test_input($_POST["Subject"]);
   $Message = test_input($_POST["Message"]);
   
function test_input($data) {
    $data = trim($data);
    $data = stripslashes($data);
    $data = htmlspecialchars($data);
    return $data;
  }
   ?>


Formularz:

CodeColon Select All Code

   <form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>" method="post">
      <p><input class="w3-input w3-padding-16" type="text" placeholder="Name" name="Name"></p>
     <span class="error"><?php echo $NameErr;?></span>
      <p><input class="w3-input w3-padding-16" type="text" placeholder="Email" name="Email"></p>
     <span class="error"><?php echo $EmailErr;?></span>
      <p><input class="w3-input w3-padding-16" type="text" placeholder="Subject" name="Subject"></p>
     <span class="error"><?php echo $SubErr;?></span>
      <p><input class="w3-input w3-padding-16" type="text" placeholder="Message" name="Message"></p>
     <span class="error"><?php echo $MessErr;?></span>
      <p>
        <button class="w3-btn w3-grey w3-padding-large w3-hover-green" type="submit" value="1" name="pressed">
          <i class="fa fa-paper-plane"></i> SEND MESSAGE
        </button>
     </p>
    </form>
              <?php
      
      if(isset($_POST["pressed"])) {

      mail($to, $Subject, $From, $headers);
         
         if (empty($_POST["Name"])){
         echo $n;}
         if (empty($_POST["Email"])){
         echo $n;}
         if (empty($_POST["Subject"])){
         echo $n;}
         if (empty($_POST["Message"])){
         echo $n;}
         else{
      echo "Email sent.";}}
      ?>
   </div>


Co jest nie tak? Czytałem o tym, że musi być nagłówek from, nie wiem czy dobrze to dodałem, w każdym razie we "From" jest ten sam mail co podpięty pod stronę. Maile wyiksowałem w kodzie. Czy from mam dodać w headers?

#edit
Wiem że jest błąd w skrypcie w walidacji przy buttonie, ale on tego raczej nie powinien powodować?
Awatar użytkownika
piotrutv
Posty: 14
Rejestracja: 03 lut 2016, 10:10:38
Reputacja: 0
Płeć: Mężczyzna
User Agent: Firefox Windows 1280x1024

Funkcja mail() nie działa.

Postautor: piotrutv » 16 sty 2017, 23:04:08

U mnie na forum od jakiegoś czasu do nowych użytkowników nie przychodzi link aktywacyjny. Myślę, że może administracja cba nałożyła jakieś limity. :)
Awatar użytkownika
endriu888
Obsługa CBA
Posty: 512
Rejestracja: 23 sty 2012, 21:02:33
Reputacja: 0
Strona na CBA.pl: katalogfirm.c0.pl
Płeć: Niewybrana
User Agent: SeaMonkey Windows 1024x768
Kontakt:

Funkcja mail() nie działa.

Postautor: endriu888 » 17 sty 2017, 09:43:02

Poprawny powinien być taki:

////////// USTAWIENIA //////////
$od = "\nFrom: zmarekz@www.cba.pl";
$email = 'zmarekz@www.cba.pl' ;
$subject = 'temat';
$message = 'Dziękujemy za wysłanie formularza';
$error = 'Wystąpił błąd podczas wysyłania formularza';



Dla kont darmowych, ze względu na nasilone zjawisko spamu, zostały
wprowadzone dodatkowe restrykcje wokół funkcji mail.
Od teraz:
1) mail wysyłany funkcją mail() musi mieć poprawny nagłówek From:
2) mail w nagłówku From: musi być istniejącą skrzynką w panelu CBA
(można ją utworzyć wchodząc w zakładkę Konta Email -> Dodaj)

Po pomyślnej weryfikacji mail jest przepuszczany na zewnątrz.
Zapobiega to spamowaniu i gwarantuje użycie przez skrypty adresów, do
których ich właściciele na pewno mają prawo.
Czy wiesz, że:
  • W Panelu CBA w sekcji "wsparcie" jest dedykowany system ticketów (obsługi technicznej)
  • Odpowiadamy na Forum oraz na adres mailowy obsluga(malpa)cba.pl
  • Jesteśmy również na Facebooku! Znajdź nas na facebook.com/hostingcba | cba.pl
W czym jeszcze możemy pomóc?
blackmagic666
Posty: 4
Rejestracja: 14 sty 2017, 14:59:45
Reputacja: 0
Płeć: Niewybrana
User Agent: Firefox Windows 1680x1050

Funkcja mail() nie działa.

Postautor: blackmagic666 » 17 sty 2017, 10:38:03

Czyli rozumiem że:
- from ma być nagłówkiem w części headers
- $to - podaje maila którego mam na stronie

A cała reszta jak $message $subject itp może być zaimportowane z formularza, dobrze myślę?

CodeColon Select All Code

$To = "blackmagic@testestest.cba.pl";
$headers ="From: blackmagic@testestest.cba.pl Name: $Name\n  E-Mail: $Email\n";


CodeColon Select All Code

   if(isset($_POST["pressed"])) {

      mail($To, $Subject, $Message, $headers);


$name $message $email i $subject jest brany z formularza, $email to mail wysyłającego wiadomość ale tylko taki który jest do podania w formularzu.

Tak jest dobrze?
Awatar użytkownika
endriu888
Obsługa CBA
Posty: 512
Rejestracja: 23 sty 2012, 21:02:33
Reputacja: 0
Strona na CBA.pl: katalogfirm.c0.pl
Płeć: Niewybrana
User Agent: SeaMonkey Windows 1024x768
Kontakt:

Funkcja mail() nie działa.

Postautor: endriu888 » 17 sty 2017, 10:56:08

Proszę testować i sprawdzać, a jak nie będzie działać to napisać tutaj.
Czy wiesz, że:
  • W Panelu CBA w sekcji "wsparcie" jest dedykowany system ticketów (obsługi technicznej)
  • Odpowiadamy na Forum oraz na adres mailowy obsluga(malpa)cba.pl
  • Jesteśmy również na Facebooku! Znajdź nas na facebook.com/hostingcba | cba.pl
W czym jeszcze możemy pomóc?
blackmagic666
Posty: 4
Rejestracja: 14 sty 2017, 14:59:45
Reputacja: 0
Płeć: Niewybrana
User Agent: Firefox Windows 1680x1050

Funkcja mail() nie działa.

Postautor: blackmagic666 » 17 sty 2017, 11:16:44

Niestety nie działa, aktualnie kod wygląda tak

CodeColon Select All Code

   <?php

$NameErr = $EmailErr = $SubErr = $MessErr = "";
$Name = $Email = $Subject = $Message = "";
$To = "blackmagic@testestest.cba.pl";
$headers ="From: blackmagic@testestest.cba.pl Name: $Name\n $Message\n E-Mail: $Email\n";
$n = NULL;
if ($_SERVER["REQUEST_METHOD"] == "POST") {
   if (empty($_POST["Name"])) {
   $NameErr = "Name is required";}
   else {
   $Name = test_input($_POST["Name"]);}
   if (!preg_match("/^[a-zA-Z ]*$/", $Name)){
   $NameErr = "Only letters and white space allowed!";}
   if (empty($_POST["Email"])) {
   $EmailErr = "Email is required";}
   else{
   $Email = test_input($_POST["Email"]);
   if(!filter_var($Email, FILTER_VALIDATE_EMAIL)){
   $EmailErr = "Invalid email format";}}
   if (empty($_POST["Subject"])) {
   $SubErr = "Subject is required";}
   else {
   $Message = test_input($_POST["Subject"]);}
   if (empty($_POST["Message"])) {
   $MessErr = "Message is required";}
   else {
   $Message = test_input($_POST["Message"]);}
}
   
   $Name = test_input($_POST["Name"]);
   $Email = test_input($_POST["Email"]);
   $Subject = test_input($_POST["Subject"]);
   $Message = test_input($_POST["Message"]);
   
function test_input($data) {
    $data = trim($data);
    $data = stripslashes($data);
    $data = htmlspecialchars($data);
    return $data;
  }
   ?>


CodeColon Select All Code

   <form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>" method="post">
      <p><input class="w3-input w3-padding-16" type="text" placeholder="Name" name="Name"></p>
     <span class="error"><?php echo $NameErr;?></span>
      <p><input class="w3-input w3-padding-16" type="text" placeholder="Email" name="Email"></p>
     <span class="error"><?php echo $EmailErr;?></span>
      <p><input class="w3-input w3-padding-16" type="text" placeholder="Subject" name="Subject"></p>
     <span class="error"><?php echo $SubErr;?></span>
      <p><input class="w3-input w3-padding-16" type="text" placeholder="Message" name="Message"></p>
     <span class="error"><?php echo $MessErr;?></span>
      <p>
        <button class="w3-btn w3-grey w3-padding-large w3-hover-green" type="submit" value="1" name="pressed">
          <i class="fa fa-paper-plane"></i> SEND MESSAGE
        </button>
     </p>
    </form>
              <?php
      
      if(isset($_POST["pressed"])) {

      mail($To, $Subject, $Message, $headers);
         
         if (empty($_POST["Name" or "Email" or "Subject" or "Message"])) {
         echo $n;}
         if (isset($Name) and ($Email) and ($Subject) and ($Message)) {
      echo "Email sent.";}}
      ?>
   </div>


Może coś z samym buttonem jest nakrzaczone?
Awatar użytkownika
endriu888
Obsługa CBA
Posty: 512
Rejestracja: 23 sty 2012, 21:02:33
Reputacja: 0
Strona na CBA.pl: katalogfirm.c0.pl
Płeć: Niewybrana
User Agent: SeaMonkey Windows 1024x768
Kontakt:

Funkcja mail() nie działa.

Postautor: endriu888 » 17 sty 2017, 12:45:01

Musi być nagłówek from: żeby działało,: czyli najważniejsze dwie linijki mają wyglądać tak:

$od = "\nFrom: zmarekz@www.cba.pl";
$email = 'zmarekz@www.cba.pl' ;
Czy wiesz, że:
  • W Panelu CBA w sekcji "wsparcie" jest dedykowany system ticketów (obsługi technicznej)
  • Odpowiadamy na Forum oraz na adres mailowy obsluga(malpa)cba.pl
  • Jesteśmy również na Facebooku! Znajdź nas na facebook.com/hostingcba | cba.pl
W czym jeszcze możemy pomóc?
blackmagic666
Posty: 4
Rejestracja: 14 sty 2017, 14:59:45
Reputacja: 0
Płeć: Niewybrana
User Agent: Firefox Windows 1680x1050

Funkcja mail() nie działa.

Postautor: blackmagic666 » 17 sty 2017, 14:47:51

Problem leżał w kodzie. Wrzuciłem na lokalny serwer z włączonym reportowaniem błędów i przyczyna była trywialna.

CodeColon Select All Code

   $Name = test_input($_POST["Name"]);
   $Email = test_input($_POST["Email"]);
   $Subject = test_input($_POST["Subject"]);
   $Message = test_input($_POST["Message"]);


Przypadkowo to zostawiłem, a to był niepotrzebny kawałek na którym eksperymentowałem.
Można zamknąć.
janusz63
Posty: 1
Rejestracja: 13 wrz 2015, 21:30:45
Reputacja: 0
Płeć: Niewybrana
User Agent: Chrome Windows 1366x768

Funkcja mail() nie działa.

Postautor: janusz63 » 21 lip 2017, 10:47:10

Witam,
czy w tej chwili funkcja mail działa?
próbuję ją uruchomić i nie wysyła maili.
Awatar użytkownika
endriu888
Obsługa CBA
Posty: 512
Rejestracja: 23 sty 2012, 21:02:33
Reputacja: 0
Strona na CBA.pl: katalogfirm.c0.pl
Płeć: Niewybrana
User Agent: Firefox Windows 1024x768
Kontakt:

Funkcja mail() nie działa.

Postautor: endriu888 » 21 lip 2017, 11:29:39

Witam

proszę powiedzieć na jakiej stronie nie dochodzą e-maile i w którym miejscu dokładnie?
Czy wiesz, że:
  • W Panelu CBA w sekcji "wsparcie" jest dedykowany system ticketów (obsługi technicznej)
  • Odpowiadamy na Forum oraz na adres mailowy obsluga(malpa)cba.pl
  • Jesteśmy również na Facebooku! Znajdź nas na facebook.com/hostingcba | cba.pl
W czym jeszcze możemy pomóc?

Wróć do „PHP, CGI, SQL”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 1 gość