За последние 24 часа нас посетили 21942 программиста и 995 роботов. Сейчас ищут 665 программистов ...

php create file, send mail

Тема в разделе "PHP для новичков", создана пользователем Aproximo, 15 авг 2016.

Метки:
  1. Aproximo

    Aproximo Новичок

    С нами с:
    10 авг 2016
    Сообщения:
    9
    Симпатии:
    0
    Здравствуйте.

    Мне нужно создать фаил .html, записать туда текст, и отправить его по почте, при этом файл не сохранять на сервере...
    Может кто подсказать как?
     
  2. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.230
    Симпатии:
    1.715
    Адрес:
    Молдова, г.Кишинёв
    Можно всё сделать с помощью переменных и функции mail(), ну если совсем тяжко, то лучше использовать PHPMailer, там проще указать формат html для письма.
     
  3. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.902
    Симпатии:
    969
    Через временный файл. Через файл в оперативной памяти.
     
  4. Aproximo

    Aproximo Новичок

    С нами с:
    10 авг 2016
    Сообщения:
    9
    Симпатии:
    0
    PHP:
    1. <?php
    2. $tmpfname = tempnam("/tmp", "FOO");
    3.  
    4. $handle = fopen($tmpfname, "w");
    5. fwrite($handle, "записываем в во временный файл");
    6. fclose($handle);
    7.  
    8. // здесь мы чего-нибудь делаем
    9.  
    10. unlink($tmpfname);
    11. ?>
    Я так понимаю это оно?
    Только вот с атачментом что-то у меня лажа, как правильно его отправить?
     
    #4 Aproximo, 15 авг 2016
    Последнее редактирование модератором: 15 авг 2016
  5. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.902
    Симпатии:
    969
    Не оно...
    https://secure.php.net/manual/en/function.tmpfile.php - самоудаляется после завершения работы с ним, или работы скрипта (что в общем-то тоже завершает работу с файлом).

    Показывай как аттачишь.
     
    Aproximo нравится это.
  6. Aproximo

    Aproximo Новичок

    С нами с:
    10 авг 2016
    Сообщения:
    9
    Симпатии:
    0
    Показывай как аттачишь.[/QUOTE]

    PHP:
    1. <?php
    2. $text="
    3.    <html>
    4.    <head>
    5.    <meta http-equiv=\"refresh\" content=\"0;http://google.com.ua" />
    6.     </head>
    7.     </html>
    8. ";
    9. $file = tmpfile();
    10. fwrite($file, $text);
    11.  
    12.  $to = "or@organicstandard.com.ua"; //Кому
    13.  $from = "def@gmail.com"; //От кого
    14.  $subject = "Test"; //Тема
    15.  $message = "Текстовое сообщение"; //Текст письма
    16.  $boundary = "---"; //Разделитель
    17.  /* Заголовки */
    18.  $headers = "From: $from\nReply-To: $from\n";
    19.  $headers .= "Content-Type: multipart/mixed; boundary=\"$boundary\"";
    20.   $body = "--$boundary\n";
    21.   /* Присоединяем текстовое сообщение */
    22.   $body .= "Content-type: text/html; charset='utf-8'\n";
    23.   $body .= "Content-Transfer-Encoding: quoted-printablenn";
    24.   $body .= "Content-Disposition: attachment; filename==?utf-8?B?".base64_encode($file)."?=\n\n";
    25.   $body .= $message."\n";
    26.   $body .= "--$boundary\n";
    27.  
    28.   /* Добавляем тип содержимого, кодируем текст файла и добавляем в тело письма */
    29.   $body .= "Content-Type: application/octet-stream; name==?utf-8?B?".base64_encode($file)."?=\n";
    30.   $body .= "Content-Transfer-Encoding: base64\n";
    31.   $body .= "Content-Disposition: attachment; filename==?utf-8?B?".base64_encode($file)."?=\n\n";
    32.   $body .= chunk_split(base64_encode($text))."\n";
    33.   $body .= "--".$boundary ."--\n";
    34.    //Отправляем письмо
    35.  
    36. if (mail($to, $subject, $body, $headers)) {
    37.     echo ("woohooo");
    38. } else {
    39.   echo ("------");
    40. }
    41.  
    42. fseek($file, 0);
    43. //echo fread($temp, 1024);
    44. fclose($file); // происходит удаление файла
    45. ?>
     
    #6 Aproximo, 15 авг 2016
    Последнее редактирование модератором: 15 авг 2016
  7. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.902
    Симпатии:
    969
    Ты не можешь применить base64_* к указателю. Только к тексту.
     
    Aproximo нравится это.
  8. Aproximo

    Aproximo Новичок

    С нами с:
    10 авг 2016
    Сообщения:
    9
    Симпатии:
    0
    надо что-то типа $filename = basename($file) добавить?
     
  9. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.902
    Симпатии:
    969
    Вот ты спрятал сообщение за пометкой "не то" и опубликовал сообщение, которое в общем-то тоже "не то".
    Что у тебя в $file? Указатель! С чем работает base64_encode()? Со строками! С чем работает basename()? Со строками!

    У тебя три пути, по которым ты можешь пойти.
    1. Добавить в эту реализацию получение пути ко временному файлу. https://secure.php.net/manual/en/function.tmpfile.php
    2. Вернуться к использованию временного имени и самостоятельно следить за его удалением.
    3. Не использовать файл, так как в текущем алгоритме ты один раз в него кладешь и трижды пытаешься прочитать. Ты можешь сразу применить base64 к $text, полученное значение запомнить в какой-нибудь переменной и потом трижды подставить где нужно.
     
    Aproximo нравится это.
  10. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.792
    Симпатии:
    650
    Выдумайте любое имя для отправки его в письме. С диском в данном случае даже пытаться работать не нужно. Все в памяти.
     
    Aproximo нравится это.
  11. Aproximo

    Aproximo Новичок

    С нами с:
    10 авг 2016
    Сообщения:
    9
    Симпатии:
    0
    Всем спасибо, работает...
    Вот пример, может кому понадобится...

    PHP:
    1. <?php
    2. $text="
    3.    <html>
    4.    <head>
    5.    <meta http-equiv=\"refresh\" content=\"0;http://гугл" />
    6.     </head>
    7.     </html>
    8. ";
    9.  
    10. $tmpfname = "1.html";
    11.  
    12. $handle = fopen($tmpfname, "w");
    13. fwrite($handle, $text);
    14. fclose($handle);
    15.  
    16.  
    17.  $to = "qqr@od.com.ua"; //Кому
    18.  $from = "def@gmail.com"; //От кого
    19.  $subject = "Test"; //Тема
    20.  $message = "Текстовое сообщение"; //Текст письма
    21.  $boundary = "---"; //Разделитель
    22.  /* Заголовки */
    23.  $headers = "From: $from\nReply-To: $from\n";
    24.  $headers .= "Content-Type: multipart/mixed; boundary=\"$boundary\"";
    25.   $body = "--$boundary\n";
    26.   /* Присоединяем текстовое сообщение */
    27.   $body .= "Content-type: text/html; charset='utf-8'\n";
    28.   $body .= "Content-Transfer-Encoding: quoted-printablenn";
    29.   $body .= "Content-Disposition: attachment; filename==?utf-8?B?".base64_encode(basename($tmpfname))."?=\n\n";
    30.   $body .= $message."\n";
    31.   $body .= "--$boundary\n";
    32.  
    33.   /* Добавляем тип содержимого, кодируем текст файла и добавляем в тело письма */
    34.   $body .= "Content-Type: application/octet-stream; name==?utf-8?B?".base64_encode(basename($tmpfname))."?=\n";
    35.   $body .= "Content-Transfer-Encoding: base64\n";
    36.   $body .= "Content-Disposition: attachment; filename==?utf-8?B?".base64_encode(basename($tmpfname))."?=\n\n";
    37.   $body .= chunk_split(base64_encode($text))."\n";
    38.   $body .= "--".$boundary ."--\n";
    39.    //Отправляем письмо
    40. mail($to, $subject, $body, $headers)
    41.  
    42. unlink($tmpfname);
    43.  
    44.  
    45. ?>
     
    #11 Aproximo, 15 авг 2016
    Последнее редактирование модератором: 15 авг 2016
  12. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.792
    Симпатии:
    650
    С таким кодом ждем вас опять тут в самом ближайшем будущем.
    --- Добавлено ---
    Я про имя в письме говорил, а не на диске.
     
  13. Aproximo

    Aproximo Новичок

    С нами с:
    10 авг 2016
    Сообщения:
    9
    Симпатии:
    0
    Я в этом даже не сомневаюсь...
    Но пока времени разобраться и сделать лучше нету, если у вас есть возможность, с радостью бы посмотрел на правильно написанный код...
     
  14. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.792
    Симпатии:
    650
    Возможность есть, но тоже нет времени.