VulCode

PHPMailer: nasze zmiany w projekcie open source

Klasyczna biblioteka PHP do wysyłania poczty, używana przez WordPressa i wiele innych systemów.

Język
PHP
Gwiazdki na GitHubie
22 310
3przyjęte zmiany
Od 10.09.2026 do 4.10.2026.
5. miejsce wśród 64 projektów na GitHubie z naszymi zmianami, według gwiazdek. Pierwszy jest Zed (91 587).

Zmiany przyjęte w PHPMailer

Polecenie QUIT nie trafia już do treści przerwanej wiadomości, długie nagłówki z adresami są zawijane, a podpisy S/MIME mają ujednolicone końce linii.

Jak sprawdziliśmy zmianę #3362

Nowy test testQuitDuringData otwiera połączenie, wysyła MAIL i RCPT, rozpoczyna DATA bez wysyłania treści, jakby wysyłka została przerwana, i wywołuje quit(). Test sprawdza w logu klienta, że QUIT nie został wysłany, oraz że połączenie jest zamknięte.

PHP

Nasze projekty w tej technologii, ich ekrany i to, kiedy ją wybieramy.

Błąd, poprawka i wniosek

Skrót naszego opisu z Nowinek technicznych: co nie działało, co zmieniliśmy i co z tego wynika dla naszej pracy.

Co nie działało

QUIT stawał się linią wiadomości

Gdy wysyłka urwała się po komendzie DATA, a aplikacja zamykała połączenie przez quit(), serwer brał QUIT za treść maila i nie odpowiadał. Klient czekał do upływu limitu czasu.

Co zmieniliśmy

quit() sprawdza stan połączenia

Klasa SMTP pamięta ostatnią wysłaną komendę, a quit() w stanie DATA tylko zamyka połączenie, bez wysyłania QUIT.

if ($this->state === 'DATA') {
//The server would take QUIT as part of an unfinished message, so just close the connection
$noerror = true;
} else {
$noerror = $this->sendCommand('QUIT', 'QUIT', 221);
}
Czego nas to nauczyło

Protokół SMTP ma stany, a polecenie wysłane w złym stanie staje się treścią wiadomości.

Przy wysyłce poczty zawsze sprawdzamy, w jakim stanie jest połączenie, zanim je zamkniemy.

Inne projekty z naszymi zmianami: PHP

20 projektów w tej technologii ma nasze przyjęte zmiany. Pasek to gwiazdki repozytorium, obok liczba naszych zmian. Każdy wiersz prowadzi do strony projektu.

Pytania o nasze zmiany w PHPMailer

Skąd są te zmiany, kto je przyjął i czy poprawimy coś w Twojej bibliotece.

Używasz PHPMailer w swoim projekcie?

Jeśli coś w nim nie działa, poprawimy to u źródła i zostawimy obejście do czasu wydania. Odpiszemy w godzinę.