Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Скрипт отправки почты
 
 автор: xxxleoxxx   (02.06.2010 в 19:48)   письмо автору
 
 

Здравствуйте!

Изучаю PHP по книгам Кузнецова и Симдянова. Написал скрипт отправки почты, который человечно работает с UTF-8.

Хотелось бы получить оценку и здоровую критику.



<?php

  
function send_email($name_from// имя отправителя
                        
$email_from// email отправителя
                        
$name_to// имя получателя
                        
$email_to// email получателя
                        
$subject// тема письма
                        
$body// текст письма
                        
$bcc // Слепая копия нескольким абонентам, нумерованый массив, необязательный параметр
                        
) {
//Убираем лишние пробелы
  
$name_from trim($name_from);
  
$email_from trim($email_from);
  
$name_to trim($name_to);
  
$email_to trim($email_to);
  
$subject trim($subject);

  
//Обрезаем переменные до пристойных размеров
    
function utf8_substr($str,$from,$len){ //Функция по человечески обрезает utf-8
        
return preg_replace('#^(?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,'.$from.'}'.
        
'((?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,'.$len.'}).*#s',
        
'$1',$str);
        }
        
  
$name_from utf8_substr($name_from040);
  
$email_from utf8_substr($email_from030);
  
$name_to utf8_substr($name_to040);
  
$email_to utf8_substr($email_to030);
  
$subject utf8_substr($subject0100);

    
//Защищаемся от sql injection
  
$name_from htmlspecialchars(stripcslashes($name_from));
  
$email_from htmlspecialchars(stripcslashes($email_from));
  
$name_to htmlspecialchars(stripcslashes($name_to));
  
$email_to htmlspecialchars(stripcslashes($email_to));
  
$subject htmlspecialchars(stripcslashes($subject));
  
$body htmlspecialchars(stripcslashes($body));
  if(!empty(
$bcc)) foreach($bcc as $val$bcc_clean[] = htmlspecialchars(stripcslashes($val)); 
  
                            
//Приводим заголовки к ASCII стандарту
  
$from '=?utf-8?B?'.base64_encode($name_from).'?=';
  
$to '=?utf-8?B?'.base64_encode($name_to).'?= <'.$email_to.'>';
  
$subject '=?utf-8?B?'.base64_encode($subject).'?=';
 
//Состовляем заголовки  
  
$headers "From: ".$from." <".$email_from.">\r\n";
  
$headers .= "Content-type: text/plain; charset=utf-8\r\n";
  
$headers .= "Mime-Version: 1.0\r\n";

//Добовляем заголовок со слепыми копиями, если задан необязательный параметр $bcc(нумерованный массив)  
  
if(!empty($bcc_clean)) foreach($bcc_clean as $val$headers .= "Bcc: $val\r\n";
  
//Отправляем
  
return mail($to$subject$body$headers);
}


?>

  Ответить  
 
 автор: sim5   (02.06.2010 в 19:56)   письмо автору
 
   для: xxxleoxxx   (02.06.2010 в 19:48)
 

Вы вообще представляте, что такое sql injection?
А письмо в текстовом формате после htmlspecialchars когда либо получали?

  Ответить  
 
 автор: xxxleoxxx   (02.06.2010 в 19:58)   письмо автору
 
   для: sim5   (02.06.2010 в 19:56)
 

Ну с защитой от иньекций я не прав.

А что не так с htmlspecialchars? Отправляем же в формате text/plain

  Ответить  
 
 автор: Trianon   (02.06.2010 в 20:02)   письмо автору
 
   для: xxxleoxxx   (02.06.2010 в 19:58)
 

>А что не так с htmlspecialchars?
>Отправляем же в формате text/plain
Вот именно поэтому и.

  Ответить  
 
 автор: sim5   (02.06.2010 в 20:04)   письмо автору
 
   для: xxxleoxxx   (02.06.2010 в 19:58)
 

От иньекции чего? Вы почту отправляете или...?

>//Приводим заголовки к ASCII стандарту

Это кто вам об этом сказал?

Почитайте, что такое почта, ее форматы, как вообще проверяются поля адресов и что в них нельзя допускать, и т.д., и т.п., а уж потом пишите скрипт свой.

  Ответить  
 
 автор: xxxleoxxx   (02.06.2010 в 20:10)   письмо автору
 
   для: sim5   (02.06.2010 в 20:04)
 

В комментариях я не так выразился. Я хотел защитить от введения нежелательных скриптов в форму, где должно быть текстовое письмо.

А в каком тогда формате передаются заголовки? Разве не ASCII?

  Ответить  
 
 автор: xxxleoxxx   (02.06.2010 в 20:13)   письмо автору
 
   для: xxxleoxxx   (02.06.2010 в 20:10)
 

Можете привести хорошие примеры подобного скрипата?

  Ответить  
 
 автор: sim5   (02.06.2010 в 20:15)   письмо автору
 
   для: xxxleoxxx   (02.06.2010 в 20:10)
 

Вы отправляете письмо в utf, какие еще вопросы? Заголовки (не все подряд конечно) кодируют для того, чтобы русские (для нас родных) символы отправленные в ASCII приходили удобоваримыми, а не в виде крякозябриков.

Выбрасывайте свой скрипт, и сперва прочтите о почте все, что только возможно почитать о ней.

  Ответить  
 
 автор: xxxLEOxxx   (03.06.2010 в 12:11)   письмо автору
 
   для: sim5   (02.06.2010 в 20:15)
 

http://softtime.ru/forum/read.php?id_forum=1&id_theme=74229&page=1

  Ответить  
 
 автор: sim5   (03.06.2010 в 12:20)   письмо автору
 
   для: xxxLEOxxx   (03.06.2010 в 12:11)
 

Я вам уже сказал - читайте и изучайте, и как видно по "новинке", вы этого пока не сделали.

  Ответить  
 
 автор: xxxleoxxx   (03.06.2010 в 12:55)   письмо автору
 
   для: sim5   (03.06.2010 в 12:20)
 

А вы могли бы более явно указать на ошибки?

  Ответить  
 
 автор: sim5   (03.06.2010 в 13:07)   письмо автору
 
   для: xxxleoxxx   (03.06.2010 в 12:55)
 

Открывайте имеющиеся у вас книги, либо ищите поисковиком темы, типа "как отправить почту на PHP" - получите массу материала, которую нужно будет изучить.
Разберите уже имеющиеся скрипты отправки почты, руководствуясь прочитанным - тоже будет полезно для вас.
Если вы хотите писать код, в данном случае отправки почты, то вы должны знать хорошо эту тему. Писать же код, а потом спрашивать об ошибках, убирая те, на которые укажут, и так далее, это пустая трата времени.
В вашем скрипте не просто ошибки, в вашем скрипте незнание этого вопроса. Вы не для меня его пишите, для себя, не я вам должен указывать, а вы знать.

  Ответить  
 
 автор: xxxleoxxx   (03.06.2010 в 14:04)   письмо автору
 
   для: sim5   (03.06.2010 в 13:07)
 

Дело в том, что я уже довольно многое прочитал на эту тему. И действительно не понимаю о чем вы.

  Ответить  
 
 автор: sim5   (03.06.2010 в 14:27)   письмо автору
 
   для: xxxleoxxx   (03.06.2010 в 14:04)
 

Ну тогда я не знаю, что и сказать. Как так читать, чтобы потом такое писать....
Существуют готовые классы отправки почты, непример, phpmailer. Скачайте его из сети, разберите его код, и внимательно. Может это поможет вам понять как пишется код на базе полученных знаний и рекомендаций RFC.

  Ответить  
 
 автор: Николай2357   (03.06.2010 в 15:08)   письмо автору
 
   для: xxxleoxxx   (03.06.2010 в 14:04)
 

Для начала можно тут глянуть одним глазом.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования