PHP: добавлять вложения в электронные письма на лету?

Я только что заставил почтовую функцию PHP правильно работать в моей тестовой среде.

У меня есть приложение PHP, которое выводит несколько строк. Было бы очень хорошо преобразовать эти строки во вложения (*.TXT -файлы) в электронном письме, не сохраняя их сначала на диске и не читая их обратно. Возможно ли это в PHP?


person Industrial    schedule 25.11.2010    source источник


Ответы (3)


Да, это возможно. Вам просто нужно сделать сообщение электронной почты составным сообщением со следующим синтаксисом:

MIME-Version: 1.0
Content-Type: multipart/mixed; boundary=random-boundary

This is the optional preamble of a multipart/mixed message.
--random-boundary
Content-Type: text/plain

This is the main message body.
--random-boundary
Content-Type: text/plain
Content-Disposition: attachment; filename=file.txt

This is the content of the attached file.
--random-boundary--
This is the optional epilogue of a multipart/mixed message.

Затем каждая часть может быть описана как любое другое сообщение. Но вам, вероятно, следует использовать библиотеку, которая сделает это за вас.

Теперь, если вы используете функцию mail PHP, первые две строки будут заголовком, а остальные — содержимым. этого почтового сообщения. Граница должна быть случайной границей, так что вероятность того, что эта строка с -- перед ней будет в содержимом одной части, очень маловероятна.

person Gumbo    schedule 25.11.2010
comment
Спасибо за Ваш ответ. Потребовалось некоторое время, чтобы запустить его, но это сработало! Спасибо - person Industrial; 25.11.2010

Да, вы можете использовать, например. Класс PEAR Mail_Mine для него.

bool addAttachment ( string $file , string $c_type = 'application/octet-stream' , string $name = '' , boolean $isfile = true , string $encoding = 'base64' ) — метод, который вы хотите использовать, где $file содержит ваши строки, а $isfile является false.

person ThiefMaster    schedule 25.11.2010

И вы можете использовать классы Zend_Mail для гораздо более простого кода, имя файла будет "smapleFilename" и его последний параметр в функции createAttachment, но не забудьте настроить transport перед этим примером:

    $mail = new Zend_Mail();
        $mail->setBodyText("body")
             ->createAttachment("your wanted text " ,  Zend_Mime::TYPE_TEXT,               
                                 Zend_Mime::DISPOSITION_ATTACHMENT , Zend_Mime::ENCODING_BASE64, "smapleFilename.txt");
        $mail->setFrom('[email protected]', 'Server');
        $mail->addTo('[email protected]');
        $mail->setSubject("subject");
        $mail->send();

в проекте Zend framework вы бы сделали так:

resources.mail.transport.type = smtp
resources.mail.transport.host = "mail.111111.com"
resources.mail.transport.auth = login
resources.mail.transport.username = [email protected]
resources.mail.transport.password = test
;resources.mail.transport.ssl = tls
resources.mail.transport.port = 2525
resources.mail.transport.register = true ; True by default
person tawfekov    schedule 25.11.2010