Отправка HTML-адреса электронной почты на php?

Вот код.

$to = 'youraddress@example.com'; $subject = 'Test HTML email'; //create a boundary string. It must be unique //so we use the MD5 algorithm to generate a random hash $random_hash = md5(date('r', time())); //define the headers we want passed. Note that they are separated with \r\n $headers = "From: webmaster@example.com\r\nReply-To: webmaster@example.com"; //add boundary string and mime type specification $headers .= "\r\nContent-Type: multipart/alternative; boundary=\"PHP-alt-".$random_hash."\""; //define the body of the message. ob_start(); //Turn on output buffering ?> --PHP-alt-<?php echo $random_hash; ?> Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit Hello World!!! This is simple text email message. --PHP-alt-<?php echo $random_hash; ?> Content-Type: text/html; charset="iso-8859-1" Content-Transfer-Encoding: 7bit <h2>Hello World!</h2> <p>This is something with <b>HTML</b> formatting.</p> --PHP-alt-<?php echo $random_hash; ?>-- <? //copy current buffer contents into $message variable and delete current output buffer $message = ob_get_clean(); //send the email $mail_sent = @mail( $to, $subject, $message, $headers ); //if the message is sent successfully print "Mail sent". Otherwise print "Mail failed" echo $mail_sent ? "Mail sent" : "Mail failed"; ?> 

Я не следую ему хорошо. ожидайте, что кто-то может оказать мне услугу.

  1. Почему я должен генерировать случайный хеш?

  2. Почему я должен добавить строку заголовка и спецификацию типа mime в заголовок?

  3. Зачем использовать ob_start () ;?

4.

 --PHP-alt-<?php echo $random_hash; ?> Content-Type: text/html; charset="iso-8859-1" Content-Transfer-Encoding: 7bit 

Что означают эти строки? Могу ли я удалить их? Спасибо.

Solutions Collecting From Web of "Отправка HTML-адреса электронной почты на php?"

  1. Генерация случайного хэша заключается в том, чтобы избежать его столкновения с вашим контентом.

  2. «Пограничная строка» сообщает клиентам электронной почты, в которых запускаются и останавливаются заголовки, и где начинается фактическое содержимое электронной почты. Поскольку вы хотите отправить HTML-адрес электронной почты, вы должны специально указать клиенту электронной почты, что он будет получать HTML, а не только контент.

  3. В противном случае HTML и прочее будут отправляться непосредственно в браузер, т. Е. Пользователь просматривает ваш сайт. Вместо этого вы хотите сохранить HTML в переменной и использовать его вместо этого.

  4. Content-Type сообщает клиенту электронной почты, какой контент вы отправляете и как он кодируется .

Конечно, вы не можете их удалить. Это было бы похоже на отправку PDF-файла, не говоря о том, что это PDF-файл и без надлежащего расширения – вы не будете знать, что с ним делать.

Заметка

Письма, веб-сайты, все, что имеет структуру (включая большинство файлов), обычно выкладываются в структуре «header» и «body».

Заголовок сообщает файловому читателю, что ожидать в «теле». «Тело» – это фактическое содержание, с которым читатель должен что-то делать.

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

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

Граничная часть используется для разделения содержимого одной части формы содержимого другой части и из заголовка.

Использование буфера вывода PHP (ob_start и ob_end_clean) вообще не требуется, вы также можете просто вводить строки с использованием кавычек или используя HEREDOC. Преимущество использования выходного буфера заключается в том, что вы можете завершить PHP (используя ?> ), И ваша IDE поможет вам писать HTML. Обязательно добавьте ob_end_clean(); хотя, это еще не в вашем коде.

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

  2. Вам нужна граница для разделения сообщения по частям. Сообщение электронной почты – это не что иное, как поток символов. Вам нужен тип MIME, чтобы клиент электронной почты мог знать, что содержит каждая часть. В противном случае он не мог знать, является ли это HTML или нет (или изображение в формате JPEG или презентация PowerPoint …)

  3. Честно говоря, это похоже на чрезмерную замену для регулярных присвоений строк. Вместо того, чтобы делать $message = 'Hello World!'; , он печатает Hello World! на стандартный вывод и фиксирует стандартный вывод в переменную.

  4. Эти строки означают, что вы заканчиваете одну часть сообщения, и вы начинаете новую, которая содержит HTML. Вы можете удалить их, если не хотите добавлять другую часть сообщения, содержащую HTML, но … это не то, что вы хотите сделать?