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 .
Читайте также:  How to use php classes

Примеры

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

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

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

// На случай если какая-то строка письма длиннее 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.

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

Источник

Отправка почты через PHPmailer (поле от кого)

Здравствуйте.
В ходе написания сайта столкнулся с серьезными проблемами при настройке обратной связи (умные люди говорят, так у всех). Большинство из них удалось решить однако осталась одна небольшая, но довольно неприятная.
Суть:
есть вот такой код:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
function sendemail($fromemail, $fromname, $toemail, $toname, $subject, $message) { date_default_timezone_set("Europe/Moscow"); // временная зона require "mailer/PHPMailerAutoload.php"; // подключили скрипт $mail = new PHPMailer(); // инициализация класса file_exists("/language/phpmailer.lang-ru.php") ? $mail->SetLanguage("ru", "/language/") : $mail->SetLanguage("en", "/language/"); // языковой пакет для ошибок $mail->isSMTP(); // указали, что работаем по протоколу смтп $mail->Host = "host"; // хост SMTP $mail->Port = "25"; // порт SMTP $mail->SMTPAutoTLS = false; $mail->SMTPDebug = 2; $mail->CharSet = "UTF-8"; // кодировка $mail->setFrom($fromemail, $fromname); // от кого $mail->addReplyTo($fromemail, $fromname); // кому ответить $mail->addAddress($toemail, $toname); $mail->Subject = $subject; // тема письма (заголовок) $mail->isHTML(false); $mail->Body = $message; if ($mail->send()) { $a = 'Отправка прошла удачно'; } else {$a = 'Письмо НЕ отправлено '.$mail->ErrorInfo;} return $a; }

Непосредственно отправку сообщения произвожу в отдельном файле с вызовом в нем этой функции и подключением файла с ней.
Так вот: если я отправляю письмо, указывая в переменной $fromemail адрес почты с того же сервера, где лежит сам сайт, то все проходит удачно. Если же, я укажу в $fromemail адрес почты mail.ru, то письмо не дойдет, хотя на экране будет надпись «Отправка прошла удачно».
Как пояснил администратор: сервер mail.ru сильно удивлен, что он получает письмо от нашего сервера, но с почты mail.ru (аналогично будет и с gmail — проверяли).
Однако так сложилось, что нам для общения с пользователями (а помимо обратной связи есть еще и общение через почту напрямую) удобнее использовать именно почту mail.ru.
Таким образом задача сводится к тому, чтобы в отправляемом формой сообщении никак не фигурировал адрес первой почты (с домена хостинга сайта). Возможно как-то либо скрыть этот адрес в поле «От кого», либо обойти такую своеобразную защиту от mail.ru и остальных почтовиков?
Прошу помощи. Заранее благодарен за ответы.

P.S. Хотя бы ReplyTo работает адекватно, т.е. для решения вопроса мне нужно хотя бы полностью скрыть от получателя реальный адрес отправления.

Источник

Отправка почты средствами PHP

Работая над проектом, мне пришлось создать специфичную «анкету соискателя» в котором надо была отправлять всю анкету на указные за ране e-mail адрес, и я сразу же вспомнил про PHP функцию mail().

bool mail ( string to, string subject, string message [, string additional_headers [, string additional_parameters]]) 
  • E-mail получателя
  • Заголовок письма
  • Текст письма
  • Дополнительные заголовки письма
  • Дополнительные параметры командной строки
  • true, если письмо было принято к доставке
  • false, в противном случае.
Простейший пример
Перейдем к более сложному примеру
Текст письма


1-ая строчка
2-ая строчка
'; $headers = "Content-type: text/html; charset=windows-1251 \r\n"; $headers . ; $headers .= "Reply-To: reply-to@example.com\r\n"; mail($to, $subject, $message, $headers); ?>

В начале мы определяем кому адресовано письмо, за это отвечает переменная &to, если же получателей несколько человек, то записываем через запятую адреса эл. почты.

Переменные $subject и $message, не буду описывать, это и так понятно.

  • В первой строчке ми определяем ты отправляемого письма-HTML и кодировку windows-1251.
  • В 2-ом мы указываем от кого пришло письмо.
  • В 3-ем указываем e-mail адрес, для ответа на письмо.
А теперь самое интересное отправка письма c вложением (attachment)
$subject = "тема письма"; $message ="Текст сообщения"; // текст сообщения, здесь вы можете вставлять таблицы, рисунки, заголовки, оформление цветом и т.п. $filename = "file.doc"; // название файла $filepath = "files/file.doc"; // месторасположение файла //исьмо с вложением состоит из нескольких частей, которые разделяются разделителем $boundary = "--".md5(uniqid(time())); // генерируем разделитель $mailheaders = "MIME-Version: 1.0;\r\n"; $mailheaders .="Content-Type: multipart/mixed; boundary=\"$boundary\"\r\n"; // разделитель указывается в заголовке в параметре boundary $mailheaders . ; $mailheaders .= "Reply-To: $user_email\r\n"; $multipart = "--$boundary\r\n"; $multipart .= "Content-Type: text/html; charset=windows-1251\r\n"; $multipart .= "Content-Transfer-Encoding: base64\r\n"; $multipart .= \r\n; $multipart .= chunk_split(base64_encode(iconv("utf8", "windows-1251", $message))); // первая часть само сообщение // Закачиваем файл $fp = fopen($filepath,"r"); if (!$fp) < print "Не удается открыть файл22"; exit(); >$file = fread($fp, filesize($filepath)); fclose($fp); // чтение файла $message_part = "\r\n--$boundary\r\n"; $message_part .= "Content-Type: application/octet-stream; name=\"$filename\"\r\n"; $message_part .= "Content-Transfer-Encoding: base64\r\n"; $message_part .= "Content-Disposition: attachment; filename=\"$filename\"\r\n"; $message_part .= \r\n; $message_part .= chunk_split(base64_encode($file)); $message_part .= "\r\n--$boundary--\r\n"; // второй частью прикрепляем файл, можно прикрепить два и более файла $multipart .= $message_part; mail($to,$subject,$multipart,$mailheaders); // отправляем письмо //удаляем файлы через 60 сек. if (time_nanosleep(5, 0)) < unlink($filepath); >// удаление файла 

Источник

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