Wypowiedzi
-
Jarosław Rafa:
Może trochę nieskładnie ale jednak pisałem o tym, że nie trzeba używać funkcji mail(). Wystarczy klasa php do obsługi smtp. Można taką znaleźć tutaj:
Michał Sołtan:
Jeśli chcemy wysłać wiadomość email bez użycia dodatkowych funkcji php, np. mail() lub biblioteki IMAP, można to zrobić stosując protokół SMTP.
Zastosowanie funkcji fsockopen('host','port'), port 25 a host do uzgodnienia, łączy nas z serwerem pocztowym. Dalej należy wysłać na "połączony z nami" serwer odpowiednie instrukcje, funkcja write, z protokołu SMTP.
Tak tak... jeszcze po drodze implementujac cale szyfrowanie TLS, bo wszak problem ktory opisywala Edyta polega dokladnie na tym, ze serwer SMTP Gmaila takowego szyfrowania WYMAGA.
Jeśli chodzi o systemy operacyjne na jakich można uzyskać połączenie z serwem
to Windows niestety nie wypada najlepiej. Windows może nie obsługiwać szyfrowanych protokołów. Generalnie jednak skrypty php do obsługi SMTP będą działać wszędzie.
Pod warunkiem ze maja zaimplementowana obsluge TLS. mail() na pewno sobie z tym nie daje rady, nie wiem jak te bardziej zaawansowane.
Zwracam uwage ze TLS to nie to samo co SMTP via SSL (np. przez stunnel), ktory to przypadek dla aplikacji korzystajacej z SMTP jest praktycznie niewidoczny. TLS jest rozszerzeniem specyfikacji (E)SMTP - jezeli serwer anonsuje w komunikacie poczatkowym, ze obsluguje TLS, klient po HELO/EHLO powinien nastepnie wydac polecenie STARTTLS, wynegocjowac parametry szyfrowania i przejsc na transmisje szyfrowana. Wszystko w tej samej sesji SMTP!Jarosław Rafa edytował(a) ten post dnia 09.10.08 o godzinie 17:09
http://www.dcsc.utfsm.cl/redes/webhosting/class.smtp.p...
Natomiast w przypadku połączeń tls wymagany jest mały trick.
Po nawiązaniu połączenia i wysłaniu komendy Hello trzeba "ręcznie" wysłać do serwera smtp komendę STARTTLS następnie przełączyć strumień na szyfrowanie tls komendą:
stream_socket_enable_crypto($mail->smtp_conn,true,STREAM_CRYPTO_METHOD_TLS_CLIENT)
Jeśli php obsługuje tls a można to sprawdzić komendą phpinfo() - parametr "Registered Stream Socket Transports" to będzie działać bez żadnych problemów.
Metoda sam sprawdziłem z wykorzystaniem wspomnianej wcześniej biblioteki i serwera smtp.gmail.com.
Cały skrypt, który trzeba napisać dodatkowo ogranicza się do kilkunastu linijek. -
Pani Edyto!
1. System Windows, domyślnie, nie posiada programu do wysyłania wiadomości pocztowych.
2. Program sendmail niekoniecznie musi być serwerem.
3. Z poziomu php można wysyłać wiadomości email nie posługując się funkją mail lub biblioteką IMAP.
Jeśli chcemy wysłać wiadomość email bez użycia dodatkowych funkcji php, np. mail() lub biblioteki IMAP, można to zrobić stosując protokół SMTP.
Zastosowanie funkcji fsockopen('host','port'), port 25 a host do uzgodnienia, łączy nas z serwerem pocztowym. Dalej należy wysłać na "połączony z nami" serwer odpowiednie instrukcje, funkcja write, z protokołu SMTP.
Dokumentacja protokołu SMTP jest dostępna w internecie. Można znaleźć wiele darmowych skryptów php, implementujących klasy do obsługi takich połączeń.
Jeśli chodzi o systemy operacyjne na jakich można uzyskać połączenie z serwem
to Windows niestety nie wypada najlepiej. Windows może nie obsługiwać szyfrowanych protokołów. Generalnie jednak skrypty php do obsługi SMTP będą działać wszędzie.
Podsumowanie:
Z mojej obserwacji wątku wynika że, skrypty wysyłające pocztę z Pani komputera muszą działać jak program pocztowy i łączyć się z serwerem pocztowym za pomocą protokołu SMTP. Takie połączenie i działanie umożliwiają popularne biblioteki php dedykowane dla SMTP.
Z wyrazami szacunku
Michał Sołtan