Birthday Reminders for August

mail

Каждая строка должна быть отделена символом CRLF (\r\n). Строки не должны быть длиннее 70 символов.

(Только для Windows) Если PHP передаёт данные напрямую SMTP-серверу и в начале строки стоит точка, то она будет удалена. Чтобы избежать этого замените все такие точки на две.

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

Обычно используется для добавления дополнительных заголовков (From, Cc, and Bcc). Несколько дополнительных заголовков должны быть разделены CRLF (\r\n). Если для составления этого заголовка используются внешние данные, то они должны быть проверены для избежания инъекций нежелательных заголовков.

Замечание:

При отправке письмо должно содержать заголовок From. Он может быть установлен с помощью параметра additional_headers , или значение по умолчанию может быть установлено в php.ini .

Если заголовок отсутствует, будет сгенерировано сообщение об ошибке вида Warning: mail(): «sendmail_from» not set in php.ini or custom «From:» header missing. Заголовок From также определяет заголовок Return-Path в Windows.

Замечание:

Если сообщения не отправляются, попробуйте использовать только LF (\n). Некоторые агенты пересылки сообщений Unix (особенно » qmail) автоматически заменяют LF на CRLF (что приводит к двойному CR, если использовалось CRLF). Используйте эту меру в крайнем случае, так как это нарушает » RFC 2822.

Параметр additional_parameters может быть использован для передачи дополнительных флагов в виде аргументов командной строки для программы сконфигурированной для отправки писем, указанной директивой sendmail_path. Например, можно установить отправителя письма при использовании sendmail с помощью опции -f.

Параметр автоматически экранируется функцией escapeshellcmd() , чтобы не допустить выполнение команд. Но escapeshellcmd() позволяет добавлять дополнительные параметры. В целях безопасности рекомендуется проверять и очищать этот параметр.

Так как escapeshellcmd() применяется автоматически, то нельзя использовать некоторые символы, допустимые к использованию в email-адресах некоторыми RFC. mail() не допускает такие символы, поэтому в программах, в которых они требуются, рекомендуется использовать альтернативы для их отправки (например фреймворки или библиотеки).

Пользователь, под которым работает веб-сервер должен быть добавлен в список доверенных в конфигурации sendmail для того чтобы избежать добавления заголовка ‘X-Warning’ при указании отправителя с помощью опции (-f). Для пользователей sendmail — это файл /etc/mail/trusted-users .

Возвращаемые значения

Возвращает TRUE , если письмо было принято для передачи, иначе FALSE .

Важно заметить, что то что письмо было принято для передачи вовсе НЕ означает что оно достигло получателя.

Список изменений

Версия Описание
4.2.3 Параметр additional_parameters отключен в режиме safe_mode и при его использовании функция mail() вызовет предупреждение и вернет FALSE .

Примеры

Пример #1 Отправка письма.

Использование функции mail() для отправки простого письма:

// Сообщение
$message = «Line 1\r\nLine 2\r\nLine 3» ;

Читайте также:  Обновление php my admin

// На случай если какая-то строка письма длиннее 70 символов мы используем wordwrap()
$message = wordwrap ( $message , 70 , «\r\n» );

// Отправляем
mail ( ‘caffeinated@example.com’ , ‘My Subject’ , $message );
?>

Пример #2 Отправка письма с дополнительными заголовками.

Добавление простых заголовков, сообщающих почтовому агенту адреса From и Reply-To:

$to = ‘nobody@example.com’ ;
$subject = ‘the subject’ ;
$message = ‘hello’ ;
$headers = ‘From: webmaster@example.com’ . «\r\n» .
‘Reply-To: webmaster@example.com’ . «\r\n» .
‘X-Mailer: PHP/’ . phpversion ();

mail ( $to , $subject , $message , $headers );
?>

Пример #3 Отправка письма с дополнительными аргументами командной строки.

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

Пример #4 Отправка HTML-сообщения

С помощью функции mail() также можно отправить и HTML-письмо.

// несколько получателей
$to = ‘aidan@example.com’ . ‘, ‘ ; // обратите внимание на запятую
$to .= ‘wez@example.com’ ;

// тема письма
$subject = ‘Birthday Reminders for August’ ;

// текст письма
$message = ‘


Here are the birthdays upcoming in August!

Person Day Month Year
Joe 3rd August 1970
Sally 17th August 1973



‘ ;

// Для отправки HTML-письма должен быть установлен заголовок Content-type
$headers = ‘MIME-Version: 1.0’ . «\r\n» ;
$headers .= ‘Content-type: text/html; charset=iso-8859-1’ . «\r\n» ;

// Дополнительные заголовки
$headers .= ‘To: Mary , Kelly ‘ . «\r\n» ;
$headers .= ‘From: Birthday Reminder ‘ . «\r\n» ;
$headers .= ‘Cc: birthdayarchive@example.com’ . «\r\n» ;
$headers .= ‘Bcc: birthdaycheck@example.com’ . «\r\n» ;

// Отправляем
mail ( $to , $subject , $message , $headers );
?>

Замечание:

Для отправки HTML или других комплексных сообщений рекомендуется использовать PEAR-пакет » PEAR::Mail_Mime.

Примечания

Замечание:

Реализация функции mail() в Windows во многом отличается от реализации в Unix. Во-первых, она не использует локальную программу для составления писем, а работает непосредственно с сокетами, что означает что необходим почтовый агент (MTA), ожидающий соединений на сокете (может быть как на локальном так и на удаленном сервере).

Во-вторых, дополнительные заголовки вроде: From:, Cc:, Bcc: и Date: интерпретируются в первую очередь не, MTA, а PHP.

Поэтому параметр to не должен быть адресом вида «Something «. Команда mail может неправильно интерпретировать этот адрес во время передачи данных MTA.

Замечание:

Не следует использовать функцию mail() для отправки большого количества писем в цикле. Функция открывает и закрывает соединение с SMTP-сервером для каждого письма, что не очень эффективно.

Для отправки большого количества сообщений обратите внимание на пакеты » PEAR::Mail и » PEAR::Mail_Queue.

Смотрите также

Источник

Отправка e-mail в PHP

Отправка e-mail в PHP

Обычно я пишу вступление о том, почему данная тема так важна для изучения. Но не в этот раз, потому что здесь, уверен, ни у одного человека не возникнет вопрос: «Зачем отправлять e-mail в PHP?». Поэтому предлагаю сразу приступить к делу и узнать об этом более подробно, тем более, что проще реализации отправки e-mail через PHP и придумать нельзя, так что поймут даже те, кто не знаком с PHP вообще.

Для начала давайте с Вами разберёмся немного с теорией. Скучно, но поверьте важно. Для отправки e-mail необходим SMTP-сервер. На большинстве платных хостингах он обязательно имеется. Однако, если такой возможности нет (допустим, хостинг бесплатный или очень дешёвый), то тогда можно воспользоваться сторонним SMTP-сервером (например, mail.ru). То есть главное: для отправки необходим SMTP-сервер.

Во-вторых, чтобы принимать e-mail необходим POP-сервер. К чему я всё это говорю. А к тому, что очень часто люди спрашивают на форумах: «Почему у меня не работает отправка e-mail в PHP?«. А при этом люди пытаются отправить письма с сервера, на котором вообще нет SMTP. Очень важно: PHP e-mail не отправляет! Отправляет e-mail приложение sendmail, которое имеется на операционных системах Unix, на которых и стоят большинство серверов. А PHP просто передаёт команды этому приложению. Надеюсь, объяснил понятно. Поэтому первое, что необходимо сделать — это раздобыть приложение sendmail. Но порадую тех, кто пользуется пакетом Denwer, так как у них это приложение уже встроено. Правда, с одной особенностью. Реальной отправки писем не происходит — они все складываются в директорию «tmp/!sendmail«. Но если письмо, которое Вы отправили в PHP, там оказалось, то можете быть уверены, что на 99% на реальном хостинге всё будет работать. Хотя, если Вам очень хочется по-настоящему отправлять e-mail, то Вы можете скачать sendmail, настроить его на какой-нибудь SMTP-сервер, например, mail.ru, затем изменить путь к sendmail в php.ini (настройки PHP) и дальше уже радоваться жизни.

А теперь переходим к PHP. Для отправки e-mail используется всего одна функция — mail(). Принимает эта функция четыре параметра, три из которых являются обязательными:

Как видите, всё интуитивно понятно: кому отправлять, какая тема и само сообщение. Если Вы используете пакет Denwer, то после запуска скрипта, Вы сможете найти файл в директории «tmp/!sendmail«, в котором и содержатся данные Вашего письма. Открыть эти файлы можно либо в блокноте, но лучше открыть их в какой-нибудь почтовой программе (например, The Bat или Microsoft Outlook).

Я не даром написал вперемешку русский и английский текст, чтобы проверить кодировку. Очень часто она распознаётся неправильно, и в результате, пользователи видят «абракадабру«. Чтобы этого избежать необходимо задать кодировку. И как раз для кодировки, а также для других особых параметров и существует четвёртый аргумент функции mail():

$to /cdn-cgi/l/email-protection» data-cfemail=»e8898a8ba88f85898184c68b8785″>[email protected]»;
$subject = «Robot — Робот»;
$message = «Message,\n сообщение!»;
$headers /cdn-cgi/l/email-protection» data-cfemail=»1e7f7c7d5e79737f7772307d7173″>[email protected]>\r\nContent-type: text/plain; charset=windows-1251 \r\n»;
mail ($to, $subject, $message, $headers);
?>

Теперь давайте расшифрую то, что здесь написано. В переменной headers мы задали следующие параметры: в поле «От кого» будет стоять «[email protected]» (то есть сообщения можно отправлять далеко не от своего имени). Сообщение также является обычным текстовым (text/plain) в кириллической кодировке (windows-1251), то есть в нашей с Вами родной кодировке, в которой имеется русский язык и английский. И, кстати, «\n» — это переход на новую строку (аналог
в HTML).

Также сообщения можно отправлять в HTML-формате. Для этого достаточно всего лишь заменить «text/plain» на «text/html«. И Вы сможете в сообщении использовать HTML-теги. Только не забывайте, что всякие теги, наподобие: » «, » » и другие, — фильтруются любой уважающей себя почтовой системой. Однако, использовать теги оформления (» «, » «, «
» и другие) Вы можете. И давайте, напоследок, отправим e-mail с использованием HTML-тегов:

$to /cdn-cgi/l/email-protection» data-cfemail=»e1808382a1868c80888dcf828e8c»>[email protected]»;
$subject = «Robot — Робот»;
$message ;
$headers /cdn-cgi/l/email-protection» data-cfemail=»8cedeeefccebe1ede5e0a2efe3e1″>[email protected]>\r\nContent-type: text/html; charset=windows-1251 \r\n»;
mail ($to, $subject, $message, $headers);
?>

Вот и всё. Как видите, тема очень простая, а отправлять e-mail в PHP очень важно уметь.

Создано 23.11.2010 12:36:00

  • Михаил Русаков
  • Источник

    php вычислить логин из email

    Вопрос в следующем: Хочу сделать быструю регистрацию, тоесть юзер введёт только email. Движку нужен логин, хочу его вычислить из мыла. Кто-нибудь знает способ как на php можно вычислить все символы до знака @ ? P.S. К примеру из admin@mail.ru нужно получить только admin

    4 ответа 4

    Жесть, уж такое можно нагуглить самому.
    Так проще всего:

    $mail = 'root@kali.org'; $login = explode('@', $mail)[0]; 
    $email = 'name@example.com'; $user = strstr($email, '@', true); // Начиная с PHP 5.3.0 echo $user; // выводит name 
    $string = 'admin@mail.ru'; $pattern = '/@.*?$/'; $replacement = ''; $user_name = preg_replace($pattern, $replacement, $string); 
    $parts = explode("@", "admin@mail.ru "); $username = $parts[0]; 

    Эмн, ты чего с регуляркой выдумал? Во-первых, это слишком сложно для простой вырезки логина, а во-вторых, это вырежет всё, кроме собаки, вроде бы.

    Честно сказать, я удивлен, почему никто не предложил самый быстрый и наименее ресурсоемкий способ вычленения подстроки из строки:

    $email = 'admin@example.com'; print substr($email, 0, strpos($email, '@')); 

    Если нет гарантии, что символ @ всегда будет присутствовать в данной строке, используйте условие:

    $email = 'admin@example.com'; $login = $email; if (false !== $pos = strpos($email, '@')) $login = substr($email, 0, $pos); print $login; 

    Функции substr и strpos будут работать намного быстрее и использовать значительно меньше памяти, чем создание массива с помощью explode и работа с регулярными выражениями в preg_match / preg_replace . Особенно это будет заметно на коротких строках (как в адресах электронной почты).

    Источник

    Оцените статью