0

我必须归档才能发送邮件。

第一个是html文件。

邮件html.php

<form action="mailsend.php" method="post">
  <label for="name">Name:</label>
  <input type="text" name="name" id="name" />

  <label for="Email">Email:</label>
  <input type="text" name="email" id="email" />

  <label for="Message">Message:</label><br />
  <textarea name="message" rows="20" cols="20" id="message"></textarea>

  <input type="submit" name="submit" value="Submit" />
</form>

其次是mailsend.php

<?php
       try{
       $name = trim(strip_tags($_POST['name']));
       $email = trim(strip_tags($_POST['email']));
       $message = htmlentities($_POST['message']);

       // set here
       $subject = "Contact form submitted!";
       $to = 'test@test.com';

       $body = <<<HTML
$message
HTML;

       $headers = "From: $email\r\n";
       $headers .= "Content-type: text/html\r\n";

       // send the email
       if(mail($to, $subject, $body, $headers))
       {
            echo "success";
       }
       else
       {
        echo "Not Success";
       }
       }
       catch (Exception $e) {
    echo 'Caught exception: ',  $e->getMessage(), "\n";
}
?>

邮件发送成功,但我的 html 数据未在邮件中呈现。它看起来和我在文本框中插入的一样。见图片。那是我在邮件中收到的。在此处输入图像描述

4

3 回答 3

2

请首先注意,此表单允许潜在的攻击者使用您的网站向其他人发送垃圾邮件。您没有正确清理 $_POST 值,您只是从中剥离标签,因此可以添加自定义标题。

例如,如果我要发布到您的表格

  $_POST['email'] = "spam_target1@domain.com\r\nCC: spam_target2@domain.com, spam_target3@domain.com, spam_target3@domain.com, ...

我将能够向使用您的服务器的用户列表发送大量垃圾邮件。

在邮件标题中使用它们之前,请确保从您收到的值中删除任何新行 ( \n) 和回车 ( )。\r

至于您的实际编码问题,您正在使用htmlentities($_POST['message'],因此您发送的消息将其所有 html 标签转换为文本实体(例如<变为&lt;

于 2013-06-17T19:34:21.753 回答
1

听起来消息格式不正确。确保包含文档类型和标签

<!DOCTYPE HTML>
<html>
your message here
</html> 
于 2013-06-17T19:24:30.977 回答
0

正如尼克所说,一定要添加 DOCTYPE 和其他标签,而且你htmlentities($_POST['message'])正在将你的 < 和 > 转换为&lt;&gt;

根据PHP 文档中的htmlentities

于 2013-06-17T19:31:48.003 回答