Changeset 118851 in spip-zone


Ignore:
Timestamp:
Dec 2, 2019, 12:30:19 PM (12 days ago)
Author:
Cerdic
Message:

On passe a PHPMailer 6

Location:
_plugins_/facteur/trunk
Files:
15 added
2 deleted
41 edited
5 copied

Legend:

Unmodified
Added
Removed
  • _plugins_/facteur/trunk

    • Property subgit:lock:58674e6131ee951942454b78d114df804994c9f2 deleted
    • Property subgit:lock:d6c6cd28d40013cb811a16fae43e6aa85a19bb31 set to 2019-12-02T18:21:44.651
  • _plugins_/facteur/trunk/classes/facteur.php

    r118850 r118851  
    11<?php
    22/*
    3  * Plugin Facteur 2
     3 * Plugin Facteur 4
    44 * (c) 2009-2011 Collectif SPIP
    55 * Distribue sous licence GPL
     
    77 */
    88
     9use PHPMailer\PHPMailer\PHPMailer;
     10
    911if (!defined("_ECRIRE_INC_VERSION")) return;
    1012
     
    1214include_spip('inc/texte');
    1315include_spip('inc/filtres');
    14 
    15 if (!class_exists('PHPMailer')) {
    16         include_spip('lib/phpmailer-php5/class.phpmailer');
    17         include_spip('lib/phpmailer-php5/class.smtp');
    18 }
    19 
    2016include_spip('facteur_fonctions');
     17include_spip('lib/PHPMailer-6/autoload');
    2118
    2219/**
  • _plugins_/facteur/trunk/lib/PHPMailer-6/language/phpmailer.lang-ar.php

    r118850 r118851  
    2525$PHPMAILER_LANG['smtp_error']           = 'خطأ على مستوى الخادم SMTP: ';
    2626$PHPMAILER_LANG['variable_set']         = 'لا يمكن تعيين أو إعادة تعيين متغير: ';
    27 //$PHPMAILER_LANG['extension_missing']    = 'Extension missing: ';
     27$PHPMAILER_LANG['extension_missing']    = 'الإضافة غير موجودة: ';
  • _plugins_/facteur/trunk/lib/PHPMailer-6/language/phpmailer.lang-az.php

    • Property svn:executable set to *
  • _plugins_/facteur/trunk/lib/PHPMailer-6/language/phpmailer.lang-ba.php

    • Property svn:executable set to *
    r118850 r118851  
    77
    88$PHPMAILER_LANG['authenticate']         = 'SMTP Greška: Neuspjela prijava.';
    9 $PHPMAILER_LANG['connect_host']         = 'SMTP Greška: Ne moguće se spojiti sa SMTP serverom.';
     9$PHPMAILER_LANG['connect_host']         = 'SMTP Greška: Nije moguće spojiti se sa SMTP serverom.';
    1010$PHPMAILER_LANG['data_not_accepted']    = 'SMTP Greška: Podatci nisu prihvaćeni.';
    1111$PHPMAILER_LANG['empty_message']        = 'Sadržaj poruke je prazan.';
  • _plugins_/facteur/trunk/lib/PHPMailer-6/language/phpmailer.lang-be.php

    • Property svn:executable set to *
  • _plugins_/facteur/trunk/lib/PHPMailer-6/language/phpmailer.lang-bg.php

    • Property svn:executable set to *
  • _plugins_/facteur/trunk/lib/PHPMailer-6/language/phpmailer.lang-ca.php

    • Property svn:executable set to *
  • _plugins_/facteur/trunk/lib/PHPMailer-6/language/phpmailer.lang-cs.php

    • Property svn:executable set to *
  • _plugins_/facteur/trunk/lib/PHPMailer-6/language/phpmailer.lang-da.php

    • Property svn:executable set to *
  • _plugins_/facteur/trunk/lib/PHPMailer-6/language/phpmailer.lang-el.php

    • Property svn:executable set to *
  • _plugins_/facteur/trunk/lib/PHPMailer-6/language/phpmailer.lang-eo.php

    • Property svn:executable set to *
    r118850 r118851  
    2323$PHPMAILER_LANG['smtp_error']           = 'Eraro de servilo SMTP : ';
    2424$PHPMAILER_LANG['variable_set']         = 'Variablo ne pravalorizeblas aŭ ne repravalorizeblas: ';
    25 //$PHPMAILER_LANG['extension_missing']    = 'Extension missing: ';
     25$PHPMAILER_LANG['extension_missing']    = 'Mankas etendo: ';
  • _plugins_/facteur/trunk/lib/PHPMailer-6/language/phpmailer.lang-es.php

    r118850 r118851  
    99$PHPMAILER_LANG['connect_host']         = 'Error SMTP: Imposible conectar al servidor SMTP.';
    1010$PHPMAILER_LANG['data_not_accepted']    = 'Error SMTP: Datos no aceptados.';
    11 $PHPMAILER_LANG['empty_message']        = 'El cuerpo del mensaje está vacío';
     11$PHPMAILER_LANG['empty_message']        = 'El cuerpo del mensaje está vacío.';
    1212$PHPMAILER_LANG['encoding']             = 'Codificación desconocida: ';
    1313$PHPMAILER_LANG['execute']              = 'Imposible ejecutar: ';
  • _plugins_/facteur/trunk/lib/PHPMailer-6/language/phpmailer.lang-fa.php

    • Property svn:executable set to *
    r118850 r118851  
    2525$PHPMAILER_LANG['smtp_error']           = 'خطا در SMTP Server: ';
    2626$PHPMAILER_LANG['variable_set']         = 'امکان ارسال یا ارسال مجدد متغیر‌ها وجود ندارد: ';
    27 //$PHPMAILER_LANG['extension_missing']    = 'Extension missing: ';
     27$PHPMAILER_LANG['extension_missing']    = 'افزونه موجود نیست: ';
  • _plugins_/facteur/trunk/lib/PHPMailer-6/language/phpmailer.lang-fi.php

    • Property svn:executable set to *
  • _plugins_/facteur/trunk/lib/PHPMailer-6/language/phpmailer.lang-fo.php

    • Property svn:executable set to *
  • _plugins_/facteur/trunk/lib/PHPMailer-6/language/phpmailer.lang-fr.php

    r118850 r118851  
    66 * for example before a colon or exclamation mark.
    77 * There is one of these characters between these quotes: " "
    8  * @link http://unicode.org/udhr/n/notes_fra.html
     8 * @see http://unicode.org/udhr/n/notes_fra.html
    99 */
    1010
  • _plugins_/facteur/trunk/lib/PHPMailer-6/language/phpmailer.lang-gl.php

    • Property svn:executable set to *
  • _plugins_/facteur/trunk/lib/PHPMailer-6/language/phpmailer.lang-he.php

    • Property svn:executable set to *
  • _plugins_/facteur/trunk/lib/PHPMailer-6/language/phpmailer.lang-hr.php

    • Property svn:executable set to *
  • _plugins_/facteur/trunk/lib/PHPMailer-6/language/phpmailer.lang-hu.php

    • Property svn:executable set to *
    r118850 r118851  
    2424$PHPMAILER_LANG['smtp_error']           = 'SMTP-szerver hiba: ';
    2525$PHPMAILER_LANG['variable_set']         = 'A következő változók beállítása nem sikerült: ';
    26 //$PHPMAILER_LANG['extension_missing']    = 'Extension missing: ';
     26$PHPMAILER_LANG['extension_missing']    = 'Bővítmény hiányzik: ';
  • _plugins_/facteur/trunk/lib/PHPMailer-6/language/phpmailer.lang-id.php

    • Property svn:executable set to *
    r118850 r118851  
    44 * @package PHPMailer
    55 * @author Cecep Prawiro <cecep.prawiro@gmail.com>
     6 * @author @januridp
    67 */
    78
    8 $PHPMAILER_LANG['authenticate']         = 'Kesalahan SMTP: Tidak dapat mengautentikasi.';
     9$PHPMAILER_LANG['authenticate']         = 'Kesalahan SMTP: Tidak dapat mengotentikasi.';
    910$PHPMAILER_LANG['connect_host']         = 'Kesalahan SMTP: Tidak dapat terhubung ke host SMTP.';
    10 $PHPMAILER_LANG['data_not_accepted']    = 'Kesalahan SMTP: Data tidak diterima peladen.';
     11$PHPMAILER_LANG['data_not_accepted']    = 'Kesalahan SMTP: Data tidak diterima.';
    1112$PHPMAILER_LANG['empty_message']        = 'Isi pesan kosong';
    1213$PHPMAILER_LANG['encoding']             = 'Pengkodean karakter tidak dikenali: ';
    1314$PHPMAILER_LANG['execute']              = 'Tidak dapat menjalankan proses : ';
    1415$PHPMAILER_LANG['file_access']          = 'Tidak dapat mengakses berkas : ';
    15 $PHPMAILER_LANG['file_open']            = 'Kesalahan File: Berkas tidak bisa dibuka : ';
    16 $PHPMAILER_LANG['from_failed']          = 'Alamat pengirim berikut mengakibatkan error : ';
    17 $PHPMAILER_LANG['instantiate']          = 'Tidak dapat menginisialisasi fungsi email';
    18 $PHPMAILER_LANG['invalid_address']      = 'Gagal terkirim, alamat email tidak valid : ';
     16$PHPMAILER_LANG['file_open']            = 'Kesalahan File: Berkas tidak dapat dibuka : ';
     17$PHPMAILER_LANG['from_failed']          = 'Alamat pengirim berikut mengakibatkan kesalahan : ';
     18$PHPMAILER_LANG['instantiate']          = 'Tidak dapat menginisialisasi fungsi surel';
     19$PHPMAILER_LANG['invalid_address']      = 'Gagal terkirim, alamat surel tidak benar : ';
    1920$PHPMAILER_LANG['provide_address']      = 'Harus disediakan minimal satu alamat tujuan';
    20 $PHPMAILER_LANG['mailer_not_supported'] = 'Mailer tidak didukung';
    21 $PHPMAILER_LANG['recipients_failed']    = 'Kesalahan SMTP: Alamat tujuan berikut menghasilkan error : ';
     21$PHPMAILER_LANG['mailer_not_supported'] = ' mailer tidak didukung';
     22$PHPMAILER_LANG['recipients_failed']    = 'Kesalahan SMTP: Alamat tujuan berikut menghasilkan kesalahan : ';
    2223$PHPMAILER_LANG['signing']              = 'Kesalahan dalam tanda tangan : ';
    2324$PHPMAILER_LANG['smtp_connect_failed']  = 'SMTP Connect() gagal.';
    24 $PHPMAILER_LANG['smtp_error']           = 'Kesalahan peladen SMTP : ';
    25 $PHPMAILER_LANG['variable_set']         = 'Tidak berhasil mengatur atau mengatur ulang variable : ';
    26 //$PHPMAILER_LANG['extension_missing']    = 'Extension missing: ';
     25$PHPMAILER_LANG['smtp_error']           = 'Kesalahan pada pelayan SMTP : ';
     26$PHPMAILER_LANG['variable_set']         = 'Tidak dapat mengatur atau mengatur ulang variable : ';
     27$PHPMAILER_LANG['extension_missing']    = 'Ekstensi hilang: ';
  • _plugins_/facteur/trunk/lib/PHPMailer-6/language/phpmailer.lang-it.php

    r118850 r118851  
    2525$PHPMAILER_LANG['smtp_error']           = 'Errore del server SMTP: ';
    2626$PHPMAILER_LANG['variable_set']         = 'Impossibile impostare o resettare la variabile: ';
    27 //$PHPMAILER_LANG['extension_missing']    = 'Extension missing: ';
     27$PHPMAILER_LANG['extension_missing']    = 'Estensione mancante: ';
  • _plugins_/facteur/trunk/lib/PHPMailer-6/language/phpmailer.lang-ja.php

    • Property svn:executable set to *
  • _plugins_/facteur/trunk/lib/PHPMailer-6/language/phpmailer.lang-ka.php

    • Property svn:executable set to *
  • _plugins_/facteur/trunk/lib/PHPMailer-6/language/phpmailer.lang-ko.php

    • Property svn:executable set to *
  • _plugins_/facteur/trunk/lib/PHPMailer-6/language/phpmailer.lang-lt.php

    • Property svn:executable set to *
  • _plugins_/facteur/trunk/lib/PHPMailer-6/language/phpmailer.lang-lv.php

    • Property svn:executable set to *
  • _plugins_/facteur/trunk/lib/PHPMailer-6/language/phpmailer.lang-ms.php

    • Property svn:executable set to *
    r118850 r118851  
    2424$PHPMAILER_LANG['smtp_error']           = 'Ralat pada pelayan SMTP: ';
    2525$PHPMAILER_LANG['variable_set']         = 'Tidak boleh menetapkan atau menetapkan semula pembolehubah: ';
    26 //$PHPMAILER_LANG['extension_missing']    = 'Extension missing: ';
     26$PHPMAILER_LANG['extension_missing']    = 'Sambungan hilang: ';
  • _plugins_/facteur/trunk/lib/PHPMailer-6/language/phpmailer.lang-nb.php

    • Property svn:executable set to *
    r118850 r118851  
    88$PHPMAILER_LANG['connect_host']         = 'SMTP Feil: Kunne ikke koble til SMTP tjener.';
    99$PHPMAILER_LANG['data_not_accepted']    = 'SMTP Feil: Datainnhold ikke akseptert.';
    10 $PHPMAILER_LANG['empty_message']        = 'Melding kropp tomt';
     10$PHPMAILER_LANG['empty_message']        = 'Meldingsinnhold mangler';
    1111$PHPMAILER_LANG['encoding']             = 'Ukjent koding: ';
    1212$PHPMAILER_LANG['execute']              = 'Kunne ikke utføre: ';
  • _plugins_/facteur/trunk/lib/PHPMailer-6/language/phpmailer.lang-nl.php

    r118850 r118851  
    11<?php
    22/**
    3  * Dutch PHPMailer language file: refer to class.phpmailer.php for definitive list.
     3 * Dutch PHPMailer language file: refer to PHPMailer.php for definitive list.
    44 * @package PHPMailer
    55 * @author Tuxion <team@tuxion.nl>
     
    2424$PHPMAILER_LANG['smtp_error']           = 'SMTP-serverfout: ';
    2525$PHPMAILER_LANG['variable_set']         = 'Kan de volgende variabele niet instellen of resetten: ';
    26 //$PHPMAILER_LANG['extension_missing']    = 'Extension missing: ';
     26$PHPMAILER_LANG['extension_missing']    = 'Extensie afwezig: ';
  • _plugins_/facteur/trunk/lib/PHPMailer-6/language/phpmailer.lang-pl.php

    • Property svn:executable set to *
  • _plugins_/facteur/trunk/lib/PHPMailer-6/language/phpmailer.lang-pt.php

    • Property svn:executable set to *
  • _plugins_/facteur/trunk/lib/PHPMailer-6/language/phpmailer.lang-pt_br.php

    • Property svn:executable set to *
    r118850 r118851  
    2727$PHPMAILER_LANG['smtp_error']           = 'Erro de servidor SMTP: ';
    2828$PHPMAILER_LANG['variable_set']         = 'Não foi possível definir ou redefinir a variável: ';
    29 $PHPMAILER_LANG['extension_missing']    = 'Extensão ausente: ';
     29$PHPMAILER_LANG['extension_missing']    = 'Extensão não existe: ';
  • _plugins_/facteur/trunk/lib/PHPMailer-6/language/phpmailer.lang-ro.php

    • Property svn:executable set to *
  • _plugins_/facteur/trunk/lib/PHPMailer-6/language/phpmailer.lang-ru.php

    • Property svn:executable set to *
    r118850 r118851  
    88
    99$PHPMAILER_LANG['authenticate']         = 'Ошибка SMTP: ошибка авторизации.';
    10 $PHPMAILER_LANG['connect_host']         = 'Ошибка SMTP: не удается подключиться к серверу SMTP.';
     10$PHPMAILER_LANG['connect_host']         = 'Ошибка SMTP: не удается подключиться к SMTP-серверу.';
    1111$PHPMAILER_LANG['data_not_accepted']    = 'Ошибка SMTP: данные не приняты.';
    12 $PHPMAILER_LANG['encoding']             = 'Неизвестный вид кодировки: ';
     12$PHPMAILER_LANG['encoding']             = 'Неизвестная кодировка: ';
    1313$PHPMAILER_LANG['execute']              = 'Невозможно выполнить команду: ';
    1414$PHPMAILER_LANG['file_access']          = 'Нет доступа к файлу: ';
    15 $PHPMAILER_LANG['file_open']            = 'Файловая ошибка: не удается открыть файл: ';
     15$PHPMAILER_LANG['file_open']            = 'Файловая ошибка: не удаётся открыть файл: ';
    1616$PHPMAILER_LANG['from_failed']          = 'Неверный адрес отправителя: ';
    17 $PHPMAILER_LANG['instantiate']          = 'Невозможно запустить функцию mail.';
    18 $PHPMAILER_LANG['provide_address']      = 'Пожалуйста, введите хотя бы один адрес e-mail получателя.';
     17$PHPMAILER_LANG['instantiate']          = 'Невозможно запустить функцию mail().';
     18$PHPMAILER_LANG['provide_address']      = 'Пожалуйста, введите хотя бы один email-адрес получателя.';
    1919$PHPMAILER_LANG['mailer_not_supported'] = ' — почтовый сервер не поддерживается.';
    20 $PHPMAILER_LANG['recipients_failed']    = 'Ошибка SMTP: отправка по следующим адресам получателей не удалась: ';
     20$PHPMAILER_LANG['recipients_failed']    = 'Ошибка SMTP: не удалась отправка таким адресатам: ';
    2121$PHPMAILER_LANG['empty_message']        = 'Пустое сообщение';
    22 $PHPMAILER_LANG['invalid_address']      = 'Не отослано, неправильный формат email адреса: ';
     22$PHPMAILER_LANG['invalid_address']      = 'Не отправлено из-за неправильного формата email-адреса: ';
    2323$PHPMAILER_LANG['signing']              = 'Ошибка подписи: ';
    2424$PHPMAILER_LANG['smtp_connect_failed']  = 'Ошибка соединения с SMTP-сервером';
    2525$PHPMAILER_LANG['smtp_error']           = 'Ошибка SMTP-сервера: ';
    26 $PHPMAILER_LANG['variable_set']         = 'Невозможно установить или переустановить переменную: ';
     26$PHPMAILER_LANG['variable_set']         = 'Невозможно установить или сбросить переменную: ';
    2727$PHPMAILER_LANG['extension_missing']    = 'Расширение отсутствует: ';
  • _plugins_/facteur/trunk/lib/PHPMailer-6/language/phpmailer.lang-sk.php

    • Property svn:executable set to *
    r118850 r118851  
    44 * @package PHPMailer
    55 * @author Michal Tinka <michaltinka@gmail.com>
     6 * @author Peter Orlický <pcmanik91@gmail.com>
    67 */
    78
     
    2425$PHPMAILER_LANG['smtp_error']           = 'SMTP chyba serveru: ';
    2526$PHPMAILER_LANG['variable_set']         = 'Nemožno nastaviť alebo resetovať premennú: ';
    26 //$PHPMAILER_LANG['extension_missing']    = 'Extension missing: ';
     27$PHPMAILER_LANG['extension_missing']    = 'Chýba rozšírenie: ';
  • _plugins_/facteur/trunk/lib/PHPMailer-6/language/phpmailer.lang-sl.php

    • Property svn:executable set to *
    r118850 r118851  
    44 * @package PHPMailer
    55 * @author Klemen Tušar <techouse@gmail.com>
     6 * @author Filip Š <projects@filips.si>
    67 */
    78
    89$PHPMAILER_LANG['authenticate']         = 'SMTP napaka: Avtentikacija ni uspela.';
    9 $PHPMAILER_LANG['connect_host']         = 'SMTP napaka: Ne morem vzpostaviti povezave s SMTP gostiteljem.';
     10$PHPMAILER_LANG['connect_host']         = 'SMTP napaka: Vzpostavljanje povezave s SMTP gostiteljem ni uspelo.';
    1011$PHPMAILER_LANG['data_not_accepted']    = 'SMTP napaka: Strežnik zavrača podatke.';
    1112$PHPMAILER_LANG['empty_message']        = 'E-poštno sporočilo nima vsebine.';
     
    2425$PHPMAILER_LANG['smtp_error']           = 'Napaka SMTP strežnika: ';
    2526$PHPMAILER_LANG['variable_set']         = 'Ne morem nastaviti oz. ponastaviti spremenljivke: ';
    26 //$PHPMAILER_LANG['extension_missing']    = 'Extension missing: ';
     27$PHPMAILER_LANG['extension_missing']    = 'Manjkajoča razširitev: ';
  • _plugins_/facteur/trunk/lib/PHPMailer-6/language/phpmailer.lang-sr.php

    • Property svn:executable set to *
    r118850 r118851  
    44 * @package PHPMailer
    55 * @author Александар Јевремовић <ajevremovic@gmail.com>
     6 * @author Miloš Milanović <mmilanovic016@gmail.com>
    67 */
    78
    89$PHPMAILER_LANG['authenticate']         = 'SMTP грешка: аутентификација није успела.';
    9 $PHPMAILER_LANG['connect_host']         = 'SMTP грешка: није могуће повезивање са SMTP сервером.';
     10$PHPMAILER_LANG['connect_host']         = 'SMTP грешка: повезивање са SMTP сервером није успело.';
    1011$PHPMAILER_LANG['data_not_accepted']    = 'SMTP грешка: подаци нису прихваћени.';
    1112$PHPMAILER_LANG['empty_message']        = 'Садржај поруке је празан.';
    12 $PHPMAILER_LANG['encoding']             = 'Непознато кодовање: ';
     13$PHPMAILER_LANG['encoding']             = 'Непознато кодирање: ';
    1314$PHPMAILER_LANG['execute']              = 'Није могуће извршити наредбу: ';
    1415$PHPMAILER_LANG['file_access']          = 'Није могуће приступити датотеци: ';
     
    1718$PHPMAILER_LANG['recipients_failed']    = 'SMTP грешка: слање на следеће адресе није успело: ';
    1819$PHPMAILER_LANG['instantiate']          = 'Није могуће покренути mail функцију.';
    19 $PHPMAILER_LANG['invalid_address']      = 'Порука није послата због неисправне адресе: ';
     20$PHPMAILER_LANG['invalid_address']      = 'Порука није послата. Неисправна адреса: ';
    2021$PHPMAILER_LANG['mailer_not_supported'] = ' мејлер није подржан.';
    21 $PHPMAILER_LANG['provide_address']      = 'Потребно је задати најмање једну адресу.';
    22 $PHPMAILER_LANG['signing']              = 'Грешка приликом пријављивања: ';
     22$PHPMAILER_LANG['provide_address']      = 'Дефинишите бар једну адресу примаоца.';
     23$PHPMAILER_LANG['signing']              = 'Грешка приликом пријаве: ';
    2324$PHPMAILER_LANG['smtp_connect_failed']  = 'Повезивање са SMTP сервером није успело.';
    2425$PHPMAILER_LANG['smtp_error']           = 'Грешка SMTP сервера: ';
    25 $PHPMAILER_LANG['variable_set']         = 'Није могуће задати променљиву, нити је вратити уназад: ';
     26$PHPMAILER_LANG['variable_set']         = 'Није могуће задати нити ресетовати променљиву: ';
    2627$PHPMAILER_LANG['extension_missing']    = 'Недостаје проширење: ';
  • _plugins_/facteur/trunk/lib/PHPMailer-6/language/phpmailer.lang-sv.php

    • Property svn:executable set to *
  • _plugins_/facteur/trunk/lib/PHPMailer-6/language/phpmailer.lang-uk.php

    • Property svn:executable set to *
    r118850 r118851  
    88
    99$PHPMAILER_LANG['authenticate']         = 'Помилка SMTP: помилка авторизації.';
    10 $PHPMAILER_LANG['connect_host']         = 'Помилка SMTP: не вдається під\'єднатися до серверу SMTP.';
    11 $PHPMAILER_LANG['data_not_accepted']    = 'Помилка SMTP: дані не прийняті.';
    12 $PHPMAILER_LANG['encoding']             = 'Невідомий тип кодування: ';
     10$PHPMAILER_LANG['connect_host']         = 'Помилка SMTP: не вдається під\'єднатися до SMTP-серверу.';
     11$PHPMAILER_LANG['data_not_accepted']    = 'Помилка SMTP: дані не прийнято.';
     12$PHPMAILER_LANG['encoding']             = 'Невідоме кодування: ';
    1313$PHPMAILER_LANG['execute']              = 'Неможливо виконати команду: ';
    1414$PHPMAILER_LANG['file_access']          = 'Немає доступу до файлу: ';
    1515$PHPMAILER_LANG['file_open']            = 'Помилка файлової системи: не вдається відкрити файл: ';
    1616$PHPMAILER_LANG['from_failed']          = 'Невірна адреса відправника: ';
    17 $PHPMAILER_LANG['instantiate']          = 'Неможливо запустити функцію mail.';
    18 $PHPMAILER_LANG['provide_address']      = 'Будь-ласка, введіть хоча б одну адресу e-mail отримувача.';
     17$PHPMAILER_LANG['instantiate']          = 'Неможливо запустити функцію mail().';
     18$PHPMAILER_LANG['provide_address']      = 'Будь-ласка, введіть хоча б одну email-адресу отримувача.';
    1919$PHPMAILER_LANG['mailer_not_supported'] = ' - поштовий сервер не підтримується.';
    20 $PHPMAILER_LANG['recipients_failed']    = 'Помилка SMTP: відправлення наступним отримувачам не вдалося: ';
    21 $PHPMAILER_LANG['empty_message']        = 'Пусте тіло повідомлення';
    22 $PHPMAILER_LANG['invalid_address']      = 'Не відправлено, невірний формат адреси e-mail: ';
     20$PHPMAILER_LANG['recipients_failed']    = 'Помилка SMTP: не вдалося відправлення для таких отримувачів: ';
     21$PHPMAILER_LANG['empty_message']        = 'Пусте повідомлення';
     22$PHPMAILER_LANG['invalid_address']      = 'Не відправлено через невірний формат email-адреси: ';
    2323$PHPMAILER_LANG['signing']              = 'Помилка підпису: ';
    24 $PHPMAILER_LANG['smtp_connect_failed']  = 'Помилка з\'єднання із SMTP-сервером';
     24$PHPMAILER_LANG['smtp_connect_failed']  = 'Помилка з\'єднання з SMTP-сервером';
    2525$PHPMAILER_LANG['smtp_error']           = 'Помилка SMTP-сервера: ';
    26 $PHPMAILER_LANG['variable_set']         = 'Неможливо встановити або перевстановити змінну: ';
    27 //$PHPMAILER_LANG['extension_missing']    = 'Extension missing: ';
     26$PHPMAILER_LANG['variable_set']         = 'Неможливо встановити або скинути змінну: ';
     27$PHPMAILER_LANG['extension_missing']    = 'Розширення відсутнє: ';
  • _plugins_/facteur/trunk/lib/PHPMailer-6/language/phpmailer.lang-vi.php

    • Property svn:executable set to *
  • _plugins_/facteur/trunk/lib/PHPMailer-6/src/POP3.php

    r118850 r118851  
    22/**
    33 * PHPMailer POP-Before-SMTP Authentication Class.
    4  * PHP Version 5
    5  * @package PHPMailer
    6  * @link https://github.com/PHPMailer/PHPMailer/
    7  * @author Marcus Bointon (Synchro/coolbru) <phpmailer@synchromedia.co.uk>
    8  * @author Jim Jagielski (jimjag) <jimjag@gmail.com>
    9  * @author Andy Prevost (codeworxtech) <codeworxtech@users.sourceforge.net>
    10  * @author Brent R. Matzelle (original founder)
    11  * @copyright 2012 - 2014 Marcus Bointon
     4 * PHP Version 5.5.
     5 *
     6 * @see https://github.com/PHPMailer/PHPMailer/ The PHPMailer GitHub project
     7 *
     8 * @author    Marcus Bointon (Synchro/coolbru) <phpmailer@synchromedia.co.uk>
     9 * @author    Jim Jagielski (jimjag) <jimjag@gmail.com>
     10 * @author    Andy Prevost (codeworxtech) <codeworxtech@users.sourceforge.net>
     11 * @author    Brent R. Matzelle (original founder)
     12 * @copyright 2012 - 2019 Marcus Bointon
    1213 * @copyright 2010 - 2012 Jim Jagielski
    1314 * @copyright 2004 - 2009 Andy Prevost
    14  * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
    15  * @note This program is distributed in the hope that it will be useful - WITHOUT
     15 * @license   http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
     16 * @note      This program is distributed in the hope that it will be useful - WITHOUT
    1617 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
    1718 * FITNESS FOR A PARTICULAR PURPOSE.
    1819 */
    1920
     21namespace PHPMailer\PHPMailer;
     22
    2023/**
    2124 * PHPMailer POP-Before-SMTP Authentication Class.
    2225 * Specifically for PHPMailer to use for RFC1939 POP-before-SMTP authentication.
    23  * Does not support APOP.
    24  * @package PHPMailer
     26 * 1) This class does not support APOP authentication.
     27 * 2) Opening and closing lots of POP3 connections can be quite slow. If you need
     28 *   to send a batch of emails then just perform the authentication once at the start,
     29 *   and then loop through your mail sending script. Providing this process doesn't
     30 *   take longer than the verification period lasts on your POP3 server, you should be fine.
     31 * 3) This is really ancient technology; you should only need to use it to talk to very old systems.
     32 * 4) This POP3 class is deliberately lightweight and incomplete, implementing just
     33 *   enough to do authentication.
     34 *   If you want a more complete class there are other POP3 classes for PHP available.
     35 *
    2536 * @author Richard Davey (original author) <rich@corephp.co.uk>
    2637 * @author Marcus Bointon (Synchro/coolbru) <phpmailer@synchromedia.co.uk>
     
    3243    /**
    3344     * The POP3 PHPMailer Version number.
     45     *
    3446     * @var string
    35      * @access public
    36      */
    37     public $Version = '5.2.27';
     47     */
     48    const VERSION = '6.1.3';
    3849
    3950    /**
    4051     * Default POP3 port number.
    41      * @var integer
    42      * @access public
    43      */
    44     public $POP3_PORT = 110;
     52     *
     53     * @var int
     54     */
     55    const DEFAULT_PORT = 110;
    4556
    4657    /**
    4758     * Default timeout in seconds.
    48      * @var integer
    49      * @access public
    50      */
    51     public $POP3_TIMEOUT = 30;
    52 
    53     /**
    54      * POP3 Carriage Return + Line Feed.
     59     *
     60     * @var int
     61     */
     62    const DEFAULT_TIMEOUT = 30;
     63
     64    /**
     65     * Debug display level.
     66     * Options: 0 = no, 1+ = yes.
     67     *
     68     * @var int
     69     */
     70    public $do_debug = 0;
     71
     72    /**
     73     * POP3 mail server hostname.
     74     *
    5575     * @var string
    56      * @access public
    57      * @deprecated Use the constant instead
    58      */
    59     public $CRLF = "\r\n";
    60 
    61     /**
    62      * Debug display level.
    63      * Options: 0 = no, 1+ = yes
    64      * @var integer
    65      * @access public
    66      */
    67     public $do_debug = 0;
    68 
    69     /**
    70      * POP3 mail server hostname.
     76     */
     77    public $host;
     78
     79    /**
     80     * POP3 port number.
     81     *
     82     * @var int
     83     */
     84    public $port;
     85
     86    /**
     87     * POP3 Timeout Value in seconds.
     88     *
     89     * @var int
     90     */
     91    public $tval;
     92
     93    /**
     94     * POP3 username.
     95     *
    7196     * @var string
    72      * @access public
    73      */
    74     public $host;
    75 
    76     /**
    77      * POP3 port number.
    78      * @var integer
    79      * @access public
    80      */
    81     public $port;
    82 
    83     /**
    84      * POP3 Timeout Value in seconds.
    85      * @var integer
    86      * @access public
    87      */
    88     public $tval;
    89 
    90     /**
    91      * POP3 username
     97     */
     98    public $username;
     99
     100    /**
     101     * POP3 password.
     102     *
    92103     * @var string
    93      * @access public
    94      */
    95     public $username;
    96 
    97     /**
    98      * POP3 password.
    99      * @var string
    100      * @access public
    101104     */
    102105    public $password;
     
    104107    /**
    105108     * Resource handle for the POP3 connection socket.
     109     *
    106110     * @var resource
    107      * @access protected
    108111     */
    109112    protected $pop_conn;
     
    111114    /**
    112115     * Are we connected?
    113      * @var boolean
    114      * @access protected
     116     *
     117     * @var bool
    115118     */
    116119    protected $connected = false;
     
    118121    /**
    119122     * Error container.
     123     *
    120124     * @var array
    121      * @access protected
    122      */
    123     protected $errors = array();
    124 
    125     /**
    126      * Line break constant
    127      */
    128     const CRLF = "\r\n";
    129 
    130     /**
    131      * Simple static wrapper for all-in-one POP before SMTP
    132      * @param $host
    133      * @param integer|boolean $port The port number to connect to
    134      * @param integer|boolean $timeout The timeout value
    135      * @param string $username
    136      * @param string $password
    137      * @param integer $debug_level
    138      * @return boolean
     125     */
     126    protected $errors = [];
     127
     128    /**
     129     * Line break constant.
     130     */
     131    const LE = "\r\n";
     132
     133    /**
     134     * Simple static wrapper for all-in-one POP before SMTP.
     135     *
     136     * @param string   $host        The hostname to connect to
     137     * @param int|bool $port        The port number to connect to
     138     * @param int|bool $timeout     The timeout value
     139     * @param string   $username
     140     * @param string   $password
     141     * @param int      $debug_level
     142     *
     143     * @return bool
    139144     */
    140145    public static function popBeforeSmtp(
     
    146151        $debug_level = 0
    147152    ) {
    148         $pop = new POP3;
     153        $pop = new self();
     154
    149155        return $pop->authorise($host, $port, $timeout, $username, $password, $debug_level);
    150156    }
     
    154160     * A connect, login, disconnect sequence
    155161     * appropriate for POP-before SMTP authorisation.
    156      * @access public
    157      * @param string $host The hostname to connect to
    158      * @param integer|boolean $port The port number to connect to
    159      * @param integer|boolean $timeout The timeout value
    160      * @param string $username
    161      * @param string $password
    162      * @param integer $debug_level
    163      * @return boolean
     162     *
     163     * @param string   $host        The hostname to connect to
     164     * @param int|bool $port        The port number to connect to
     165     * @param int|bool $timeout     The timeout value
     166     * @param string   $username
     167     * @param string   $password
     168     * @param int      $debug_level
     169     *
     170     * @return bool
    164171     */
    165172    public function authorise($host, $port = false, $timeout = false, $username = '', $password = '', $debug_level = 0)
     
    168175        // If no port value provided, use default
    169176        if (false === $port) {
    170             $this->port = $this->POP3_PORT;
     177            $this->port = static::DEFAULT_PORT;
    171178        } else {
    172             $this->port = (integer)$port;
     179            $this->port = (int) $port;
    173180        }
    174181        // If no timeout value provided, use default
    175182        if (false === $timeout) {
    176             $this->tval = $this->POP3_TIMEOUT;
     183            $this->tval = static::DEFAULT_TIMEOUT;
    177184        } else {
    178             $this->tval = (integer)$timeout;
     185            $this->tval = (int) $timeout;
    179186        }
    180187        $this->do_debug = $debug_level;
     
    182189        $this->password = $password;
    183190        //  Reset the error log
    184         $this->errors = array();
     191        $this->errors = [];
    185192        //  connect
    186193        $result = $this->connect($this->host, $this->port, $this->tval);
     
    189196            if ($login_result) {
    190197                $this->disconnect();
     198
    191199                return true;
    192200            }
     
    194202        // We need to disconnect regardless of whether the login succeeded
    195203        $this->disconnect();
     204
    196205        return false;
    197206    }
     
    199208    /**
    200209     * Connect to a POP3 server.
    201      * @access public
    202      * @param string $host
    203      * @param integer|boolean $port
    204      * @param integer $tval
    205      * @return boolean
     210     *
     211     * @param string   $host
     212     * @param int|bool $port
     213     * @param int      $tval
     214     *
     215     * @return bool
    206216     */
    207217    public function connect($host, $port = false, $tval = 30)
     
    214224        //On Windows this will raise a PHP Warning error if the hostname doesn't exist.
    215225        //Rather than suppress it with @fsockopen, capture it cleanly instead
    216         set_error_handler(array($this, 'catchWarning'));
     226        set_error_handler([$this, 'catchWarning']);
    217227
    218228        if (false === $port) {
    219             $port = $this->POP3_PORT;
     229            $port = static::DEFAULT_PORT;
    220230        }
    221231
     
    234244        if (false === $this->pop_conn) {
    235245            //  It would appear not...
    236             $this->setError(array(
    237                 'error' => "Failed to connect to server $host on port $port",
    238                 'errno' => $errno,
    239                 'errstr' => $errstr
    240             ));
     246            $this->setError(
     247                "Failed to connect to server $host on port $port. errno: $errno; errstr: $errstr"
     248            );
     249
    241250            return false;
    242251        }
     
    251260            //  The connection is established and the POP3 server is talking
    252261            $this->connected = true;
     262
    253263            return true;
    254264        }
     265
    255266        return false;
    256267    }
     
    259270     * Log in to the POP3 server.
    260271     * Does not support APOP (RFC 2828, 4949).
    261      * @access public
     272     *
    262273     * @param string $username
    263274     * @param string $password
    264      * @return boolean
     275     *
     276     * @return bool
    265277     */
    266278    public function login($username = '', $password = '')
     
    277289
    278290        // Send the Username
    279         $this->sendString("USER $username" . self::CRLF);
     291        $this->sendString("USER $username" . static::LE);
    280292        $pop3_response = $this->getResponse();
    281293        if ($this->checkResponse($pop3_response)) {
    282294            // Send the Password
    283             $this->sendString("PASS $password" . self::CRLF);
     295            $this->sendString("PASS $password" . static::LE);
    284296            $pop3_response = $this->getResponse();
    285297            if ($this->checkResponse($pop3_response)) {
     
    287299            }
    288300        }
     301
    289302        return false;
    290303    }
     
    292305    /**
    293306     * Disconnect from the POP3 server.
    294      * @access public
    295307     */
    296308    public function disconnect()
     
    303315        } catch (Exception $e) {
    304316            //Do nothing
    305         };
     317        }
    306318    }
    307319
    308320    /**
    309321     * Get a response from the POP3 server.
    310      * $size is the maximum number of bytes to retrieve
    311      * @param integer $size
     322     *
     323     * @param int $size The maximum number of bytes to retrieve
     324     *
    312325     * @return string
    313      * @access protected
    314326     */
    315327    protected function getResponse($size = 128)
     
    317329        $response = fgets($this->pop_conn, $size);
    318330        if ($this->do_debug >= 1) {
    319             echo "Server -> Client: $response";
    320         }
     331            echo 'Server -> Client: ', $response;
     332        }
     333
    321334        return $response;
    322335    }
     
    324337    /**
    325338     * Send raw data to the POP3 server.
     339     *
    326340     * @param string $string
    327      * @return integer
    328      * @access protected
     341     *
     342     * @return int
    329343     */
    330344    protected function sendString($string)
     
    332346        if ($this->pop_conn) {
    333347            if ($this->do_debug >= 2) { //Show client messages when debug >= 2
    334                 echo "Client -> Server: $string";
     348                echo 'Client -> Server: ', $string;
    335349            }
     350
    336351            return fwrite($this->pop_conn, $string, strlen($string));
    337352        }
     353
    338354        return 0;
    339355    }
     
    342358     * Checks the POP3 server response.
    343359     * Looks for for +OK or -ERR.
     360     *
    344361     * @param string $string
    345      * @return boolean
    346      * @access protected
     362     *
     363     * @return bool
    347364     */
    348365    protected function checkResponse($string)
    349366    {
    350         if (substr($string, 0, 3) !== '+OK') {
    351             $this->setError(array(
    352                 'error' => "Server reported an error: $string",
    353                 'errno' => 0,
    354                 'errstr' => ''
    355             ));
     367        if (strpos($string, '+OK') !== 0) {
     368            $this->setError("Server reported an error: $string");
     369
    356370            return false;
    357         } else {
    358             return true;
    359         }
     371        }
     372
     373        return true;
    360374    }
    361375
     
    363377     * Add an error to the internal error store.
    364378     * Also display debug output if it's enabled.
    365      * @param $error
    366      * @access protected
     379     *
     380     * @param string $error
    367381     */
    368382    protected function setError($error)
     
    371385        if ($this->do_debug >= 1) {
    372386            echo '<pre>';
    373             foreach ($this->errors as $error) {
    374                 print_r($error);
     387            foreach ($this->errors as $e) {
     388                print_r($e);
    375389            }
    376390            echo '</pre>';
     
    380394    /**
    381395     * Get an array of error messages, if any.
     396     *
    382397     * @return array
    383398     */
     
    389404    /**
    390405     * POP3 connection error handler.
    391      * @param integer $errno
     406     *
     407     * @param int    $errno
    392408     * @param string $errstr
    393409     * @param string $errfile
    394      * @param integer $errline
    395      * @access protected
     410     * @param int    $errline
    396411     */
    397412    protected function catchWarning($errno, $errstr, $errfile, $errline)
    398413    {
    399         $this->setError(array(
    400             'error' => "Connecting to the POP3 server raised a PHP warning: ",
    401             'errno' => $errno,
    402             'errstr' => $errstr,
    403             'errfile' => $errfile,
    404             'errline' => $errline
    405         ));
     414        $this->setError(
     415            'Connecting to the POP3 server raised a PHP warning:' .
     416            "errno: $errno errstr: $errstr; errfile: $errfile; errline: $errline"
     417        );
    406418    }
    407419}
  • _plugins_/facteur/trunk/lib/PHPMailer-6/src/SMTP.php

    r118850 r118851  
    22/**
    33 * PHPMailer RFC821 SMTP email transport class.
    4  * PHP Version 5
    5  * @package PHPMailer
    6  * @link https://github.com/PHPMailer/PHPMailer/ The PHPMailer GitHub project
    7  * @author Marcus Bointon (Synchro/coolbru) <phpmailer@synchromedia.co.uk>
    8  * @author Jim Jagielski (jimjag) <jimjag@gmail.com>
    9  * @author Andy Prevost (codeworxtech) <codeworxtech@users.sourceforge.net>
    10  * @author Brent R. Matzelle (original founder)
    11  * @copyright 2014 Marcus Bointon
     4 * PHP Version 5.5.
     5 *
     6 * @see       https://github.com/PHPMailer/PHPMailer/ The PHPMailer GitHub project
     7 *
     8 * @author    Marcus Bointon (Synchro/coolbru) <phpmailer@synchromedia.co.uk>
     9 * @author    Jim Jagielski (jimjag) <jimjag@gmail.com>
     10 * @author    Andy Prevost (codeworxtech) <codeworxtech@users.sourceforge.net>
     11 * @author    Brent R. Matzelle (original founder)
     12 * @copyright 2012 - 2019 Marcus Bointon
    1213 * @copyright 2010 - 2012 Jim Jagielski
    1314 * @copyright 2004 - 2009 Andy Prevost
    14  * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
    15  * @note This program is distributed in the hope that it will be useful - WITHOUT
     15 * @license   http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
     16 * @note      This program is distributed in the hope that it will be useful - WITHOUT
    1617 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
    1718 * FITNESS FOR A PARTICULAR PURPOSE.
    1819 */
    1920
     21namespace PHPMailer\PHPMailer;
     22
    2023/**
    2124 * PHPMailer RFC821 SMTP email transport class.
    2225 * Implements RFC 821 SMTP commands and provides some utility methods for sending mail to an SMTP server.
    23  * @package PHPMailer
     26 *
    2427 * @author Chris Ryan
    2528 * @author Marcus Bointon <phpmailer@synchromedia.co.uk>
     
    2932    /**
    3033     * The PHPMailer SMTP version number.
     34     *
    3135     * @var string
    3236     */
    33     const VERSION = '5.2.27';
     37    const VERSION = '6.1.3';
    3438
    3539    /**
    3640     * SMTP line break constant.
     41     *
    3742     * @var string
    3843     */
    39     const CRLF = "\r\n";
     44    const LE = "\r\n";
    4045
    4146    /**
    4247     * The SMTP port to use if one is not specified.
    43      * @var integer
    44      */
    45     const DEFAULT_SMTP_PORT = 25;
    46 
    47     /**
    48      * The maximum line length allowed by RFC 2822 section 2.1.1
    49      * @var integer
     48     *
     49     * @var int
     50     */
     51    const DEFAULT_PORT = 25;
     52
     53    /**
     54     * The maximum line length allowed by RFC 5321 section 4.5.3.1.6,
     55     * *excluding* a trailing CRLF break.
     56     *
     57     * @see https://tools.ietf.org/html/rfc5321#section-4.5.3.1.6
     58     *
     59     * @var int
    5060     */
    5161    const MAX_LINE_LENGTH = 998;
    5262
    5363    /**
    54      * Debug level for no output
     64     * The maximum line length allowed for replies in RFC 5321 section 4.5.3.1.5,
     65     * *including* a trailing CRLF line break.
     66     *
     67     * @see https://tools.ietf.org/html/rfc5321#section-4.5.3.1.5
     68     *
     69     * @var int
     70     */
     71    const MAX_REPLY_LENGTH = 512;
     72
     73    /**
     74     * Debug level for no output.
     75     *
     76     * @var int
    5577     */
    5678    const DEBUG_OFF = 0;
    5779
    5880    /**
    59      * Debug level to show client -> server messages
     81     * Debug level to show client -> server messages.
     82     *
     83     * @var int
    6084     */
    6185    const DEBUG_CLIENT = 1;
    6286
    6387    /**
    64      * Debug level to show client -> server and server -> client messages
     88     * Debug level to show client -> server and server -> client messages.
     89     *
     90     * @var int
    6591     */
    6692    const DEBUG_SERVER = 2;
    6793
    6894    /**
    69      * Debug level to show connection status, client -> server and server -> client messages
     95     * Debug level to show connection status, client -> server and server -> client messages.
     96     *
     97     * @var int
    7098     */
    7199    const DEBUG_CONNECTION = 3;
    72100
    73101    /**
    74      * Debug level to show all messages
     102     * Debug level to show all messages.
     103     *
     104     * @var int
    75105     */
    76106    const DEBUG_LOWLEVEL = 4;
    77 
    78     /**
    79      * The PHPMailer SMTP Version number.
    80      * @var string
    81      * @deprecated Use the `VERSION` constant instead
    82      * @see SMTP::VERSION
    83      */
    84     public $Version = '5.2.27';
    85 
    86     /**
    87      * SMTP server port number.
    88      * @var integer
    89      * @deprecated This is only ever used as a default value, so use the `DEFAULT_SMTP_PORT` constant instead
    90      * @see SMTP::DEFAULT_SMTP_PORT
    91      */
    92     public $SMTP_PORT = 25;
    93 
    94     /**
    95      * SMTP reply line ending.
    96      * @var string
    97      * @deprecated Use the `CRLF` constant instead
    98      * @see SMTP::CRLF
    99      */
    100     public $CRLF = "\r\n";
    101107
    102108    /**
     
    107113     * * self::DEBUG_SERVER (`2`) Client commands and server responses
    108114     * * self::DEBUG_CONNECTION (`3`) As DEBUG_SERVER plus connection status
    109      * * self::DEBUG_LOWLEVEL (`4`) Low-level data output, all messages
    110      * @var integer
     115     * * self::DEBUG_LOWLEVEL (`4`) Low-level data output, all messages.
     116     *
     117     * @var int
    111118     */
    112119    public $do_debug = self::DEBUG_OFF;
     
    118125     * * `html` Output escaped, line breaks converted to `<br>`, appropriate for browser output
    119126     * * `error_log` Output to error log as configured in php.ini
    120      *
    121127     * Alternatively, you can provide a callable expecting two params: a message string and the debug level:
    122      * <code>
     128     *
     129     * ```php
    123130     * $smtp->Debugoutput = function($str, $level) {echo "debug level $level; message: $str";};
    124      * </code>
    125      * @var string|callable
     131     * ```
     132     *
     133     * Alternatively, you can pass in an instance of a PSR-3 compatible logger, though only `debug`
     134     * level output is used:
     135     *
     136     * ```php
     137     * $mail->Debugoutput = new myPsr3Logger;
     138     * ```
     139     *
     140     * @var string|callable|\Psr\Log\LoggerInterface
    126141     */
    127142    public $Debugoutput = 'echo';
     
    129144    /**
    130145     * Whether to use VERP.
    131      * @link http://en.wikipedia.org/wiki/Variable_envelope_return_path
    132      * @link http://www.postfix.org/VERP_README.html Info on VERP
    133      * @var boolean
     146     *
     147     * @see http://en.wikipedia.org/wiki/Variable_envelope_return_path
     148     * @see http://www.postfix.org/VERP_README.html Info on VERP
     149     *
     150     * @var bool
    134151     */
    135152    public $do_verp = false;
     
    137154    /**
    138155     * The timeout value for connection, in seconds.
    139      * Default of 5 minutes (300sec) is from RFC2821 section 4.5.3.2
     156     * Default of 5 minutes (300sec) is from RFC2821 section 4.5.3.2.
    140157     * This needs to be quite high to function correctly with hosts using greetdelay as an anti-spam measure.
    141      * @link http://tools.ietf.org/html/rfc2821#section-4.5.3.2
    142      * @var integer
     158     *
     159     * @see http://tools.ietf.org/html/rfc2821#section-4.5.3.2
     160     *
     161     * @var int
    143162     */
    144163    public $Timeout = 300;
     
    146165    /**
    147166     * How long to wait for commands to complete, in seconds.
    148      * Default of 5 minutes (300sec) is from RFC2821 section 4.5.3.2
    149      * @var integer
     167     * Default of 5 minutes (300sec) is from RFC2821 section 4.5.3.2.
     168     *
     169     * @var int
    150170     */
    151171    public $Timelimit = 300;
    152172
    153173    /**
    154      * @var array Patterns to extract an SMTP transaction id from reply to a DATA command.
     174     * Patterns to extract an SMTP transaction id from reply to a DATA command.
    155175     * The first capture group in each regex will be used as the ID.
    156      */
    157     protected $smtp_transaction_id_patterns = array(
    158         'exim' => '/[0-9]{3} OK id=(.*)/',
    159         'sendmail' => '/[0-9]{3} 2.0.0 (.*) Message/',
    160         'postfix' => '/[0-9]{3} 2.0.0 Ok: queued as (.*)/'
    161     );
    162 
    163     /**
    164      * @var string The last transaction ID issued in response to a DATA command,
    165      * if one was detected
     176     * MS ESMTP returns the message ID, which may not be correct for internal tracking.
     177     *
     178     * @var string[]
     179     */
     180    protected $smtp_transaction_id_patterns = [
     181        'exim' => '/[\d]{3} OK id=(.*)/',
     182        'sendmail' => '/[\d]{3} 2.0.0 (.*) Message/',
     183        'postfix' => '/[\d]{3} 2.0.0 Ok: queued as (.*)/',
     184        'Microsoft_ESMTP' => '/[0-9]{3} 2.[\d].0 (.*)@(?:.*) Queued mail for delivery/',
     185        'Amazon_SES' => '/[\d]{3} Ok (.*)/',
     186        'SendGrid' => '/[\d]{3} Ok: queued as (.*)/',
     187        'CampaignMonitor' => '/[\d]{3} 2.0.0 OK:([a-zA-Z\d]{48})/',
     188    ];
     189
     190    /**
     191     * The last transaction ID issued in response to a DATA command,
     192     * if one was detected.
     193     *
     194     * @var string|bool|null
    166195     */
    167196    protected $last_smtp_transaction_id;
     
    169198    /**
    170199     * The socket for the server connection.
    171      * @var resource
     200     *
     201     * @var ?resource
    172202     */
    173203    protected $smtp_conn;
     
    175205    /**
    176206     * Error information, if any, for the last SMTP command.
     207     *
    177208     * @var array
    178209     */
    179     protected $error = array(
     210    protected $error = [
    180211        'error' => '',
    181212        'detail' => '',
    182213        'smtp_code' => '',
    183         'smtp_code_ex' => ''
    184     );
     214        'smtp_code_ex' => '',
     215    ];
    185216
    186217    /**
    187218     * The reply the server sent to us for HELO.
    188219     * If null, no HELO string has yet been received.
     220     *
    189221     * @var string|null
    190222     */
    191     protected $helo_rply = null;
     223    protected $helo_rply;
    192224
    193225    /**
     
    198230     * Other values can be boolean TRUE or an array containing extension options.
    199231     * If null, no HELO/EHLO string has yet been received.
     232     *
    200233     * @var array|null
    201234     */
    202     protected $server_caps = null;
     235    protected $server_caps;
    203236
    204237    /**
    205238     * The most recent reply received from the server.
     239     *
    206240     * @var string
    207241     */
     
    210244    /**
    211245     * Output debugging info via a user-selected method.
     246     *
     247     * @param string $str   Debug string to output
     248     * @param int    $level The debug level of this message; see DEBUG_* constants
     249     *
    212250     * @see SMTP::$Debugoutput
    213251     * @see SMTP::$do_debug
    214      * @param string $str Debug string to output
    215      * @param integer $level The debug level of this message; see DEBUG_* constants
    216      * @return void
    217252     */
    218253    protected function edebug($str, $level = 0)
     
    221256            return;
    222257        }
     258        //Is this a PSR-3 logger?
     259        if ($this->Debugoutput instanceof \Psr\Log\LoggerInterface) {
     260            $this->Debugoutput->debug($str);
     261
     262            return;
     263        }
    223264        //Avoid clash with built-in function names
    224         if (!in_array($this->Debugoutput, array('error_log', 'html', 'echo')) and is_callable($this->Debugoutput)) {
     265        if (is_callable($this->Debugoutput) && !in_array($this->Debugoutput, ['error_log', 'html', 'echo'])) {
    225266            call_user_func($this->Debugoutput, $str, $level);
     267
    226268            return;
    227269        }
     
    233275            case 'html':
    234276                //Cleans up output a bit for a better looking, HTML-safe output
    235                 echo gmdate('Y-m-d H:i:s') . ' ' . htmlentities(
     277                echo gmdate('Y-m-d H:i:s'), ' ', htmlentities(
    236278                    preg_replace('/[\r\n]+/', '', $str),
    237279                    ENT_QUOTES,
    238280                    'UTF-8'
    239                 ) . "<br>\n";
     281                ), "<br>\n";
    240282                break;
    241283            case 'echo':
    242284            default:
    243285                //Normalize line breaks
    244                 $str = preg_replace('/(\r\n|\r|\n)/ms', "\n", $str);
    245                 echo gmdate('Y-m-d H:i:s') . "\t" . str_replace(
    246                     "\n",
    247                     "\n                   \t                  ",
    248                     trim($str)
    249                 ) . "\n";
     286                $str = preg_replace('/\r\n|\r/m', "\n", $str);
     287                echo gmdate('Y-m-d H:i:s'),
     288                "\t",
     289                    //Trim trailing space
     290                trim(
     291                    //Indent for readability, except for trailing break
     292                    str_replace(
     293                        "\n",
     294                        "\n                   \t                  ",
     295                        trim($str)
     296                    )
     297                ),
     298                "\n";
    250299        }
    251300    }
     
    253302    /**
    254303     * Connect to an SMTP server.
    255      * @param string $host SMTP server IP or host name
    256      * @param integer $port The port number to connect to
    257      * @param integer $timeout How long to wait for the connection to open
    258      * @param array $options An array of options for stream_context_create()
    259      * @access public
    260      * @return boolean
    261      */
    262     public function connect($host, $port = null, $timeout = 30, $options = array())
     304     *
     305     * @param string $host    SMTP server IP or host name
     306     * @param int    $port    The port number to connect to
     307     * @param int    $timeout How long to wait for the connection to open
     308     * @param array  $options An array of options for stream_context_create()
     309     *
     310     * @return bool
     311     */
     312    public function connect($host, $port = null, $timeout = 30, $options = [])
    263313    {
    264314        static $streamok;
    265315        //This is enabled by default since 5.0.0 but some providers disable it
    266316        //Check this once and cache the result
    267         if (is_null($streamok)) {
     317        if (null === $streamok) {
    268318            $streamok = function_exists('stream_socket_client');
    269319        }
     
    274324            // Already connected, generate error
    275325            $this->setError('Already connected to a server');
     326
    276327            return false;
    277328        }
    278329        if (empty($port)) {
    279             $port = self::DEFAULT_SMTP_PORT;
     330            $port = self::DEFAULT_PORT;
    280331        }
    281332        // Connect to the SMTP server
    282333        $this->edebug(
    283334            "Connection: opening to $host:$port, timeout=$timeout, options=" .
    284             var_export($options, true),
     335            (count($options) > 0 ? var_export($options, true) : 'array()'),
    285336            self::DEBUG_CONNECTION
    286337        );
     
    289340        if ($streamok) {
    290341            $socket_context = stream_context_create($options);
    291             set_error_handler(array($this, 'errorHandler'));
     342            set_error_handler([$this, 'errorHandler']);
    292343            $this->smtp_conn = stream_socket_client(
    293                 $host . ":" . $port,
     344                $host . ':' . $port,
    294345                $errno,
    295346                $errstr,
     
    302353            //Fall back to fsockopen which should work in more places, but is missing some features
    303354            $this->edebug(
    304                 "Connection: stream_socket_client not available, falling back to fsockopen",
     355                'Connection: stream_socket_client not available, falling back to fsockopen',
    305356                self::DEBUG_CONNECTION
    306357            );
    307             set_error_handler(array($this, 'errorHandler'));
     358            set_error_handler([$this, 'errorHandler']);
    308359            $this->smtp_conn = fsockopen(
    309360                $host,
     
    319370            $this->setError(
    320371                'Failed to connect to server',
    321                 $errno,
     372                '',
     373                (string) $errno,
    322374                $errstr
    323375            );
     
    327379                self::DEBUG_CLIENT
    328380            );
     381
    329382            return false;
    330383        }
     
    332385        // SMTP server can take longer to respond, give longer timeout for first read
    333386        // Windows does not have support for this timeout function
    334         if (substr(PHP_OS, 0, 3) != 'WIN') {
    335             $max = ini_get('max_execution_time');
     387        if (strpos(PHP_OS, 'WIN') !== 0) {
     388            $max = (int) ini_get('max_execution_time');
    336389            // Don't bother if unlimited
    337             if ($max != 0 && $timeout > $max) {
     390            if (0 !== $max && $timeout > $max) {
    338391                @set_time_limit($timeout);
    339392            }
     
    343396        $announce = $this->get_lines();
    344397        $this->edebug('SERVER -> CLIENT: ' . $announce, self::DEBUG_SERVER);
     398
    345399        return true;
    346400    }
     
    348402    /**
    349403     * Initiate a TLS (encrypted) session.
    350      * @access public
    351      * @return boolean
     404     *
     405     * @return bool
    352406     */
    353407    public function startTLS()
     
    368422
    369423        // Begin encrypted connection
    370         set_error_handler(array($this, 'errorHandler'));
     424        set_error_handler([$this, 'errorHandler']);
    371425        $crypto_ok = stream_socket_enable_crypto(
    372426            $this->smtp_conn,
     
    375429        );
    376430        restore_error_handler();
    377         return $crypto_ok;
     431
     432        return (bool) $crypto_ok;
    378433    }
    379434
     
    381436     * Perform SMTP authentication.
    382437     * Must be run after hello().
    383      * @see hello()
     438     *
     439     * @see    hello()
     440     *
    384441     * @param string $username The user name
    385442     * @param string $password The password
    386      * @param string $authtype The auth type (PLAIN, LOGIN, NTLM, CRAM-MD5, XOAUTH2)
    387      * @param string $realm The auth realm for NTLM
    388      * @param string $workstation The auth workstation for NTLM
    389      * @param null|OAuth $OAuth An optional OAuth instance (@see PHPMailerOAuth)
    390      * @return bool True if successfully authenticated.* @access public
     443     * @param string $authtype The auth type (CRAM-MD5, PLAIN, LOGIN, XOAUTH2)
     444     * @param OAuth  $OAuth    An optional OAuth instance for XOAUTH2 authentication
     445     *
     446     * @return bool True if successfully authenticated
    391447     */
    392448    public function authenticate(
     
    394450        $password,
    395451        $authtype = null,
    396         $realm = '',
    397         $workstation = '',
    398452        $OAuth = null
    399453    ) {
    400454        if (!$this->server_caps) {
    401455            $this->setError('Authentication is not allowed before HELO/EHLO');
     456
    402457            return false;
    403458        }
     
    409464                // 'at this stage' means that auth may be allowed after the stage changes
    410465                // e.g. after STARTTLS
     466
    411467                return false;
    412468            }
    413469
    414             self::edebug('Auth method requested: ' . ($authtype ? $authtype : 'UNKNOWN'), self::DEBUG_LOWLEVEL);
    415             self::edebug(
     470            $this->edebug('Auth method requested: ' . ($authtype ?: 'UNSPECIFIED'), self::DEBUG_LOWLEVEL);
     471            $this->edebug(
    416472                'Auth methods available on the server: ' . implode(',', $this->server_caps['AUTH']),
    417473                self::DEBUG_LOWLEVEL
    418474            );
    419475
     476            //If we have requested a specific auth type, check the server supports it before trying others
     477            if (null !== $authtype && !in_array($authtype, $this->server_caps['AUTH'], true)) {
     478                $this->edebug('Requested auth method not available: ' . $authtype, self::DEBUG_LOWLEVEL);
     479                $authtype = null;
     480            }
     481
    420482            if (empty($authtype)) {
    421                 foreach (array('CRAM-MD5', 'LOGIN', 'PLAIN', 'NTLM', 'XOAUTH2') as $method) {
    422                     if (in_array($method, $this->server_caps['AUTH'])) {
     483                //If no auth mechanism is specified, attempt to use these, in this order
     484                //Try CRAM-MD5 first as it's more secure than the others
     485                foreach (['CRAM-MD5', 'LOGIN', 'PLAIN', 'XOAUTH2'] as $method) {
     486                    if (in_array($method, $this->server_caps['AUTH'], true)) {
    423487                        $authtype = $method;
    424488                        break;
     
    427491                if (empty($authtype)) {
    428492                    $this->setError('No supported authentication methods found');
     493
    429494                    return false;
    430495                }
    431                 self::edebug('Auth method selected: ' . $authtype, self::DEBUG_LOWLEVEL);
    432             }
    433 
    434             if (!in_array($authtype, $this->server_caps['AUTH'])) {
     496                $this->edebug('Auth method selected: ' . $authtype, self::DEBUG_LOWLEVEL);
     497            }
     498
     499            if (!in_array($authtype, $this->server_caps['AUTH'], true)) {
    435500                $this->setError("The requested authentication method \"$authtype\" is not supported by the server");
     501
    436502                return false;
    437503            }
     
    460526                    return false;
    461527                }
    462                 if (!$this->sendCommand("Username", base64_encode($username), 334)) {
     528                if (!$this->sendCommand('Username', base64_encode($username), 334)) {
    463529                    return false;
    464530                }
    465                 if (!$this->sendCommand("Password", base64_encode($password), 235)) {
     531                if (!$this->sendCommand('Password', base64_encode($password), 235)) {
    466532                    return false;
    467533                }
    468534                break;
    469             case 'XOAUTH2':
    470                 //If the OAuth Instance is not set. Can be a case when PHPMailer is used
    471                 //instead of PHPMailerOAuth
    472                 if (is_null($OAuth)) {
    473                     return false;
    474                 }
    475                 $oauth = $OAuth->getOauth64();
    476 
    477                 // Start authentication
    478                 if (!$this->sendCommand('AUTH', 'AUTH XOAUTH2 ' . $oauth, 235)) {
    479                     return false;
    480                 }
    481                 break;
    482             case 'NTLM':
    483                 /*
    484                  * ntlm_sasl_client.php
    485                  * Bundled with Permission
    486                  *
    487                  * How to telnet in windows:
    488                  * http://technet.microsoft.com/en-us/library/aa995718%28EXCHG.65%29.aspx
    489                  * PROTOCOL Docs http://curl.haxx.se/rfc/ntlm.html#ntlmSmtpAuthentication
    490                  */
    491                 require_once 'extras/ntlm_sasl_client.php';
    492                 $temp = new stdClass;
    493                 $ntlm_client = new ntlm_sasl_client_class;
    494                 //Check that functions are available
    495                 if (!$ntlm_client->initialize($temp)) {
    496                     $this->setError($temp->error);
    497                     $this->edebug(
    498                         'You need to enable some modules in your php.ini file: '
    499                         . $this->error['error'],
    500                         self::DEBUG_CLIENT
    501                     );
    502                     return false;
    503                 }
    504                 //msg1
    505                 $msg1 = $ntlm_client->typeMsg1($realm, $workstation); //msg1
    506 
    507                 if (!$this->sendCommand(
    508                     'AUTH NTLM',
    509                     'AUTH NTLM ' . base64_encode($msg1),
    510                     334
    511                 )
    512                 ) {
    513                     return false;
    514                 }
    515                 //Though 0 based, there is a white space after the 3 digit number
    516                 //msg2
    517                 $challenge = substr($this->last_reply, 3);
    518                 $challenge = base64_decode($challenge);
    519                 $ntlm_res = $ntlm_client->NTLMResponse(
    520                     substr($challenge, 24, 8),
    521                     $password
    522                 );
    523                 //msg3
    524                 $msg3 = $ntlm_client->typeMsg3(
    525                     $ntlm_res,
    526                     $username,
    527                     $realm,
    528                     $workstation
    529                 );
    530                 // send encoded username
    531                 return $this->sendCommand('Username', base64_encode($msg3), 235);
    532535            case 'CRAM-MD5':
    533536                // Start authentication
     
    543546                // send encoded credentials
    544547                return $this->sendCommand('Username', base64_encode($response), 235);
     548            case 'XOAUTH2':
     549                //The OAuth instance must be set up prior to requesting auth.
     550                if (null === $OAuth) {
     551                    return false;
     552                }
     553                $oauth = $OAuth->getOauth64();
     554
     555                // Start authentication
     556                if (!$this->sendCommand('AUTH', 'AUTH XOAUTH2 ' . $oauth, 235)) {
     557                    return false;
     558                }
     559                break;
    545560            default:
    546561                $this->setError("Authentication method \"$authtype\" is not supported");
     562
    547563                return false;
    548564        }
     565
    549566        return true;
    550567    }
     
    553570     * Calculate an MD5 HMAC hash.
    554571     * Works like hash_hmac('md5', $data, $key)
    555      * in case that function is not available
     572     * in case that function is not available.
     573     *
    556574     * @param string $data The data to hash
    557      * @param string $key The key to hash with
    558      * @access protected
     575     * @param string $key  The key to hash with
     576     *
    559577     * @return string
    560578     */
     
    588606    /**
    589607     * Check connection state.
    590      * @access public
    591      * @return boolean True if connected.
     608     *
     609     * @return bool True if connected
    592610     */
    593611    public function connected()
     
    602620                );
    603621                $this->close();
     622
    604623                return false;
    605624            }
     625
    606626            return true; // everything looks good
    607627        }
     628
    608629        return false;
    609630    }
     
    612633     * Close the socket and clean up the state of the class.
    613634     * Don't use this function without first trying to use QUIT.
     635     *
    614636     * @see quit()
    615      * @access public
    616      * @return void
    617637     */
    618638    public function close()
     
    635655     * that is to be send with the headers. Each header needs to be
    636656     * on a single line followed by a <CRLF> with the message headers
    637      * and the message body being separated by and additional <CRLF>.
    638      * Implements rfc 821: DATA <CRLF>
     657     * and the message body being separated by an additional <CRLF>.
     658     * Implements RFC 821: DATA <CRLF>.
     659     *
    639660     * @param string $msg_data Message data to send
    640      * @access public
    641      * @return boolean
     661     *
     662     * @return bool
    642663     */
    643664    public function data($msg_data)
     
    649670
    650671        /* The server is ready to accept data!
    651          * According to rfc821 we should not send more than 1000 characters on a single line (including the CRLF)
     672         * According to rfc821 we should not send more than 1000 characters on a single line (including the LE)
    652673         * so we will break the data up into lines by \r and/or \n then if needed we will break each of those into
    653674         * smaller lines to fit within the limit.
     
    657678
    658679        // Normalize line breaks before exploding
    659         $lines = explode("\n", str_replace(array("\r\n", "\r"), "\n", $msg_data));
     680        $lines = explode("\n", str_replace(["\r\n", "\r"], "\n", $msg_data));
    660681
    661682        /* To distinguish between a complete RFC822 message and a plain message body, we check if the first field
     
    671692
    672693        foreach ($lines as $line) {
    673             $lines_out = array();
    674             if ($in_headers and $line == '') {
     694            $lines_out = [];
     695            if ($in_headers && $line === '') {
    675696                $in_headers = false;
    676697            }
     
    703724            foreach ($lines_out as $line_out) {
    704725                //RFC2821 section 4.5.2
    705                 if (!empty($line_out) and $line_out[0] == '.') {
     726                if (!empty($line_out) && $line_out[0] === '.') {
    706727                    $line_out = '.' . $line_out;
    707728                }
    708                 $this->client_send($line_out . self::CRLF);
     729                $this->client_send($line_out . static::LE, 'DATA');
    709730            }
    710731        }
     
    713734        //Increase timelimit for end of DATA command
    714735        $savetimelimit = $this->Timelimit;
    715         $this->Timelimit = $this->Timelimit * 2;
     736        $this->Timelimit *= 2;
    716737        $result = $this->sendCommand('DATA END', '.', 250);
    717738        $this->recordLastTransactionID();
    718739        //Restore timelimit
    719740        $this->Timelimit = $savetimelimit;
     741
    720742        return $result;
    721743    }
     
    727749     * Implements RFC 821: HELO <SP> <domain> <CRLF>
    728750     * and RFC 2821 EHLO.
     751     *
    729752     * @param string $host The host name or IP to connect to
    730      * @access public
    731      * @return boolean
     753     *
     754     * @return bool
    732755     */
    733756    public function hello($host = '')
    734757    {
    735758        //Try extended hello first (RFC 2821)
    736         return (boolean)($this->sendHello('EHLO', $host) or $this->sendHello('HELO', $host));
     759        return $this->sendHello('EHLO', $host) or $this->sendHello('HELO', $host);
    737760    }
    738761
    739762    /**
    740763     * Send an SMTP HELO or EHLO command.
    741      * Low-level implementation used by hello()
     764     * Low-level implementation used by hello().
     765     *
     766     * @param string $hello The HELO string
     767     * @param string $host  The hostname to say we are
     768     *
     769     * @return bool
     770     *
    742771     * @see hello()
    743      * @param string $hello The HELO string
    744      * @param string $host The hostname to say we are
    745      * @access protected
    746      * @return boolean
    747772     */
    748773    protected function sendHello($hello, $host)
     
    755780            $this->server_caps = null;
    756781        }
     782
    757783        return $noerror;
    758784    }
     
    761787     * Parse a reply to HELO/EHLO command to discover server extensions.
    762788     * In case of HELO, the only parameter that can be discovered is a server name.
    763      * @access protected
    764      * @param string $type - 'HELO' or 'EHLO'
     789     *
     790     * @param string $type `HELO` or `EHLO`
    765791     */
    766792    protected function parseHelloFields($type)
    767793    {
    768         $this->server_caps = array();
     794        $this->server_caps = [];
    769795        $lines = explode("\n", $this->helo_rply);
    770796
     
    788814                        case 'AUTH':
    789815                            if (!is_array($fields)) {
    790                                 $fields = array();
     816                                $fields = [];
    791817                            }
    792818                            break;
     
    806832     * the mail transaction is started and then one or more recipient
    807833     * commands may be called followed by a data command.
    808      * Implements rfc 821: MAIL <SP> FROM:<reverse-path> <CRLF>
     834     * Implements RFC 821: MAIL <SP> FROM:<reverse-path> <CRLF>.
     835     *
    809836     * @param string $from Source address of this message
    810      * @access public
    811      * @return boolean
     837     *
     838     * @return bool
    812839     */
    813840    public function mail($from)
    814841    {
    815842        $useVerp = ($this->do_verp ? ' XVERP' : '');
     843
    816844        return $this->sendCommand(
    817845            'MAIL FROM',
     
    824852     * Send an SMTP QUIT command.
    825853     * Closes the socket if there is no error or the $close_on_error argument is true.
    826      * Implements from rfc 821: QUIT <CRLF>
    827      * @param boolean $close_on_error Should the connection close if an error occurs?
    828      * @access public
    829      * @return boolean
     854     * Implements from RFC 821: QUIT <CRLF>.
     855     *
     856     * @param bool $close_on_error Should the connection close if an error occurs?
     857     *
     858     * @return bool
    830859     */
    831860    public function quit($close_on_error = true)
     
    833862        $noerror = $this->sendCommand('QUIT', 'QUIT', 221);
    834863        $err = $this->error; //Save any error
    835         if ($noerror or $close_on_error) {
     864        if ($noerror || $close_on_error) {
    836865            $this->close();
    837866            $this->error = $err; //Restore any error from the quit command
    838867        }
     868
    839869        return $noerror;
    840870    }
     
    844874     * Sets the TO argument to $toaddr.
    845875     * Returns true if the recipient was accepted false if it was rejected.
    846      * Implements from rfc 821: RCPT <SP> TO:<forward-path> <CRLF>
     876     * Implements from RFC 821: RCPT <SP> TO:<forward-path> <CRLF>.
     877     *
    847878     * @param string $address The address the message is being sent to
    848      * @access public
    849      * @return boolean
    850      */
    851     public function recipient($address)
    852     {
     879     * @param string $dsn     Comma separated list of DSN notifications. NEVER, SUCCESS, FAILURE
     880     *                        or DELAY. If you specify NEVER all other notifications are ignored.
     881     *
     882     * @return bool
     883     */
     884    public function recipient($address, $dsn = '')
     885    {
     886        if (empty($dsn)) {
     887            $rcpt = 'RCPT TO:<' . $address . '>';
     888        } else {
     889            $dsn = strtoupper($dsn);
     890            $notify = [];
     891
     892            if (strpos($dsn, 'NEVER') !== false) {
     893                $notify[] = 'NEVER';
     894            } else {
     895                foreach (['SUCCESS', 'FAILURE', 'DELAY'] as $value) {
     896                    if (strpos($dsn, $value) !== false) {
     897                        $notify[] = $value;
     898                    }
     899                }
     900            }
     901
     902            $rcpt = 'RCPT TO:<' . $address . '> NOTIFY=' . implode(',', $notify);
     903        }
     904
    853905        return $this->sendCommand(
    854906            'RCPT TO',
    855             'RCPT TO:<' . $address . '>',
    856             array(250, 251)
     907            $rcpt,
     908            [250, 251]
    857909        );
    858910    }
     
    861913     * Send an SMTP RSET command.
    862914     * Abort any transaction that is currently in progress.
    863      * Implements rfc 821: RSET <CRLF>
    864      * @access public
    865      * @return boolean True on success.
     915     * Implements RFC 821: RSET <CRLF>.
     916     *
     917     * @return bool True on success
    866918     */
    867919    public function reset()
     
    872924    /**
    873925     * Send a command to an SMTP server and check its return code.
    874      * @param string $command The command name - not sent to the server
    875      * @param string $commandstring The actual command to send
    876      * @param integer|array $expect One or more expected integer success codes
    877      * @access protected
    878      * @return boolean True on success.
     926     *
     927     * @param string    $command       The command name - not sent to the server
     928     * @param string    $commandstring The actual command to send
     929     * @param int|array $expect        One or more expected integer success codes
     930     *
     931     * @return bool True on success
    879932     */
    880933    protected function sendCommand($command, $commandstring, $expect)
     
    882935        if (!$this->connected()) {
    883936            $this->setError("Called $command without being connected");
     937
    884938            return false;
    885939        }
    886940        //Reject line breaks in all commands
    887         if (strpos($commandstring, "\n") !== false or strpos($commandstring, "\r") !== false) {
     941        if ((strpos($commandstring, "\n") !== false) || (strpos($commandstring, "\r") !== false)) {
    888942            $this->setError("Command '$command' contained line breaks");
     943
    889944            return false;
    890945        }
    891         $this->client_send($commandstring . self::CRLF);
     946        $this->client_send($commandstring . static::LE, $command);
    892947
    893948        $this->last_reply = $this->get_lines();
    894949        // Fetch SMTP code and possible error code explanation
    895         $matches = array();
    896         if (preg_match("/^([0-9]{3})[ -](?:([0-9]\\.[0-9]\\.[0-9]) )?/", $this->last_reply, $matches)) {
    897             $code = $matches[1];
     950        $matches = [];
     951        if (preg_match('/^([\d]{3})[ -](?:([\d]\\.[\d]\\.[\d]{1,2}) )?/', $this->last_reply, $matches)) {
     952            $code = (int) $matches[1];
    898953            $code_ex = (count($matches) > 2 ? $matches[2] : null);
    899954            // Cut off error code from each response line
    900955            $detail = preg_replace(
    901956                "/{$code}[ -]" .
    902                 ($code_ex ? str_replace('.', '\\.', $code_ex) . ' ' : '') . "/m",
     957                ($code_ex ? str_replace('.', '\\.', $code_ex) . ' ' : '') . '/m',
    903958                '',
    904959                $this->last_reply
     
    906961        } else {
    907962            // Fall back to simple parsing if regex fails
    908             $code = substr($this->last_reply, 0, 3);
     963            $code = (int) substr($this->last_reply, 0, 3);
    909964            $code_ex = null;
    910965            $detail = substr($this->last_reply, 4);
     
    913968        $this->edebug('SERVER -> CLIENT: ' . $this->last_reply, self::DEBUG_SERVER);
    914969
    915         if (!in_array($code, (array)$expect)) {
     970        if (!in_array($code, (array) $expect, true)) {
    916971            $this->setError(
    917972                "$command command failed",
     
    924979                self::DEBUG_CLIENT
    925980            );
     981
    926982            return false;
    927983        }
    928984
    929985        $this->setError('');
     986
    930987        return true;
    931988    }
     
    939996     * will send the message to the users terminal if they are logged
    940997     * in and send them an email.
    941      * Implements rfc 821: SAML <SP> FROM:<reverse-path> <CRLF>
     998     * Implements RFC 821: SAML <SP> FROM:<reverse-path> <CRLF>.
     999     *
    9421000     * @param string $from The address the message is from
    943      * @access public
    944      * @return boolean
     1001     *
     1002     * @return bool
    9451003     */
    9461004    public function sendAndMail($from)
     
    9511009    /**
    9521010     * Send an SMTP VRFY command.
     1011     *
    9531012     * @param string $name The name to verify
    954      * @access public
    955      * @return boolean
     1013     *
     1014     * @return bool
    9561015     */
    9571016    public function verify($name)
    9581017    {
    959         return $this->sendCommand('VRFY', "VRFY $name", array(250, 251));
     1018        return $this->sendCommand('VRFY', "VRFY $name", [250, 251]);
    9601019    }
    9611020
    9621021    /**
    9631022     * Send an SMTP NOOP command.
    964      * Used to keep keep-alives alive, doesn't actually do anything
    965      * @access public
    966      * @return boolean
     1023     * Used to keep keep-alives alive, doesn't actually do anything.
     1024     *
     1025     * @return bool
    9671026     */
    9681027    public function noop()
     
    9751034     * This is an optional command for SMTP that this class does not support.
    9761035     * This method is here to make the RFC821 Definition complete for this class
    977      * and _may_ be implemented in future
    978      * Implements from rfc 821: TURN <CRLF>
    979      * @access public
    980      * @return boolean
     1036     * and _may_ be implemented in future.
     1037     * Implements from RFC 821: TURN <CRLF>.
     1038     *
     1039     * @return bool
    9811040     */
    9821041    public function turn()
     
    9841043        $this->setError('The SMTP TURN command is not implemented');
    9851044        $this->edebug('SMTP NOTICE: ' . $this->error['error'], self::DEBUG_CLIENT);
     1045
    9861046        return false;
    9871047    }
     
    9891049    /**
    9901050     * Send raw data to the server.
    991      * @param string $data The data to send
    992      * @access public
    993      * @return integer|boolean The number of bytes sent to the server or false on error
    994      */
    995     public function client_send($data)
    996     {
    997         $this->edebug("CLIENT -> SERVER: $data", self::DEBUG_CLIENT);
    998         set_error_handler(array($this, 'errorHandler'));
     1051     *
     1052     * @param string $data    The data to send
     1053     * @param string $command Optionally, the command this is part of, used only for controlling debug output
     1054     *
     1055     * @return int|bool The number of bytes sent to the server or false on error
     1056     */
     1057    public function client_send($data, $command = '')
     1058    {
     1059        //If SMTP transcripts are left enabled, or debug output is posted online
     1060        //it can leak credentials, so hide credentials in all but lowest level
     1061        if (self::DEBUG_LOWLEVEL > $this->do_debug &&
     1062            in_array($command, ['User & Password', 'Username', 'Password'], true)) {
     1063            $this->edebug('CLIENT -> SERVER: [credentials hidden]', self::DEBUG_CLIENT);
     1064        } else {
     1065            $this->edebug('CLIENT -> SERVER: ' . $data, self::DEBUG_CLIENT);
     1066        }
     1067        set_error_handler([$this, 'errorHandler']);
    9991068        $result = fwrite($this->smtp_conn, $data);
    10001069        restore_error_handler();
     1070
    10011071        return $result;
    10021072    }
     
    10041074    /**
    10051075     * Get the latest error.
    1006      * @access public
     1076     *
    10071077     * @return array
    10081078     */
     
    10131083
    10141084    /**
    1015      * Get SMTP extensions available on the server
    1016      * @access public
     1085     * Get SMTP extensions available on the server.
     1086     *
    10171087     * @return array|null
    10181088     */
     
    10231093
    10241094    /**
    1025      * A multipurpose method
    1026      * The method works in three ways, dependent on argument value and current state
    1027      *   1. HELO/EHLO was not sent - returns null and set up $this->error
    1028      *   2. HELO was sent
    1029      *     $name = 'HELO': returns server name
    1030      *     $name = 'EHLO': returns boolean false
    1031      *     $name = any string: returns null and set up $this->error
    1032      *   3. EHLO was sent
    1033      *     $name = 'HELO'|'EHLO': returns server name
    1034      *     $name = any string: if extension $name exists, returns boolean True
    1035      *       or its options. Otherwise returns boolean False
    1036      * In other words, one can use this method to detect 3 conditions:
    1037      *  - null returned: handshake was not or we don't know about ext (refer to $this->error)
    1038      *  - false returned: the requested feature exactly not exists
    1039      *  - positive value returned: the requested feature exists
     1095     * Get metadata about the SMTP server from its HELO/EHLO response.
     1096     * The method works in three ways, dependent on argument value and current state:
     1097     *   1. HELO/EHLO has not been sent - returns null and populates $this->error.
     1098     *   2. HELO has been sent -
     1099     *     $name == 'HELO': returns server name
     1100     *     $name == 'EHLO': returns boolean false
     1101     *     $name == any other string: returns null and populates $this->error
     1102     *   3. EHLO has been sent -
     1103     *     $name == 'HELO'|'EHLO': returns the server name
     1104     *     $name == any other string: if extension $name exists, returns True
     1105     *       or its options (e.g. AUTH mechanisms supported). Otherwise returns False.
     1106     *
    10401107     * @param string $name Name of SMTP extension or 'HELO'|'EHLO'
    1041      * @return mixed
     1108     *
     1109     * @return string|bool|null
    10421110     */
    10431111    public function getServerExt($name)
     
    10451113        if (!$this->server_caps) {
    10461114            $this->setError('No HELO/EHLO was sent');
    1047             return null;
    1048         }
    1049 
    1050         // the tight logic knot ;)
     1115
     1116            return;
     1117        }
     1118
    10511119        if (!array_key_exists($name, $this->server_caps)) {
    1052             if ($name == 'HELO') {
     1120            if ('HELO' === $name) {
    10531121                return $this->server_caps['EHLO'];
    10541122            }
    1055             if ($name == 'EHLO' || array_key_exists('EHLO', $this->server_caps)) {
     1123            if ('EHLO' === $name || array_key_exists('EHLO', $this->server_caps)) {
    10561124                return false;
    10571125            }
    1058             $this->setError('HELO handshake was used. Client knows nothing about server extensions');
    1059             return null;
     1126            $this->setError('HELO handshake was used; No information about server extensions available');
     1127
     1128            return;
    10601129        }
    10611130
     
    10651134    /**
    10661135     * Get the last reply from the server.
    1067      * @access public
     1136     *
    10681137     * @return string
    10691138     */
     
    10791148     * 4th character is '-' symbol. If it is a space then we don't
    10801149     * need to read anything else.
    1081      * @access protected
     1150     *
    10821151     * @return string
    10831152     */
     
    10941163            $endtime = time() + $this->Timelimit;
    10951164        }
     1165        $selR = [$this->smtp_conn];
     1166        $selW = null;
    10961167        while (is_resource($this->smtp_conn) && !feof($this->smtp_conn)) {
    1097             $str = @fgets($this->smtp_conn, 515);
    1098             $this->edebug("SMTP -> get_lines(): \$data is \"$data\"", self::DEBUG_LOWLEVEL);
    1099             $this->edebug("SMTP -> get_lines(): \$str is  \"$str\"", self::DEBUG_LOWLEVEL);
     1168            //Must pass vars in here as params are by reference
     1169            if (!stream_select($selR, $selW, $selW, $this->Timelimit)) {
     1170                $this->edebug(
     1171                    'SMTP -> get_lines(): timed-out (' . $this->Timeout . ' sec)',
     1172                    self::DEBUG_LOWLEVEL
     1173                );
     1174                break;
     1175            }
     1176            //Deliberate noise suppression - errors are handled afterwards
     1177            $str = @fgets($this->smtp_conn, self::MAX_REPLY_LENGTH);
     1178            $this->edebug('SMTP INBOUND: "' . trim($str) . '"', self::DEBUG_LOWLEVEL);
    11001179            $data .= $str;
    11011180            // If response is only 3 chars (not valid, but RFC5321 S4.2 says it must be handled),
    1102             // or 4th character is a space, we are done reading, break the loop,
    1103             // string array access is a micro-optimisation over strlen
    1104             if (!isset($str[3]) or (isset($str[3]) and $str[3] == ' ')) {
     1181            // or 4th character is a space or a line break char, we are done reading, break the loop.
     1182            // String array access is a significant micro-optimisation over strlen
     1183            if (!isset($str[3]) || $str[3] === ' ' || $str[3] === "\r" || $str[3] === "\n") {
    11051184                break;
    11061185            }
     
    11151194            }
    11161195            // Now check if reads took too long
    1117             if ($endtime and time() > $endtime) {
     1196            if ($endtime && time() > $endtime) {
    11181197                $this->edebug(
    11191198                    'SMTP -> get_lines(): timelimit reached (' .
     
    11241203            }
    11251204        }
     1205
    11261206        return $data;
    11271207    }
     
    11291209    /**
    11301210     * Enable or disable VERP address generation.
    1131      * @param boolean $enabled
     1211     *
     1212     * @param bool $enabled
    11321213     */
    11331214    public function setVerp($enabled = false)
     
    11381219    /**
    11391220     * Get VERP address generation mode.
    1140      * @return boolean
     1221     *
     1222     * @return bool
    11411223     */
    11421224    public function getVerp()
     
    11471229    /**
    11481230     * Set error messages and codes.
    1149      * @param string $message The error message
    1150      * @param string $detail Further detail on the error
    1151      * @param string $smtp_code An associated SMTP error code
     1231     *
     1232     * @param string $message      The error message
     1233     * @param string $detail       Further detail on the error
     1234     * @param string $smtp_code    An associated SMTP error code
    11521235     * @param string $smtp_code_ex Extended SMTP code
    11531236     */
    11541237    protected function setError($message, $detail = '', $smtp_code = '', $smtp_code_ex = '')
    11551238    {
    1156         $this->error = array(
     1239        $this->error = [
    11571240            'error' => $message,
    11581241            'detail' => $detail,
    11591242            'smtp_code' => $smtp_code,
    1160             'smtp_code_ex' => $smtp_code_ex
    1161         );
     1243            'smtp_code_ex' => $smtp_code_ex,
     1244        ];
    11621245    }
    11631246
    11641247    /**
    11651248     * Set debug output method.
    1166      * @param string|callable $method The name of the mechanism to use for debugging output, or a callable to handle it.
     1249     *
     1250     * @param string|callable $method The name of the mechanism to use for debugging output, or a callable to handle it
    11671251     */
    11681252    public function setDebugOutput($method = 'echo')
     
    11731257    /**
    11741258     * Get debug output method.
     1259     *
    11751260     * @return string
    11761261     */
     
    11821267    /**
    11831268     * Set debug output level.
    1184      * @param integer $level
     1269     *
     1270     * @param int $level
    11851271     */
    11861272    public function setDebugLevel($level = 0)
     
    11911277    /**
    11921278     * Get debug output level.
    1193      * @return integer
     1279     *
     1280     * @return int
    11941281     */
    11951282    public function getDebugLevel()
     
    12001287    /**
    12011288     * Set SMTP timeout.
    1202      * @param integer $timeout
     1289     *
     1290     * @param int $timeout The timeout duration in seconds
    12031291     */
    12041292    public function setTimeout($timeout = 0)
     
    12091297    /**
    12101298     * Get SMTP timeout.
    1211      * @return integer
     1299     *
     1300     * @return int
    12121301     */
    12131302    public function getTimeout()
     
    12181307    /**
    12191308     * Reports an error number and string.
    1220      * @param integer $errno The error number returned by PHP.
    1221      * @param string $errmsg The error message returned by PHP.
     1309     *
     1310     * @param int    $errno   The error number returned by PHP
     1311     * @param string $errmsg  The error message returned by PHP
    12221312     * @param string $errfile The file the error occurred in
    1223      * @param integer $errline The line number the error occurred on
     1313     * @param int    $errline The line number the error occurred on
    12241314     */
    12251315    protected function errorHandler($errno, $errmsg, $errfile = '', $errline = 0)
     
    12281318        $this->setError(
    12291319            $notice,
    1230             $errno,
    1231             $errmsg
     1320            $errmsg,
     1321            (string) $errno
    12321322        );
    12331323        $this->edebug(
    1234             $notice . ' Error #' . $errno . ': ' . $errmsg . " [$errfile line $errline]",
     1324            "$notice Error #$errno: $errmsg [$errfile line $errline]",
    12351325            self::DEBUG_CONNECTION
    12361326        );
     
    12431333     * If no reply has been received yet, it will return null.
    12441334     * If no pattern was matched, it will return false.
    1245      * @return bool|null|string
     1335     *
     1336     * @return bool|string|null
    12461337     */
    12471338    protected function recordLastTransactionID()
     
    12551346            foreach ($this->smtp_transaction_id_patterns as $smtp_transaction_id_pattern) {
    12561347                if (preg_match($smtp_transaction_id_pattern, $reply, $matches)) {
    1257                     $this->last_smtp_transaction_id = $matches[1];
     1348                    $this->last_smtp_transaction_id = trim($matches[1]);
     1349                    break;
    12581350                }
    12591351            }
     
    12671359     * If no reply has been received yet, it will return null.
    12681360     * If no pattern was matched, it will return false.
    1269      * @return bool|null|string
     1361     *
     1362     * @return bool|string|null
     1363     *
    12701364     * @see recordLastTransactionID()
    12711365     */
Note: See TracChangeset for help on using the changeset viewer.