• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Czemu funckja mail() nie wysyła wiadomości

VPS Starter Arubacloud
0 głosów
1,112 wizyt
pytanie zadane 30 sierpnia 2016 w PHP przez Mistrz0000000 Bywalec (2,780 p.)
edycja 30 sierpnia 2016 przez Mistrz0000000

WItam, mam probqem z wysyłaniem maili.

Formularz wygląda tak: Jeszcze tylko dodam że action jest puste bo w końcu wszystko jest includowane w index.php, a więc teoretycznie odbywa się w tym samym pliku.

		<form action="" method="post">
			<input type="text" name="Email" PLACEHOLDER="Email">
			<input type="text" name="Temat" PLACEHOLDER="Temat">
			<input type="text" name="Name" PLACEHOLDER="Nazwa użytkownika">
			<textarea rows=20 cols=100 name="email_text" placeholder="Treść twojej wiadomości dla nas."></textarea>
			<button type="submit" name="send_email">Wyślij</button>
			</form>

a kod w php tak:

if (isset($_POST['send_email']))
{
    if ($_POST['Email'] && $_POST['Temat'] && $_POST['Name'] && $_POST['email_text']) {
        $msg .= "Tekst:  " . $_POST['email_text'] . "\n\n<br><br>";
        $msg .= "Nazwa użytkownika: " . $_POST['Name'] . "\n\n<br>";
        $msg .= "E-Mail:  " . $_POST['Email'] . "\n\n";


        $to = "mistrz0000000@wp.pl";
        $subject = $_POST['Temat'];


        $mailheaders .= "From: " . $_POST['Email'] . "\n";
        $mailheaders .= "MIME-Version: 1.0\n";
        $mailheaders .= "Content-Type: text/html;\n";
        $mailheaders .= "\tcharset=\"UTF-8\"\n";
        $mailheaders .= "Content-Transfer-Encoding: 8bit\n\n";

        mail($to, $subject, $msg, $mailheaders);
    }else{
        $_SESSION['error'] = "Proszę wypełnić wszystkie pola!";
    }
}

 

2 odpowiedzi

+2 głosów
odpowiedź 30 sierpnia 2016 przez Ehlert Ekspert (214,100 p.)

Źle robisz... wszystko.

  1. Nie walidujesz formularza. (filter_var)
  2. Mieszasz wszystko ze wszystkim (HTML + PHP)
  3. Interpreter PHP jedzie jak Bash (OOP)
  4. Zamiast mail to PHPMailer / SwiftMailer
  5. W mailu wysłanym w taki sposób może być nawet bomba. devil
komentarz 30 sierpnia 2016 przez Arkadiusz Waluk Ekspert (289,130 p.)
Jeśli nie skorzystamy z SMTP to prawdopodobnie PHPMailer skorzysta z funkcji mail(), tak przynajmniej wnioskuje patrząc na to: https://github.com/PHPMailer/PHPMailer/blob/master/examples/mail.phps

Też nigdy się nad tym nie zastanawiałem bo lecę zawsze przez SMTP.
komentarz 30 sierpnia 2016 przez Boshi VIP (100,240 p.)
No dobra, ale co w przypadku prostego formularza?  wtedy to mail idzie przez funkcję mail? przecież to bez sens.
komentarz 30 sierpnia 2016 przez Mistrz0000000 Bywalec (2,780 p.)
Skoro ma skorzystać z funckji mail() to po co wtedy wgl phpmailer
komentarz 31 sierpnia 2016 przez Arkadiusz Waluk Ekspert (289,130 p.)
Jest na pewno o tyle prościej, że nie trzeba ręcznie wpisywać tych nagłówków tylko korzysta się z funkcji na obiekcie maila.

A co w takim przypadku nie wiem, szczerze mówiąc jak mówiłem zawsze wysyłam przez SMTP i nigdy się nad tym nie zastanawiałem.
komentarz 31 sierpnia 2016 przez Mistrz0000000 Bywalec (2,780 p.)
No wiesz ja wysłam z emaila hostingu i tylko do mnie więc no. I odkryłem że na hostingerze działa jak usunę nagłówki, a na cba.pl to działa już cały mój skrypt
–2 głosów
odpowiedź 30 sierpnia 2016 przez niezalogowany
edycja 30 sierpnia 2016

Jak chciałbyś zrobić to w pure PHP to proponuję coś takiego:

<?php

	//SMTP server settings	
	$host = "some_domain.com";
    $port = "XXX";
    $username = "";
    $password = "";
	
	
	$messageBody = "";
	
	if($_POST['name']!='false'){
		$messageBody .= '<p>Visitor: ' . $_POST["name"] . '</p>' . "\n";
		$messageBody .= '<br>' . "\n";
	}
	if($_POST['email']!='false'){
		$messageBody .= '<p>Email Address: ' . $_POST['email'] . '</p>' . "\n";
		$messageBody .= '<br>' . "\n";
	}else{
		$headers = '';
	}
	if($_POST['phone']!='false'){		
		$messageBody .= '<p>Phone Number: ' . $_POST['phone'] . '</p>' . "\n";
		$messageBody .= '<br>' . "\n";
	}	
	if($_POST['message']!='false'){
		$messageBody .= '<p>Message: ' . $_POST['message'] . '</p>' . "\n";
	}
	
	if($_POST["stripHTML"] == 'true'){
		$messageBody = strip_tags($messageBody);
	}
	
	if($host=="" or $username=="" or $password==""){
		$owner_email = $_POST["owner_email"];
		$headers = 'From:' . $_POST["email"] . "\r\n" . 'Content-Type: text/plain; charset=UTF-8' . "\r\n";
		$subject = 'A message from your site visitor ' . $_POST["name"];
		
		try{
			if(!mail($owner_email, $subject, $messageBody, $headers)){
				throw new Exception('mail failed');
				}else{
				echo 'mail sent';
			}
			}catch(Exception $e){
			echo $e->getMessage() ."\n";
		}
	}
?>

Do tego musiał byś ładować od razu owner email przez js (radzę w tym samym pliku co sprawdzanie poprawności labeli z html i przesyłanie danych z formularza po udanej walidacji do php ;)

JQuery:

$(window).load(function(){
      $('#form').YourForm({
          ownerEmail:'yourEmail@mail.com'
      })
    })

Jak chciałbyś sprawdzać poprawność labeli w HTML przez jQuery to polecam wtyczkę REGULA SNAPSHOT od Vivin Paliath ;) Bardzo przyspiesza pracę

Stefan

komentarz 30 sierpnia 2016 przez Mistrz0000000 Bywalec (2,780 p.)
Ale ja nie jestem na local hoscie, tylko na hostingerze, a tam pisze że obsługują funkcję mail()
komentarz 30 sierpnia 2016 przez niezalogowany
Wstaw pełen kod, może coś znajdę ;)
komentarz 30 sierpnia 2016 przez Mistrz0000000 Bywalec (2,780 p.)
tzn cały kod czego ? index.php gdzie są sprawdzane wszystkie przyciski, czy może cały kod pomoc.php gdzie jest ten formularz
komentarz 30 sierpnia 2016 przez niezalogowany
Cały kod -> html z którego pobierasz dane, JS+JQ przekazujące je do PHP i wreszcie PHP ;)
komentarz 30 sierpnia 2016 przez Mistrz0000000 Bywalec (2,780 p.)
u mnie nie ma czegoś takiego jak przekazywanie danych z htmla do php poprzez js+jq

Podobne pytania

0 głosów
1 odpowiedź 167 wizyt
pytanie zadane 25 marca 2020 w PHP przez Pico Obywatel (1,330 p.)
0 głosów
1 odpowiedź 493 wizyt
pytanie zadane 26 kwietnia 2018 w PHP przez smokolisz Mądrala (6,340 p.)
0 głosów
1 odpowiedź 183 wizyt
pytanie zadane 20 lipca 2017 w PHP przez `Krzychuu Stary wyjadacz (13,940 p.)

93,006 zapytań

141,972 odpowiedzi

321,254 komentarzy

62,345 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...