Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> funkcja php mail() znak końca linii, Mail wysłany za pomocą tej funkcji wyświetla się niepoprawnie.
kefflar
post
Post #1





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 15.05.2008

Ostrzeżenie: (0%)
-----


Witajcie, jako nowy użytkownik tego forum chciałem najepierw wszystkich powitać:

Witajcie (IMG:http://forum.php.pl/style_emoticons/default/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ąć (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Ten post edytował batman 15.05.2008, 21:10:10
Powód edycji: Dodałem bbcode. Tak na przyszłość - pamiętaj, by robić to samemu
Go to the top of the page
+Quote Post
cbagov
post
Post #2





Grupa: Zarejestrowani
Postów: 181
Pomógł: 18
Dołączył: 19.04.2008

Ostrzeżenie: (10%)
X----


Server Linuxowy przewaznie nie wymaga \r takze mozesz sobie w konfigu zdefioniowac OS i w zaleznosci od tego ustawiac separator dla naglowka poczty.
Go to the top of the page
+Quote Post
kefflar
post
Post #3





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 15.05.2008

Ostrzeżenie: (0%)
-----


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. (IMG:http://forum.php.pl/style_emoticons/default/sad.gif) Podejrzewam, że ma to związek ze zmianą systemu. Tylko od czego zacząć szukanie ? (IMG:http://forum.php.pl/style_emoticons/default/sad.gif)

Ten post edytował kefflar 15.05.2008, 10:41:53
Go to the top of the page
+Quote Post
cbagov
post
Post #4





Grupa: Zarejestrowani
Postów: 181
Pomógł: 18
Dołączył: 19.04.2008

Ostrzeżenie: (10%)
X----


$this->sep =

rozumiem, ze masz obiekt ze skladowa -sep-, bo chyba nie wpisales tego tak sobie ?(IMG:http://forum.php.pl/style_emoticons/default/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.
Go to the top of the page
+Quote Post
kefflar
post
Post #5





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 15.05.2008

Ostrzeżenie: (0%)
-----


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. (IMG:http://forum.php.pl/style_emoticons/default/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.
Go to the top of the page
+Quote Post
Less
post
Post #6





Grupa: Zarejestrowani
Postów: 108
Pomógł: 0
Dołączył: 4.06.2007

Ostrzeżenie: (0%)
-----


dzięki za ten post
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 20.12.2025 - 02:44