оцените функцию для отправки писем

test524

Новичок
оцените функцию для отправки писем

написал простую фунцию для отправки писем без вложения в html-формате. Постарался учесть все требования к формированию письма, что нашел и не приписывать ненужных строк в заголовке письма. Если не трудно, оцените функцию. Буду признателен за любые критические замечания

PHP:
<?php

$letter = array();
$letter['subject'] = 'тестовое письмо';
$letter['body'] = '<p>html-text письма<p>';
$letter['emailFrom'] = '[email protected]';
$letter['titleFrom'] = 'тестер';

sendMail('[email protected]', $letter['subject'], $letter['body'], $letter['emailFrom'], $letter['titleFrom']);

function sendMail($emailTo, $subject, $body, $emailFrom, $titleFrom) {
    
	$header  = 'From: =?Windows-1251?B?' . base64_encode($titleFrom) . '?= <' . $emailFrom . '>' . "\r\n";
	$header .= 'Reply-to: ' . $emailFrom  . "\r\n";
	$header .= 'Return-Path: ' . $emailFrom  . "\r\n";
	$header .= 'MIME-Version: 1.0' . "\r\n";
	$header .= 'Content-Type: ' . 'text/html' . '; charset=' . 'Windows-1251' . "\r\n";
	$header .= 'Content-Transfer-Encoding: base64';
	
	$subject = '=?Windows-1251?B?' . base64_encode($subject) . '?=';
	$body = base64_encode($body);
	
	mail($emailTo, $subject, $body, $header);
}

?>
 

Фанат

oncle terrible
Команда форума
непонятно, зачем массив с параметрами, если при вызове указываются все равно по одному.
а в остальном - нормально, вроде.
работает? значит, нормальная функция
 

Potaevsky

Новичок
Функция ничего - с другой стороны вопрос в том, для чего она используется и как часто. Если у тебя массовая рассылка по 100500 адресам, то тогда да - если же письма отправляются редко - то я бы на твоем месте заюзал бы какой-нить PHPMailer или что-нить в этом роде - чтобы если вдруг тебе пришлось таки сделать письма в utf или добавить вложение - не пришлось все переписывать :)
 

test524

Новичок
*****

спасибо за ответ

массив просто для группировки данных - делал print_r() того что передается в sendMail() после генерации письма и сгруппировал.

неа, не работает как надо ... Не доходят письма на rambler.ru и mail.ru. Но доходят на gmail.com и yandex.ru

Так что, я подумал, два варианта:

- либо я накосячил в функции отправки письма и не вижу где
- либо ip сайта забанен этими почтовыми системами и не пропускает письма

т.к. доменное имя новое, хостинг купил совсем недавно и не рассылал никакого спама (точнее, вообще никаких писем не посылал) с этого сайта, то других вариантов вроде нет

Potaevsky

нет, никаких массовых рассылок - написал ее для регистрации пользователей
 

Духовность™

Продвинутый новичок
Я бы сделал классом

- с возможностью указывать шаблон письма и метками-заменителями типа {user_name} заменяющиеся на значения, передаваемые через _set() -- что бы не формировать html в программе
- с указанием различных кодировок и content-type
 

Фанат

oncle terrible
Команда форума
попробуй написать им в суппорт.
или отправь из аутлук-экспресса письмо на мейлру, открой его исходник в "отправленных" и скопируй структуру себе
 

Gremboloid

инженера Гр...
Автор оригинала: test524
>Не доходят письма на rambler.ru и mail.ru. Но доходят на gmail.com и yandex.ru

большая вероятность причины этого безобразия в том, что сервер попал в черные списки как злостный спамер.

у себя вылечил тем что писал в суппорт на майл.ру, выискивал эти самые списки и писал в их суппорт с просьбой вычеркнуть из них. итог: месяц переписки.
но письма начали доходить.

ЗЫ не помню где, но на каком то сайте вычитал: Подписка на новости для адресов с маилру заблокирована из-за разп...ва суппорта майл.ру
 

Димон

Новичок
Автор оригинала: triumvirat
затем, что велосипед дает опыт, а саой функции mail хватает для работы в большинстве случаев.
Неправильный это опыт. Надо развивать и учиться применять технологии, а не заново изобретать их.
 

Фанат

oncle terrible
Команда форума
чтобы что-то применять, это надо знать.
а то тут таких применятелей как собак нерезаных.
"я сделал а оно ниработаииит!"
 

Crys

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

http://www.php.net/chunk_split
http://www.mailinjection.com/howitworks

А то у меня потом на письма, отправленные подобными функциями провайдер гневные автоответы шлет о некорректном синтаксисе. Хотя письма читабельные приходят.
 

SiMM

Новичок
> Вот здесь и появляется опыт, когда в этом сам разбираешься.
Почему-то зачастую этот опыт ограничивается воплями по форумам рунета, вместо отладки. Уж не потому ли, что человек не понимает ни строчки кода?
 

findnext

Новичок
я тоже не вижу ни одной инъекции
PHP:
$letter = array();
$letter['subject'] = 'тестовое письмо';
$letter['body'] = '<p>html-text письма<p>';
$letter['emailFrom'] = '[email protected]';
$letter['titleFrom'] = 'тестер';
:D

-~{}~ 19.03.09 20:32:

А то у меня потом на письма, отправленные подобными функциями провайдер гневные автоответы шлет о некорректном синтаксисе.
улыбнуло....синтаксисе чего? php кода ? :D:D:D
 

x-yuri

Новичок
по поводу велосипедов: думаю полезно и то (изобретение), и другое (использование)

-~{}~ 19.03.09 19:46:

а где там инъекции?
реальных пока не вижу, только потенциальные: зависит от того, как эта функция использоваться будет
 

test524

Новичок
Автор оригинала: Crys
Приведенная в первом сообщении функция не имеет права на нормальную жизнь из-за нарушения стандартов и потенциальных инъекций. Имхо, функция должна быть рассчитана на то, что в неё может попасть что угодно.

http://www.php.net/chunk_split
http://www.mailinjection.com/howitworks
:) спасибо.

если мы вылечим первое:
$body = chunk_split(base64_encode($body));
и забьем на второе (эта функция отвечает только за отправку данных в виде письма, а проверкой и выводом ошибок будем считать, что занимается другая фунция - имхо, это логично), тогда имеет право на нормальную жизнь? :)

Автор оригинала: x-yuri

реальных пока не вижу, только потенциальные: зависит от того, как эта функция использоваться будет
использоваться пока будет для отправки шаблонных сообщений (при регистрации), e-mail получателя (единственный сторонний параметр) проверяется регулярным выражением

--

готовые решения по отправке почты слишком сложные, оно и понятно: они умеют выбирать кодировку, тип, отсылать письмо через сокеты и кучу всего. Мне же пока нужна простая фунция, которая может грамотно отправить сообщение в заранее заданной кодировке, в виде html и без прикрепленных файлов. Сначала думал, будет достаточно функции mail(), потом понял, что как минимум надо добавить заголовки from и reply, дальше больше ... :) но наверняка все здесь присутствующие через это прошли когда-то - даже те кто за phpMail ;)

--

попробовал запустить скрипт с другого хостинга - все ок - доходит и на мейл.ру - так что по-ходу ip моего сайта в бан-листе у мейл.ру. написал на суппорт@corp.mail.ru, но не порадовало уже то, что не пришло никакого тикета в ответ. Если, чтобы выйти из этого списка нужен месяц переписки, то проще будет сменить хостинг или попросить хостера перенести сайт на сервер с другим ip.
 

Sad Spirit

мизантроп (Старожил PHPClub)
Команда форума
Автор оригинала: triumvirat
затем, что велосипед дает опыт, а саой функции mail хватает для работы в большинстве случаев.
Для постройки качественного велосипеда нужно внимательно прочитать RFC 2822 и RFC 2047. Так вот, товарищ любитель велосипедов, расскажи нам, пожалуйста, где и почему функция из исходного сообщения не соответствует указанным RFC?

Да, к не в меру улыбчивому findnext вопрос тоже относится.
 
Сверху