Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: funkcja php mail() znak końca linii
Forum PHP.pl > Forum > PHP
kefflar
Witajcie, jako nowy użytkownik tego forum chciałem najepierw wszystkich powitać:

Witajcie smile.gif

A teraz problem:

  1. <?php
  2. function sendEmail($from, $to, $subject, $text, $nl2br = false)
  3. {
  4. $headers = "MIME-Version: 1.0" . "r\n";
  5. $headers .= "Content-type: text/html; charset=utf-8" . "r\n";
  6. $headers .= "From: " . $from . "r\n";
  7. if ($nl2br)
  8. $text = nl2br ($text);
  9. $text = stripslashes ($text);
  10. return @mail($to, $subject, $text, $headers);
  11. }
  12. ?>


tak wygląda funkcja wysyłania maila. Wzięta ze strony php.net.
Problem polega na tym że mail wysłany za pomocą tej funkcji wygląda jak jedna wielka sieczka. Brak kodowania, wyświetlają się w treści nagłówki. A wystarczy, że zamienię "\r\n" na \n" i już wszystko działa jak należy. Wcześniej działało to na serwerze z PHP 5.16 obecnie jest PHP 5.20. Wersja php-mail to 1.1.6.

Wcześniej ta sama wersja działała na serwerze FC 6.0 obecnie jest to Debian Etch.

Może ktoś z Was miał tego typu problem? Będę wdzięczny za wszelkie podpowiedzi. Owszem istnieje jeszcze opcja zmiany tego na kilkuset stronach - ale wolałbym jej uniknąć smile.gif
cbagov
Server Linuxowy przewaznie nie wymaga \r takze mozesz sobie w konfigu zdefioniowac OS i w zaleznosci od tego ustawiac separator dla naglowka poczty.
kefflar
Cytat(cbagov @ 15.05.2008, 10:52:51 ) *
Server Linuxowy przewaznie nie wymaga \r takze mozesz sobie w konfigu zdefioniowac OS i w zaleznosci od tego ustawiac separator dla naglowka poczty.

Rozumiem że można to zrobić globalnie dla wszystkich stron. Znalazłem cos takiego w pakiecie php-mail, a ponieważ nie jestem mocny w PHP to pytam:

/* Because the mail() function may pass headers as command
* line arguments, we can't guarantee the use of the standard
* "\r\n" separator. Instead, we use the system's native line
* separator. */
$this->sep = (strstr(PHP_OS, 'WIN')) ? "\r\n" : "\n";
Jeśli ta część konfiguracji odpowiada za zmianę separatora - to jak to zmienić dla linuxa ?

Właśnie przeglądam te funkcje w pakiecie php-mail ale wydaje mi się, że one i tak nie zmienią mi tego w nagłówkach maila. Zresztą próbowałem wstawić coś takiego:

$this->sep = (strstr(PHP_OS, 'Linux')) ? "\n" : "\r\n";

Ale nie pomogło. sad.gif Podejrzewam, że ma to związek ze zmianą systemu. Tylko od czego zacząć szukanie ? sad.gif
cbagov
$this->sep =

rozumiem, ze masz obiekt ze skladowa -sep-, bo chyba nie wpisales tego tak sobie ?winksmiley.jpg pytam dla pewnosci.

Rozwiazania masz dwa, jesli wykrycie systemu i podmiana separatora nie pomaga, bo faktycznie wykrywanie np. nie dziala, to umieszczasz we wlasnym pliku konfiguracyjnym wlasciwy separator i tyle. Wtedy jesli PHP_OS nie dziala z jakiegos powodu uzywasz danych z warunku.
kefflar
Okazuje się że problem leży po stronie serwera pocztowego, lub jakiegoś komponentu zajmującego się przyjmowaniem poczty. Może spamassassin. Jak wysyłam pocztę na inny serwer to mail dochodzi prawidłowo. sad.gif

No cóż trzeba dalej grzebać w konfiguracji.


Problem rozwiązany:

a opisany jest tutaj:
http://bugs.php.net/bug.php?id=15841

U mnie niestety nie działało rozwiązanie podane w linku na końcu. Jeśli ktoś z Was będzie miał podobny problem to zapraszam.
Less
dzięki za ten post
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.