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
Płeć: Niewybrana
User Agent: Firefox Windows 1680x1050

Funkcja mail() nie działa.

Post autor: blackmagic666 »

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:

Kod: Zaznacz cały

	<?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:

Kod: Zaznacz cały

	<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ć?
piotrutv
Posty: 14
Rejestracja: 03 lut 2016, 10:10:38
Płeć: Mężczyzna
User Agent: Firefox Windows 1280x1024

Funkcja mail() nie działa.

Post autor: piotrutv »

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: 1870
Rejestracja: 23 sty 2012, 21:02:33
Strona na CBA.pl: katalogfirm.c0.pl
Płeć: Niewybrana
User Agent: SeaMonkey Windows 1024x768
Kontakt:

Funkcja mail() nie działa.

Post autor: endriu888 »

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
Płeć: Niewybrana
User Agent: Firefox Windows 1680x1050

Funkcja mail() nie działa.

Post autor: blackmagic666 »

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ę?

Kod: Zaznacz cały

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

Kod: Zaznacz cały

	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: 1870
Rejestracja: 23 sty 2012, 21:02:33
Strona na CBA.pl: katalogfirm.c0.pl
Płeć: Niewybrana
User Agent: SeaMonkey Windows 1024x768
Kontakt:

Funkcja mail() nie działa.

Post autor: endriu888 »

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
Płeć: Niewybrana
User Agent: Firefox Windows 1680x1050

Funkcja mail() nie działa.

Post autor: blackmagic666 »

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

Kod: Zaznacz cały

	<?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;
  }
	?>

Kod: Zaznacz cały

	<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: 1870
Rejestracja: 23 sty 2012, 21:02:33
Strona na CBA.pl: katalogfirm.c0.pl
Płeć: Niewybrana
User Agent: SeaMonkey Windows 1024x768
Kontakt:

Funkcja mail() nie działa.

Post autor: endriu888 »

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
Płeć: Niewybrana
User Agent: Firefox Windows 1680x1050

Funkcja mail() nie działa.

Post autor: blackmagic666 »

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

Kod: Zaznacz cały

   $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
Płeć: Niewybrana
User Agent: Chrome Windows 1366x768

Funkcja mail() nie działa.

Post autor: janusz63 »

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: 1870
Rejestracja: 23 sty 2012, 21:02:33
Strona na CBA.pl: katalogfirm.c0.pl
Płeć: Niewybrana
User Agent: Firefox Windows 1024x768
Kontakt:

Funkcja mail() nie działa.

Post autor: endriu888 »

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?
ODPOWIEDZ