Funkcja mail i przyjazny link

0

Zacznę trochę dziwnie, znam rozwiązanie swojego problemu, ale nie jestem z niego zadowolony i nie znam też przyczyny...

Na serwerze znajduje się plik /public_html/libs/test/form.php w którym znajduje się:

$adresat = '[email protected]';
$mail = $_POST['mail'];
$kto = $_POST['kto'];
$tel = $_POST['tel'];
$tresc = $_POST['tekst'];
$content = "
Kto: ".$kto."\n\r
E-mail: ".$mail."\n\r
Tek: ".$tel."\n\r

$tresc";
$header = 	"From: ".$mail." \nContent-Type:".' text/plain;charset="UTF-8"'."\nContent-Transfer-Encoding: 8bit";
if (mail($adresat, 'Kontakt ze strony', $content, $header)){
	echo 'ok';
}

Nic szczególnego, jednak adresy witryny przepisywane są za pomocą .htaccess

RewriteRule ^(.*),(.*).html$ index.php?strona=$1&link=$2 [L,NC]

index.php includuje odpowiedni plik na podstawie tych dwóch zmiennych, tak więc adres docelowy to www.domena.pl/5,kontakt.html. Na tej stronie znajduje się formularz kierujący sam do siebie

action="/5,kontakt.html"

i tu zaczyna się problem, ponieważ po wysłaniu formularza strona wyświetla "ok" tak jakby wiadomość została wysłana, jednak ta nigdy nie dociera. Zmienne $_POST są prawidłowo przekazywane i przypisywane - sprawdziłem.

Problem znika, kiedy formularz kieruje nie do przyjaznego linka, a

action="/libs/test/form.php"

Niestety nie mogę pozwolić sobie na pokazywanie struktury katalogów, dlatego moje pytanie brzmi dlaczego wysyłając formularz przez przyjazny link wiadomość (mimo rzekomego wysłania) nie dociera? Dodam, że przez 3 miesiące skrypt działał prawidłowo i nagle przestał. Ja nic nie zmieniałem, hostingodawca utrzymuje, że konfiguracja serwera nie uległa zmianie.

Z góry dzięki za pomoc.

2

użyj biblioteki phpMailer - tam przy okazji rzuci Ci komunikatem z błędem, bo coś jest źle, ale nie idzie wywnioskować z informacji, które podałeś - co.

0

To jest jakieś rozwiązanie, na pewno sprawdzę, jednak to i tak nie zmienia faktu, że powyższy kod nie działa tylko wtedy gdy odwołuje się do niego za pomocą przyjaznego adresu.

0

Za mało informacji, żeby Ci pomóc, skoro uważasz, że wszystko jest ok. Przygotuj np. paczkę z kodem, którą jak wgram do siebie to zacznie zachowywać się identycznie (cały zbędny kod wytnij) - to możemy myśleć.

0

Ja też bym wolał użyć phpMailer albo swiftmailer(http://swiftmailer.org/). Także stworzyć można mini środowisko z serwerem poczty (linux - postfix, windows - hmailserwer) do własnych testów.
http://www.lemat.priv.pl/index.php?m=page&pg_id=90
hmailserver: http://www.hmailserver.com/
Ogólnie dziwne, że nie działa dla przyjaznych adresów, wysyłanie maili - jak pisze @dzek69 gdzieś musi być błąd, a kod bez błędów nie istnieje :

0

Wygląda na to, że obejdzie się bez wysyłania kodu gdyż phpmailer bez problemu maila wysyła. Przy okazji - mam problem z kodowaniem przesyłanych wiadomości (brak polskich znaków). Próbowałem wszystkich znalezionych rozwiązań:

  1. definicja kodowania
    $mail->CharSet = "UTF-8";

  2. funkcja iconv....

Obu rozwiązań próbowałem zarówno z UTF-8 jak i ISO-8859-2

"a kod bez błędów nie istnieje" cóż za wzniosła myśl, nie sposób się nie zgodzić ... jednak uważam, że kod jest poprawny w tym wypadku. Nie działa tylko z przyjaznym linkiem, a phpmailer ogarnia bez problemu. Wydaje mi się, że to błąd funkcji mail() która zwraca true zaraz po przekazaniu maila do wysyłki, a nie jego faktycznego wysłania, dlatego if(mail(... nie jest wystarczającym zabezpieczeniem. Przeglądając fora znalazłem wiele sygnałów o "zaginionych" mailach :)

0

w jakim kodowaniu masz tekst źródłowy, w jakim kodowaniu zapisujesz pliki php, daj też jakiś kod

0

Pliki zapisuje w UTF-8, meta-tag na stronie również w UTF-8, tekst pochodzi z formularza więc w tym wypadku również jest w UTF-8.

Kod HTML:

[...]
<meta charset="UTF-8" />
[...]
<form action="/5,kontakt.html" method="POST">
Kto: <input type="text" name="kto" /><br /><br />	
E-mail: <input type="text" name="mail" /><br /><br />
Telefon: <input type="text" name="tel" /><br /><br />
<textarea name="tekst"></textarea><br /><br />
<button type="submit">Wyślij!</button>
</form>

Kod PHP, przyjęcie formularza i wysyłka maila:

$mailod = $_POST['mail'];
$kto = $_POST['kto'];
$tel = $_POST['tel'];
$tresc = $_POST['tekst'];
$content = "
Kto: ".$kto."<br />
E-mail: ".$mailod."<br />
Tel: ".$tel."<br /><br />
$tresc";

$mail = new PHPMailer();
$mail->CharSet = "UTF-8";

$mail->IsSMTP(); 	
$mail->SMTPDebug  = 1;
$mail->SMTPAuth   = true; 
$mail->Host = 'mail.host.pl';
$mail->Port = 25; 
$mail->Username   = "moj@mail"; 
$mail->Password   = "haslo";

$mail->SetFrom($mailod, '');

$mail->Subject    = "Kontakt ze strony";
$mail->AltBody    = "To view the message, please use an HTML compatible email viewer!"; // optional, comment out and test

$mail->MsgHTML($content);

//To mail id
$address = "[email protected]";
$mail->AddAddress($address, "test");

if(!$mail->Send()) {
  echo 'nie';
} else {
  echo 'tak';
}

Mail dociera, jednak z krzaczkami zamiast polskich znaków. Znalazłem tylko tymczasowe rozwiązanie...

$polski = array('ą','Ą','ć','Ć','ę','Ę','ł','Ł','ń','Ń','ó','Ó','ś','Ś','ż','Ż','ź','Ź');
$encja = array('&#261;','&#260;','&#263;','&#262;','&#281;','&#280;','&#322;','&#321;','&#324;','&#323;','&#243;','&#211;','&#347;','&#346;','&#380;','&#379;','&#378;','&#377;');    

$content = str_replace($polski, $encja, $content);
$kto = str_replace($polski, $encja, $kto);
1

analiza wykazała - na o2 wyświetla się dobrze. roundcube też pokazuje dobrze. wbudowany klient mail w Operę - źle, choć przez widok nagłówków wszystko jest dobrze.
spróbuj po prosty wywalić to $mail->CharSet = "UTF-8";

0

Wygrałeś! :) Nie wziąłem pod uwagę klienta pocztowego, a pech chciał, że wykorzystuję operę...roundcube faktycznie wyświetla prawidłowo, nawet M$ outlook sobie dobrze radzi :| Wygląda na to, że moje rozwiązanie tymczasowe z postaw wyżej zostaje, bo daje radę. Dzięki za pomoc, myślę, że temat można zamknąć ;)

0

wiesz, opera tez to powinna ogarniac, jak ja pcham maile z phpMailera to w operze sa ok

1 użytkowników online, w tym zalogowanych: 0, gości: 1