Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Wysyłanie emaila + obsługa SSL
Jarod
post
Post #1





Grupa: Zarejestrowani
Postów: 1 190
Pomógł: 27
Dołączył: 23.04.2005

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


Napisałem sobie klasę do wysyłania emaili tekstowych. Wszystko pięknie działa, problem w tym, że jeśli serwer wymaga SSL (np. gmail) to nie działa. Przegrzebałem forum, google i nigdzie nie mogę znaleźć info, w którym miejscu popełniam błąd.
Może ktoś coś będzie mógł doradzić.

Metoda nawiązująca połączenie z serwerem i wysyłająca maila.
  1. <?php
  2. /**
  3.  * Metoda wysyłająca wiadomość email.
  4.  * 
  5.  * @return bool
  6.  */
  7. public function sendEmail()
  8. {
  9. if (!empty($this->sSmtpServer))
  10. {
  11. if ($rSmtpConnect = @fsockopen($this->sSmtpServer, $this->iPort, $iErrNo, $sErrStr, self::TimeOut))
  12. {
  13. $this->aSmtpResponse[] = @fgets($rSmtpConnect, 4096);
  14.  
  15. @fputs($rSmtpConnect, "HELO " . self::Host . self::NewLine);
  16. $this->aSmtpResponse[] = @fgets($rSmtpConnect, 4096);
  17.  
  18. if ($this->bTLSSession)
  19. {
  20. @fputs($rSmtpConnect, "STARTTLS" . self::NewLine);
  21. $this->aSmtpResponse[] = @fgets($rSmtpConnect, 4096);
  22.  
  23. @fputs($rSmtpConnect, "HELO " . self::Host . self::NewLine);
  24. $this->aSmtpResponse[] = @fgets($rSmtpConnect, 4096);
  25. }
  26.  
  27. @fputs($rSmtpConnect, "AUTH LOGIN" . self::NewLine);
  28. $this->aSmtpResponse[] = @fgets($rSmtpConnect, 4096);
  29.  
  30. @fputs($rSmtpConnect, base64_encode($this->sUsername) . self::NewLine);
  31. $this->aSmtpResponse[] = @fgets($rSmtpConnect, 4096);
  32.  
  33. @fputs($rSmtpConnect, base64_encode($this->sPassword) . self::NewLine);
  34. $this->aSmtpResponse[] = @fgets($rSmtpConnect, 4096);
  35.  
  36. @fputs($rSmtpConnect, "MAIL FROM: " . $this->sFrom . self::NewLine);
  37. $this->aSmtpResponse[] = @fgets($rSmtpConnect, 4096);
  38.  
  39. @fputs($rSmtpConnect, "RCPT TO: " . $this->sTo . self::NewLine);
  40. $this->aSmtpResponse[] = @fgets($rSmtpConnect, 4096);
  41.  
  42. @fputs($rSmtpConnect, "DATA" . self::NewLine);
  43. $this->aSmtpResponse[] = @fgets($rSmtpConnect, 4096);
  44.  
  45. @fputs($rSmtpConnect, $this->sHeaders . self::NewLine);
  46. @fputs($rSmtpConnect, $this->sBody . self::NewLine);
  47. @fputs($rSmtpConnect, "." . self::NewLine);
  48. $this->aSmtpResponse[] = @fgets($rSmtpConnect, 4096);
  49.  
  50. @fputs($rSmtpConnect, "QUIT" . self::NewLine);
  51. $this->aSmtpResponse[] = @fgets($rSmtpConnect, 4096);
  52. $bResult = substr($this->aSmtpResponse[9], 0, 3) == '221';
  53. @fclose($rSmtpConnect);
  54.  
  55. return $bResult;
  56. }
  57.  
  58. return false;
  59. }
  60. else throw new MailerException('Nie ustawiono parametrów połączeniowych z serwerem !');
  61. }
  62. ?>
Go to the top of the page
+Quote Post
Kocurro
post
Post #2





Grupa: Zarejestrowani
Postów: 461
Pomógł: 32
Dołączył: 17.09.2003
Skąd: Łódź

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


Hmm ... a proszę powiedz mi w którym miejscu w swoim kodzie obsługujesz komunikację poprzez SSL ? W którym miejscu wysyłasz certyfikat ? Może tam masz błąd ?
Go to the top of the page
+Quote Post
Jarod
post
Post #3





Grupa: Zarejestrowani
Postów: 1 190
Pomógł: 27
Dołączył: 23.04.2005

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


Cała komunikacja od nawiązania połączenia z serwerem do zamknięcia połączenia to ta metoda. Opierałem się na info, które znalazłem na jednej z kilku stron. Serwer zwraca komunikat, że można nawiązać połączenie TLS, po tym jak przejdę przez STARTTLS i na tym się zatrzymuje....

Niestety z rfc nic pożytecznego nie wyczytałem albo źle czytam..
Go to the top of the page
+Quote Post
Kocurro
post
Post #4





Grupa: Zarejestrowani
Postów: 461
Pomógł: 32
Dołączył: 17.09.2003
Skąd: Łódź

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


Oki już mówię (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Po podaniu STARTTLS komunikacja dalej opiera się na skomunikowaniu bezpiecznego kanału i dopiero potem tym bezpiecznym kanałem wysyłasz resztę poleceń. Musisz poszukać w sieci jak z tego skorzystać - ja niestety nie potrafię Ci pomóc (IMG:http://forum.php.pl/style_emoticons/default/sad.gif) nigdy nie starałem się ręcznie obsłużyć komunikacji SSL i TLS ... pewnie gdzieś są jakieś gotowe komponenty itp. ale nie mam pojęcia.

Jak coś znajdę to dam znać - w każdym bądź razie nie jest to łatwa robota.

EDIT:

Looknij tutaj:

http://forums.powweb.com/showthread.php?t=73406

Chyba mają gotowe rozwiązanie - nie mogę teraz doczytać w pełni bo muszę wracać do pracy.

pozdr.

Ten post edytował Kocurro 20.02.2008, 14:34:56
Go to the top of the page
+Quote Post
Jarod
post
Post #5





Grupa: Zarejestrowani
Postów: 1 190
Pomógł: 27
Dołączył: 23.04.2005

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


Cytat(Kocurro @ 20.02.2008, 14:33:12 ) *
Oki już mówię (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Po podaniu STARTTLS komunikacja dalej opiera się na skomunikowaniu bezpiecznego kanału i dopiero potem tym bezpiecznym kanałem wysyłasz resztę poleceń. Musisz poszukać w sieci jak z tego skorzystać - ja niestety nie potrafię Ci pomóc (IMG:http://forum.php.pl/style_emoticons/default/sad.gif) nigdy nie starałem się ręcznie obsłużyć komunikacji SSL i TLS ... pewnie gdzieś są jakieś gotowe komponenty itp. ale nie mam pojęcia.

Jak coś znajdę to dam znać - w każdym bądź razie nie jest to łatwa robota.

Będę bardzo wdzięczny...

Cytat(Kocurro @ 20.02.2008, 14:33:12 ) *
EDIT:

Looknij tutaj:

http://forums.powweb.com/showthread.php?t=73406

Chyba mają gotowe rozwiązanie - nie mogę teraz doczytać w pełni bo muszę wracać do pracy.

pozdr.

Sprawdzę wieczorem. Obsługa zwykłego TLS nie jest trudna bo kod, który podałem działa. Problem tylko z SSL.
Odezwę się. Thx

Niestety sprawdziłem ten kod. Nie działa. W sumie to koleś nie napisał niczego czego ja nie napisałem.

Jedyna różnica to używa fwrite zamiast fputs a
  1. <?php
  2. stream_socket_enable_crypto( $smtp, true, STREAM_CRYPTO_METHOD_TLS_CLIENT );
  3. ?>

zgłasza błąd.
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: 23.08.2025 - 21:11