|
Znak końca linii w php mail()
kefflar - 15-05-2008 12:38
Witajcie:
Serwer to Debian Etch, próbuję wykorzystać funkcję mail() z php'a do wysyłania maili. No i problem polega na tym, że skrypty przeniesione z FC 6.0 nie działają tak jak powinny. Na stronie mam podpiętą taką funkcję do wysyłania maila:
<?php $to = 'osoba@example.com'; $subject = 'temat'; $message = 'witam'; $headers = 'From: webmaster@example.com' . "\r\n" . 'Reply-To: webmaster@example.com' . "\r\n" . 'X-Mailer: PHP/' . phpversion();
mail($to, $subject, $message, $headers); ?>
Jest to wzięte ze strony php.net. Wszystko wysyłało się ładnie na FC 6.0, ale w przypadku Debiana mail dochodzi z nagłówkami w treści maila. Jeśli zmienię znaki końca linii z "\r\n" na "\n" to wszystko wysyła się tak jak trzeba. Dla mnie jednak to nie jest dobre rozwiązanie - musiałbym taką operację przeprowadzić w źródłach każdej strony - a jest ich kilkaset. Wiem, że pakiet php-mail jest w starszej wersji w Debianie niż był w Fedorze. Podmieniłem go razem z php-mail-mime ale ten zabieg nic nie pomógł.
Zastanawiam się co jeszcze może być przyczyną takiego zachowania i dlatego proszę Was o pomoc. Za wszelkie wskazówki będę bardzo wdzięczny.
Pozdrawiam
Update: Po głębszej analizie okazało się, że problem nie leży po stronie php lecz po stronie serwera przyjmującego pocztę. Nie wiedzieć czemu Qmail nie rozpoznaje nagłówków zdefiniowanych w funkcji php. Wstawia na końcu każdego nagłówka znak końca linii
^M
, który później skutkuje złym wyświetlaniem wiadomość w czytnikach poczty.
No cóż, szukam dalej...
Update:
Problem opisany Tutaj
zulowski - 18-05-2008 15:41
Może troszkę nie związane z tematem, ale: piszesz, że musiał byś ten skrypt zmieniać na "kilkuset" stronach, a nie łatwiej było po prostu ten skrypt napisać raz w pliku np wyslijMail.php, i w pozostałych stronach dołączać ten plik w odpowiednich miejscach?
kefflar - 19-05-2008 10:25
Może troszkę nie związane z tematem, ale: piszesz, że musiał byś ten skrypt zmieniać na "kilkuset" stronach, a nie łatwiej było po prostu ten skrypt napisać raz w pliku np wyslijMail.php, i w pozostałych stronach dołączać ten plik w odpowiednich miejscach?
Może i lepiej - gdybym to ja zajmował się pisaniem tych stron. W linku do bugtracka php(który podałem w poście wyżej) opisana jest przyczyna - i wiąże się ona z błędną interpretacją funkcji mail() przez serwer QMAIL. Rozwiązanie znalazłem poprzez prosty skrypt. Mail php'owy zamiast wysyłać za pomocą sendmaila(a właściwie polecenia qmail-inject) wysyła dane najpierw do skryptu, który usuwa znaki końca linii "\r" a następnie przekazuje wynik do qmail-inject.
Proste i załatwia problem w całości.
Pozdrawiam
zanotowane.pldoc.pisz.plpdf.pisz.plminister.pev.pl
|