Ing. Michal Hudak
Ing. Michal Hudak

Reputation: 5612

PHP - mail with attachments - message not showing

I am trying to complete sending mail with attachments

Problem: Email is sending without message body and attachments

Goal: send utf-8 html email with attachments

I created so far ...

Usage:

email_library.php

<?php

    private function create_body()
    {
        $this->body[] = "--{$this->uid}";
        $this->body[] = "Content-type: text/html; charset=utf-8";
        $this->body[] = "Content-Transfer-Encoding: 7bit";
        $this->body[] = $this->message;

        if (!empty($this->attachments)) {

            foreach ($this->attachments as $k => $a) {
                $this->body[] = "--{$this->uid}";
                $this->body[] = "Content-Type: application/octet-stream; name=\"{$a['name']}\"";
                $this->body[] = "Content-Description: {$a['name']}";
                $this->body[] = "Content-Transfer-Encoding: base64";
                $this->body[] = "Content-Disposition: attachment; filename=\"{$a['name']}\"";
                $this->body[] = "{$a['data']}";
            }

        }
        $this->body[] = "--{$this->uid}--";

    }

EDIT:

$this->body[] = "--{$this->uid}";

removing "--"

The encapsulation boundary following the last body part is a distinguished delimiter that indicates that no further body parts will follow.

Upvotes: 1

Views: 466

Answers (2)

Lennart Schreiber
Lennart Schreiber

Reputation: 26

Watch out for https://bugs.php.net/bug.php?id=68776 - multiple linebreaks are not allowed anymore, for me DOOManiac answer is not working (anymore).

Upvotes: 0

DOOManiac
DOOManiac

Reputation: 6284

When working with a multipart message, you need to separate each part (message body + attachments) with two line breaks before the --==MIME_BOUNDARY! Otherwise they do not separate properly in your message.

Simply add \n to your existing code:

$this->body[] = $this->message."\n\n";
...
$this->body[] = "{$a['data']}\n\n";

Disclaimer: I have not tested any of this, hopefully it works.

For more information, check out RFC 1521

Upvotes: 1

Related Questions