Michał Sołtan

właściciel, Michał Sołtan

Wypowiedzi

  • Michał Sołtan
    Wpis na grupie PHP w temacie smtp a localhost
    16.10.2008, 12:57

    Jarosław Rafa:
    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
    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:
    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.

  • Michał Sołtan
    Wpis na grupie PHP w temacie smtp a localhost
    7.10.2008, 23:09

    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

Dołącz do GoldenLine

Oferty pracy

Sprawdź aktualne oferty pracy

Aplikuj w łatwy sposób

Aplikuj jednym kliknięciem

Wyślij zaproszenie do