Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

[Solved] PHPMailer fatal error formularz wysyłający maile z załącznikami

kecajs 14 Feb 2021 20:40 210 10
  • #1
    kecajs
    Level 17  
    Cześć,

    tworzę formularz wysyłający maila wraz z załącznikiem wykorzystując PHPMailer.
    PHPMailer jest wrzucony na serwer, a po próbie wysłania wiadomości pojawia się komunikat: Fatal error: Uncaught Error: Class 'PHPMailer' not found in /home/klient.dhosting.pl/moja-domena/public_html/mail.php:25 Stack trace: #0 {main} thrown in /home/klient.dhosting.pl/moja-domena/public_html/mail.php on line 25.
    Oto zawartość pliku wysyłającego, czyli mail.php.
    Code: php
    Log in, to see the code

    Od dwóch dni przekopuję się przez informacje o instalacji, konfiguracji PHPMailer, a teraz odnośnie zadziałania tej biblioteki. Nie trafiłem na żaden tutorial krok-po-kroku dla nowicjuszy (a takim jestem), dlatego będę wdzięczny za wskazówki i podpowiedzi, co muszę zmienić, aby wszystko zadziałało, także wysyłąnie plików jako załączniki.
    Dodam, że folder PHPMailer jest w folderze głównym na stronie, czyli tam, gdzie plik mailer.php.
    Jacek
  • #2
    cysiekw
    Level 38  
    kecajs wrote:
    Error: Class 'PHPMailer' not found
    Temu się przyjrzyj dokładniej.
  • #3
    kecajs
    Level 17  
    A gdzie tego szukać?
    Mam folder PHPMailer o takiej strukturze:
    * Foldery:
    .git
    .github
    .phan
    docs
    examples
    language
    src
    test

    * Pliki:
    .gitattributes
    .gitignore
    changelog.md
    COMMITMENT
    composer.json
    get_oauth_token.php
    LICENSE
    phpcs.xml.dist
    phpdocs.dist.xml
    phpunit.xml.dist
    README.md
    SECURITY.md
    UPGRADING.md
    VERSION
    gdzie mam szukać tej klasy?
  • #5
    kecajs
    Level 17  
    Dodałem te 3 linie. Teraz mam taki komunikat:
    Fatal error: Uncaught PHPMailer\PHPMailer\Exception: Could not access file: in /home/klient.dhosting.pl/moja-domena.pl/public_html/PHPMailer/src/PHPMailer.php:3018 Stack trace: #0 /home/klient.dhosting.pl/moja-domena.pl/public_html/mail.php(46): PHPMailer\PHPMailer\PHPMailer->addAttachment(NULL, NULL) #1 {main} thrown in /home/klient.dhosting.pl/moja-domena.pl/public_html/PHPMailer/src/PHPMailer.php on line 3018.

    Nawet nie wiem, jak sprawdzić wersję PHPMailera. Jest gdzieś instrukcja po polsku jak zainstalować i skonfigurować tego nieszczęsnego PHPMailera? Z funkcją mail() nie było takich jazd.
  • #7
    kecajs
    Level 17  
    A jak to poprawić? Przekopałem się przez kilkanaście stron z przykładami, ale większość, na jaką trafiłem dotyczyła tylko wysyłania poczty, a jedynie 2-3 wspominała o załączniku.
  • Helpful post
    #8
    Sam Sung
    Level 32  
    Zdecydować, czy mail musi zawierać załączniki, czy nie musi, i albo przerobić formularz (którego kodu tutaj nie zamieściłeś), żeby nie dało się go wysłać nie wybrawszy pliku, albo tutaj dodać logikę, która będzie pomijać wywoływanie addAttachement, jeśli user nie wgrał pliku.

    Manual (https://www.php.net/manual/en/features.file-upload.post-method.php) zaleca użycie funkcji is_uploaded_file dla bezpieczeństwa, i akurat by się to mogło przydać. Czyli może coś takiego:
    Code: php
    Log in, to see the code
  • #9
    kecajs
    Level 17  
    Oto kod formularza:
    Code: html
    Log in, to see the code


    tyle odnośnie kodu formularza. Załącznik nie jest obowiązkowy do wysłania maila. Obowiązkowe mają być imię, mail i treść.

    Dodano po 47 [minuty]:

    Udało się, jeszcze brakowało Body.
    Ale nie przesyła załącznika.
    A jak chcę przesłać wszystkie informacje z formularza, to muszę te pola zawrzeć w Body, nieprawdaż? A jak mogę umieścić tam wszystkie wartości zmiennych? Przykładowo tak:
    Code: html
    Log in, to see the code

    A jest szansa jakoś rozwinąć maila, podobnie jak było w funkcji mail(), tj. że w mailu mam coś takiego:
    Nasz klient: $klient;
    Adres e-mail: $mail;
    Imię: $imie;
    Nazwa firmy: $firma;
    Numer telefonu: $telefon;
    Treść wiadomości: $tresc;
    Załącznik: ($file_tmp, $file);
    Czy tak to można zrobić, czy inaczej? Wszystko w Body?
  • #10
    kecajs
    Level 17  
    Poprawiłem w taki sposób:
    Code: php
    Log in, to see the code

    Wszystko przechodzi ładnie, ale bez dołączonego załącznika. Próbowałem go przesłać jako część Body:
    Code: php
    Log in, to see the code

    , ale bez powodzenia. Będę wdzięczny za tę ostatnią przysługę i wskazanie mi, jak przesłać załącznik.

    Dodano po 2 [godziny] 6 [minuty]:

    OK, działa.
    Temat zamykam.

    Brakowało w formularzu czegoś takiego: enctype="multipart/form-data".
    Cały kod pliku kontakt.php wygląda tak:
    Code: html
    Log in, to see the code
  • #11
    kecajs
    Level 17  
    Poprawiłem w taki sposób:
    Code: php
    Log in, to see the code

    Wszystko przechodzi ładnie, ale bez dołączonego załącznika. Próbowałem go przesłać jako część Body:
    Code: php
    Log in, to see the code

    , ale bez powodzenia. Będę wdzięczny za tę ostatnią przysługę i wskazanie mi, jak przesłać załącznik.

    Dodano po 2 [godziny] 6 [minuty]:

    OK, działa.
    Temat zamykam.

    Brakowało w formularzu czegoś takiego: enctype="multipart/form-data".
    Cały kod pliku kontakt.php wygląda tak:
    Code: html
    Log in, to see the code