PHP: Добавить вложения в электронные письма "на лету"? - PullRequest
1 голос
/ 25 ноября 2010

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

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

Ответы [ 3 ]

2 голосов
/ 25 ноября 2010

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

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.

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

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

1 голос
/ 25 ноября 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('test@222222.com', 'Server');
        $mail->addTo('test@hotmail.com');
        $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 = test@111111.com
resources.mail.transport.password = test
;resources.mail.transport.ssl = tls
resources.mail.transport.port = 2525
resources.mail.transport.register = true ; True by default
1 голос
/ 25 ноября 2010

Да, вы можете использовать, например, класс PEAR's Mail_Mine .

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

...