Wysyłanie wiadomości email z załącznikiem, fukncja mail()

0

Witam, mam pytanie, wysyłam wiadomość email przez PHP, do testowania używam Test Mail Server Tool i do klienta pocztowego Mozilla Thunderbird. Do wysyłania wiadomości używam poniższego kodu:

<?php
class m_Mail {
    var $to;
    var $subject;
    var $content;
    var $headers;
    var $marker;
    var $type;

    function eMail($type = "1", $from, $replyto)
    {
        $this->type = $type;
        $this->headers .= "From: " . $from . "\n";
        $this->headers .= "Reply-to: " . $replyto . "\n";
        $this->headers .= "MIME-Version: 1.0\n";
        if ($type == 1) {
            $this->headers .= "Content-Type: text/html; charset=utf-8\n";
        } else {
            srand((double)microtime() * 1000000);
            $this->marker = md5(uniqid(rand()));
            $this->headers .= "Content-Type: multipart/mixed;\n";
            $this->headers .= "\tboundary=\"___" . $this->marker . "==\"\n\n";
            $this->content = "--___" . $this->marker . "==\n";
            $this->content .= "Content-Type: text/html; charset=\"utf-8\"\n";
            $this->content .= "Content-Transfer-Encoding: 8bit\n\n";
        } 
    } 

    function eMailAttachment($mimeType, $fileName, $data)
    {
        if ($this->type != 1) {
            $this->content .= "\n\n--___" . $this->marker . "==\n";
            $this->content .= "Content-Type: " . $mimeType . "; name=\"" . $fileName . "\"\n";
            $this->content .= "Content-Transfer-Encoding: base64\n";
            $this->content .= "Content-Disposition: attachment; filename=\"" . $fileName . "\"\n\n";
            $this->content .= chunk_split(base64_encode($data));
        } 
    } 

    function eMailSend($to)
    {
        if ($this->type != 1) {
            $this->content .= "--___" . $this->marker . "==--\n\n"; // close marker
        } 
        mail ($to, $this->subject, $this->content, $this->headers);
    } 

    function eMailContent($subject, $content)
    {
        $this->subject = $subject;
        $this->content .= $content;
    } 
} 

?>

Źródło:http://forum.php.pl/index.php?showtopic=132032

Mam dwa problemy:

  1. Kiedy wysyłam wiadomość z załącznikiem to w wiadomości nie mam treści, dlaczego, jak to zmienić?
  2. Kiedy wysyłam załącznik np.
    plik.txt
    którego zawartość to
    Treść wiadomości.
    po jego przesłaniu i pobraniu otrzymuje w nim coś takiego:
    Treść wiadomości.ɧj۞¦ݢj̭wsǜ蝵kg۷Κࠞ㽹
    Dlaczego tak to wygląda, czemu tak się dzieje? Kiedy np. przesyłam plik .jpg, czy .pdf wielkość pliku po pobraniu jest minimalnie większa niż przed jego wysłaniem, więc podejrzewam, że podobne wartości są dodawane do każdego pliku. Czy wie ktoś dlaczego? Podejrzewam, że ma to jakiś związek z kodowaniem, ale nie wiem dokładnie jaki i jak się tego pozbyć.

Bardzo proszę o pomoc. Pozdrawiam.

1

Zamiast wymyślać koło od nowa można użyć już sprawdzonych i działających rozwiązań, zobacz:
https://github.com/PHPMailer/PHPMailer

0
Tumeg napisał(a):

Zamiast wymyślać koło od nowa można użyć już sprawdzonych i działających rozwiązań, zobacz:
https://github.com/PHPMailer/PHPMailer

Ok, dzięki. Wypróbuje to. Ewentualnie jeszcze napiszę, jak będę miał z tym problem.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.