Я aam более любящий использование Сетки и изменение ответа ввожу, у меня должна все же быть проблема с той методологией. Я не использовал прямые файлы с разделением табуляцией. Одна возможность является \n, возможно, придется быть \r\n. Просто слепой выстрел.
Для отправки фактического сообщения электронной почты я бы рекомендовал использовать библиотеку PHPMailer , она все упрощает.
хороший учебник здесь
Код
<?php
//define the receiver of the email
$to = 'youraddress@example.com';
//define the subject of the email
$subject = 'Test email with attachment';
//create a boundary string. It must be unique
//so we use the MD5 algorithm to generate a random hash
$random_hash = md5(date('r', time()));
//define the headers we want passed. Note that they are separated with \r\n
$headers = "From: webmaster@example.com\r\nReply-To: webmaster@example.com";
//add boundary string and mime type specification
$headers .= "\r\nContent-Type: multipart/mixed; boundary=\"PHP-mixed-".$random_hash."\"";
//read the atachment file contents into a string,
//encode it with MIME base64,
//and split it into smaller chunks
$attachment = chunk_split(base64_encode(file_get_contents('attachment.zip')));
//define the body of the message.
ob_start(); //Turn on output buffering
?>
--PHP-mixed-<?php echo $random_hash; ?>
Content-Type: multipart/alternative; boundary="PHP-alt-<?php echo $random_hash; ?>"
--PHP-alt-<?php echo $random_hash; ?>
Content-Type: text/plain; charset="iso-8859-1"
Content-Transfer-Encoding: 7bit
Hello World!!!
This is simple text email message.
--PHP-alt-<?php echo $random_hash; ?>
Content-Type: text/html; charset="iso-8859-1"
Content-Transfer-Encoding: 7bit
<h2>Hello World!</h2>
<p>This is something with <b>HTML</b> formatting.</p>
--PHP-alt-<?php echo $random_hash; ?>--
--PHP-mixed-<?php echo $random_hash; ?>
Content-Type: application/zip; name="attachment.zip"
Content-Transfer-Encoding: base64
Content-Disposition: attachment
<?php echo $attachment; ?>
--PHP-mixed-<?php echo $random_hash; ?>--
<?php
//copy current buffer contents into $message variable and delete current output buffer
$message = ob_get_clean();
//send the email
$mail_sent = @mail( $to, $subject, $message, $headers );
//if the message is sent successfully print "Mail sent". Otherwise print "Mail failed"
echo $mail_sent ? "Mail sent" : "Mail failed";
?>
Вероятно, лучше всего использовать существующий инструмент, как предлагали другие в своих ответах. Однако, если вы хотите попробовать свои собственные или просто понять, как, продолжайте читать.
На самом деле в вашем HTML есть только два требования для отправки файловых вложений.
enctype = "multipart / form-data"
. Это позволяет пользователю искать файл для вложения. Если у вас есть оба из них, браузер загрузит все вложенные файлы вместе с отправкой формы .
Примечание: они сохраняются как временные файлы на сервере. В этом примере мы возьмем их данные и отправим их по электронной почте, но если вы переместите временные файлы в постоянное место, вы только что создали форму загрузки файлов.
Этот учебник отлично подходит для понимания того, как создать электронную почту MIME (которая может содержать содержимое HTML, текстовую версию, вложения и т. д.) в PHP. Я использовал это как отправную точку.
По сути, вы делаете три вещи:
Этот учебник отлично подходит для понимания того, как создать электронную почту MIME (которая может содержать содержимое HTML, текстовую версию, вложения и т. Д.) В PHP. Я использовал это как отправную точку.
По сути, вы делаете три вещи:
Этот учебник отлично подходит для понимания того, как создать электронную почту MIME (которая может содержать содержимое HTML, текстовую версию, вложения и т. Д.) В PHP. Я использовал это как отправную точку.
По сути, вы делаете три вещи:
тип содержимого
, например image / jpg
или application / pdf.
Более подробную информацию можно найти здесь . (Мой пример сценария извлекает эту информацию из каждого файла с помощью встроенных функций PHP.) После отправки формы любые файлы, загруженные браузером (см. Раздел HTML), будут доступны через переменная $ _ FILES
, которая содержит «Ассоциативный массив элементов, загруженных в текущий скрипт с помощью метода HTTP POST».
Документация на $ _ FILES
ужасна, но после загрузки вы можете запустить print_r ($ _ FILES)
, чтобы посмотреть, как это работает. Результат будет примерно таким:
Array ( [examplefile] => Array ( [name] => your_filename.txt
[type] => text/plain [tmp_name] =>
C:\path\to\tmp\file\something.tmp [error] => 0 [size] => 200 ) )
Затем вы можете получить данные в связанном временном файле, используя file_get_contents ($ _ FILES ['examplefile'] ['tmp_name'])
.
php.ini
имеет некоторые настройки, ограничивающие размер вложения. См. это обсуждение для получения дополнительной информации.
Я создал следующую функцию, которую можно включить на страницу и использовать для сбора любых вложений файлов, отправленных с формой. Не стесняйтесь использовать его и / или адаптировать под свои нужды.
Общий лимит вложений является произвольным, но большие объемы могут затруднить выполнение сценария mail ()
или быть отклонены отправкой или получением электронной почты сервер. Проведите собственное тестирование.
(Примечание: функция mail ()
в PHP зависит от информации в php.
Вы можете попробовать SwiftMailer . У него есть хорошее руководство по этому .