[php] Jak wysłać maila jeśli php jest w "safe mode"?


(tomilipin) #1

Cześć,

postawiłem prostą stronę na darmowym koncie ovh.org ale PHP ma tam włączony safe_mode i nie działa wysyłanie maili. Jest mi to jednak potrzebne!

Podobno można to obejść tak, że strona wisi na ovh.org a maile są wysyłane z innego serwera.

Ale jak to zrobić?

Od razu zaznaczam, że jestem początkujący w PHP i nie umiem programować obiektowo. Potrzebuję prostego rozwiązania, najlepiej z przykładem.


(slepciu) #2

Możesz skorzystać z wysyłania maili przez SMTP, czyli podobnie jak robią to programy pocztowe. Jest do tego gotowa darmowa klas. Ściągnij sobie ten plik: http://sourceforge.net/projects/phpmailer/files/phpmailer%20for%20php5_6/PHPMailer%20v5.1/PHPMailer_v5.1.zip/download

A tutaj masz przykłady jak tego użyć:

http://phpmailer.worxware.com/index.php?pg=examples


(tomilipin) #3

Dzięki,

wygląda ciekawie.

Zainteresowałem się przykładem na podstawowe wysyłanie maila http://phpmailer.worxware.com/index.php?pg=examplebmail

i z zaskoczeniem wywnioskowałem, że tak naprawdę to będzie próbowało wysłać maila z mojego serwera. A przecież mam safe mode, więc nic nie wyśle :?

Czyżbym musiał korzystać np. z wysyłania maila przez Gmail? http://phpmailer.worxware.com/index.php ... mplebgmail

nie chcę tak :confused:


(slepciu) #4

Nie musisz korzystać konkretnie z Gmaila, możesz skorzystać z dowolnego innego konta pocztowego obsługującego SMTP (możesz np stworzyć w tym celu specjalne konto na swoim hostingu).

Poza tym wg mauala PHP:

  1. włączenie opcji safe_mode jest niezalecane (http://www.php.net/manual/pl/ini.sect.safe-mode.php#ini.safe-mode) więc może warto zmienić hosting

  2. przy włączonym safe_mode funkcja mail() powinna działać, tylko nie można używać jej ostatniego parametru (http://www.php.net/manual/pl/function.mail.php) - chyba, że coś mylę - to niech mnie ktoś poprawi. W każdym razie może po prostu u ciebie na serwerze funkcja mail() jest całkiem wyłączona? Skontaktuj się z adminem, albo sprawdź to za pomocą funkcji phpinfo() - zobacz w "disable_functions" czy jest wymieniona funkcja mail()


(tomilipin) #5

Pytanie dotyczy konkretnie wysłania maila a nie zmiany hostingu. Safe mode jest włączony i nic na to nie poradzę.

Chyba gdyby działała funkcja mail() to bym nie pisał tutaj... Specjalnie dla Ciebie znalazłem: http://pomoc.ovh.pl/ParametryKonta60free punkt 5. Nawet odsyłają do zewnętrznych bibliotek.

Spróbuję dziś z PHP Mailer przez Gmail.

Dziękuję za dotychczasową pomoc - pewnie jeszcze się odezwę :wink:


(slepciu) #6

Spoko, myślałem, że może możesz zmienić hosting, jak nie to trzeba sobie radzić. Te zewnętrzne moduły do SMTP, o których piszą w tym 5 punkcie, to jest właśnie między innymi to co Ci podałem. Wychodzi na to, że nie masz wyjścia, musisz wysyłać pocztę przez jakieś konto pocztowe. W razie problemów pisz, ja używam tej klasy, to będę pewnie w stanie pomóc.


(tomilipin) #7

Miałem problem z polskimi znakami ale poradziłem sobie.

Dla potomnych: należy wstawić $mail->CharSet = "UTF-8"; w pliku w którym wysyłacie maila a nie tylko w klasie phpmailer.

źródło: http://forum.php.pl/index.php?s=&showto ... t&p=585033

Ale chciałbym wysyłać maile tylko tekstowe - jak to zrobić? Chodzi o to, żeby nie wysyłać w mailu dwa razy tego samego (obecnie jest wersja textowa i html).


(slepciu) #8

Wklej kod, którego używasz do wysłania wiadomości. Wg moich doświadczeń ustawienie kodowania na UTF-8 załatwia sprawę całkowicie (pod warunkiem, że całe pliki też są w UTF-8). Spróbuj ustawić kodowanie nie bezpośrednio w klasie (chociaż to też powinno działać), ale dopiero po utworzeniu obiektu:

$mail= new PHPMailer()

$mail->CharSet = 'UTF-8';

(tomilipin) #9

Edytowałem wcześniejszą wiadomość jeszcze zanim napisałeś :wink: Znalazłem to rozwiązanie, wyżej link.

Niestety, ustawienie kodowania w klasie nie pomaga. Działa jedynie po utworzeniu obiektu.

A co do text vs. html - da się usunąć wersję htmlową?


(slepciu) #10

Właśnie widzę, że znalazłeś :slight_smile:

Nigdy nie miałem takiej potrzeby, bo klasa wysyła oba rodzaje wiadomości, więc jeśli jakiś program nie obsługuje HTML to dostanie zwykły tekst, ale z tego co wyczytałem w dokumentacji wygląda to tak:

$mail->IsHTML(false);//wyłączenie html

$mail->AltBody="tresc wiadomosci";//dodanie treści wiadomości zamiast MsgHTML($message)

Nie mam teraz jak tego wypróbować, więc daj proszę znać czy tak działa.


(tomilipin) #11

Zmieniam zdanie, jednak będę korzystał z html - można robić śliczne maile z grafiką :slight_smile:

Także nawet nie próbuję.

Bardzo Ci dziękuję za pomoc! Wszystko śmiga jak należy: stawiam wirtualne piwo :slight_smile:


(slepciu) #12

Spoko. Polecam się na przyszłość :slight_smile:


(tomilipin) #13

Nowy problem - zauważyłem dopiero po czasie.

Maile wysyłane do poniższego użytkownika:

  • Jędrek Kowalski (2aG)