Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem [PHP] Email attachments

Zdravím
Narazil jsem na tuto stránku https://stackoverflow.com/questions/12301358/send-attachments-with-php-mail kde se popisuje jak poslat email s přílohou, kde mám nakopírovat tu knihovnu PHPMailer do kterého adresáře ? mě to hlásí že Fatal error: Class 'PHPMailer\PHPMailer\PHPMailer' not found in /home/users/..... tu knihovnu mám aktuálně "/mojestranky.8u.cz/web/PHPMailer-master" díky

Předmět Autor Datum
Alternatively, if you're not using Composer, you can download PHPMailer as a zip file, (note that do…
Wikan 19.01.2022 16:16
Wikan
Se to nauč posílat bez phpmaileru, je to lepší a bezpečnější :-)
kacikac 19.01.2022 16:39
kacikac
Jak ? mě jde tato funkce takto <?php mail("xxxxxxx@xxxxx.cz","Subjekt","body"); ?> a potřebuji j…
Víťa 19.01.2022 16:48
Víťa
Jak? Koukneš se do toho tebou uvedeného odkazu. Další příklady máš na googlu. Pozkoušíš, vhodně upra…
kacikac 19.01.2022 17:23
kacikac
Já jsem to zkusil takto mail("xxxxxxx@xxxxxx.cz","sublekt ","techtlemechtle",$attachment = chunk_sp…
Víťa 19.01.2022 17:42
Víťa
Takový příklad nikde nevidím a ani se nejedná o vhodnou úpravu :-) Podíval ses na příklady uvedené v…
kacikac 19.01.2022 17:49
kacikac
Tak tedy toto jsem zkopíroval <?php function sendMail( string $fileAttachment, string $mailMessage…
Víťa 20.01.2022 13:21
Víťa
A jak jako mám vědět proč ti to nefunguje? Nenapsal jsi tu tvůj celý skript a názvy souborů a co máš…
kacikac 20.01.2022 16:38
kacikac
Bingo toto je ono :-)
Víťa 20.01.2022 16:58
Víťa
Ještě tři poznámky. from@example.com by měl být mail odpovídající smtp serveru, pokud není, tak to b…
kacikac 20.01.2022 17:06
kacikac
Já jsem taky na endoře :-)
Víťa 20.01.2022 17:11
Víťa
Já na endoře nejsem, zrovna nejsem nikde, jen jsem to neměl kde vyzkoušet, tak jsem si tam teď na te… poslední
kacikac 20.01.2022 17:17
kacikac

Alternatively, if you're not using Composer, you can download PHPMailer as a zip file, (note that docs and examples are not included in the zip file), then copy the contents of the PHPMailer folder into one of the include_path directories specified in your PHP configuration and load each class file manually:

<?php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;

require 'path/to/PHPMailer/src/Exception.php';
require 'path/to/PHPMailer/src/PHPMailer.php';
require 'path/to/PHPMailer/src/SMTP.php';
If you're not using the SMTP class explicitly (you're probably not), you don't need a use line for the SMTP class. Even if you're not using exceptions, you do still need to load the Exception class as it is used internally.

https://github.com/PHPMailer/PHPMailer

Já jsem to zkusil takto

mail("xxxxxxx@xxxxxx.cz","sublekt ","techtlemechtle",$attachment    = chunk_split(base64_encode(file_get_contents($soubor))));

a výsledek soubor přenesen ale textovém formátu kousek souboru
KPPxuBznNHs20Taw8TcZ6/jS+YhHzOox6tik1YrqLuXcVyMim4x2pTjYfUUGnZ
xU2VrFoXGRSv0pXSFciY81WduGzT5tROxEpjz8oNBbGfrTbtqHUYX55pY5OTWZcg3tuPpSo8nHI6
9xVNIlEhf5qnEnajlGO3Uzdh8VmxCPJ65P0piufVefStea47Dg1BNL2nKMYRzVC6TMiED+IfzoUr
jZp9WOKmQ85qbkkm6m7vWs2wLMUlI0v7zrxV7AWfPqMz05koga5x2aoZZNy1PUor5+apA/GKNBks
TZp8j4pRWoB5varUL/LVEk4fNTKR1pWQxC1RlxQAm4UbxioGRs9Ql/eiwxmaY1OIxQaDSGOQ0pIp
dBDM5PFRM4zTuMikcYpnmfL0pICpcH9KgWVVrWyaESJJulTH94V1n/LOieisCOa13/j9z/sisoVV
P4SxZOF6MR7VUb7xqrFCrUgoYD1qZaV7Fk6VOvtS8yidKmUCqegrkyVKtCRLJhTxVEkgp4pdQHin
imA+nCmA8U6kSOpRSQyprX/IIm98V55AN18g/wCmwxS2A7Jz8xxUL9KxWpkhR1qQ1IDKmT7tPyEL
RViHUUaAO7Uw0ALTWoAjpKJDFppFQtgG0VQxxplFyR4qSgCCXrUPFJxGOprVb0QEeNwxU/WoaQAO
tONVcVhvalWgTI2HNQsKcloAdqcPu1KfcBvRj70/6VT0ExaSmmMDSr0o6iFpGpsQxetRXufskmMU
ua42zK+X7wqRW4rZWsAv0qaO5dPpWSs2F2WRfDHzIfwNOS6hlYjkfWsnG+oJlnbvBI5qJkXGKSl0
Be8R+T75FadtD4Ydx9stNRZkIOQ3FbKRE1L7Je2/D0cS/uW/294apItO8FXQ/wBG1MP9Ltq1XtbH
NzzTL0PhbR3H+jmWUe13Uy+F7FT/AMeLv/

Tak tedy toto jsem zkopíroval

<?php
     function sendMail(
    string $fileAttachment,
    string $mailMessage = MAIL_CONF["mailMessage"],
    string $subject     = MAIL_CONF["subject"],
    string $toAddress   = MAIL_CONF["toAddress"],
    string $fromMail    = MAIL_CONF["fromMail"]
  ) 
 {
   
    $fileAttachment = trim($fileAttachment);
    $from           = $fromMail;
    $pathInfo       = pathinfo($fileAttachment);
    $attchmentName  = "attachment_".date("YmdHms").(
    (isset($pathInfo['extension']))? ".".$pathInfo['extension'] : ""
    );
   
    $attachment    = chunk_split(base64_encode(file_get_contents($fileAttachment)));
    $boundary      = "PHP-mixed-".md5(time());
    $boundWithPre  = "\n--".$boundary;
   
    $headers   = "From: $from";
    $headers  .= "\nReply-To: $from";
    $headers  .= "\nContent-Type: multipart/mixed; boundary=\"".$boundary."\"";
   
    $message   = $boundWithPre;
    $message  .= "\n Content-Type: text/plain; charset=UTF-8\n";
    $message  .= "\n $mailMessage";
   
    $message .= $boundWithPre;
    $message .= "\nContent-Type: application/octet-stream; name=\"".$attchmentName."\"";
    $message .= "\nContent-Transfer-Encoding: base64\n";
    $message .= "\nContent-Disposition: attachment\n";
    $message .= $attachment;
    $message .= $boundWithPre."--";
   
    return mail($toAddress, $subject, $message, $headers);
}

?>

sice není žádná chyba při provedení skriptu já jej mám nazvaný priloha.php a výsledek žádný ::) v string $toAddress = MAIL_CONF["toAddress"],tam mám moji adresu na kterou to má poslat , nevím si rady :-( díky

A jak jako mám vědět proč ti to nefunguje?
Nenapsal jsi tu tvůj celý skript a názvy souborů a co máš a nemáš na webu a jestli se koukáš i do spamu.

Já to zkusil na tomto:

<?php

$mailto = "to@example.com";
$subject = "Jaké bych si přála počasí";
$message = "Přála bych si mít tolik sněhu jako loni v únoru.";
$file = "priloha.txt";

$separator = md5(time());

$subject = "=?utf-8?B?".base64_encode($subject)."?=";

$headers = "From: =?UTF-8?B?".base64_encode("Example Eliška")."?=<from@example.com>".PHP_EOL;
$headers .= "MIME-Version: 1.0".PHP_EOL;
$headers .= "Content-Type: multipart/mixed; boundary=\"".$separator."\"";

$body = "--".$separator.PHP_EOL;
$body .= "Content-Type: text/plain; charset=UTF-8".PHP_EOL;
$body .= "Content-Transfer-Encoding: base64".PHP_EOL.PHP_EOL;
$body .= base64_encode($message).PHP_EOL;
$body .= "--".$separator.PHP_EOL;
$body .= "Content-Type: application/octet-stream; name=\"".$file."\"".PHP_EOL;
$body .= "Content-Transfer-Encoding: base64".PHP_EOL;
$body .= "Content-Disposition: attachment; filename=\"".$file."\"" . PHP_EOL . PHP_EOL;
$body .= chunk_split(base64_encode(file_get_contents($file))).PHP_EOL;
$body .= "--".$separator."--";

mail($mailto, $subject, $body, $headers);

... a toto mi funguje.

Ještě tři poznámky.
from@example.com by měl být mail odpovídající smtp serveru, pokud není, tak to budou mail servery asi házet do spamu (např. jsem to testoval na endoře a pokud jsem from nastavil na zakaznik@konik.stable.cz tak to ve spamu nebylo).
Pokud se má nastavit určitý mail na odpovídání, tak to se dělá pomocí Reply-To, ale to už si nepamatuju jestli to funguje a jak.
Pokud se jedná o nějaký známý typ souboru, tak Content-Type se může nastavit na ten určitý typ souboru.

Zpět do poradny Odpovědět na původní otázku Nahoru