邮件发送在PHP

时间:2013-06-17 19:22:00

标签: php email

我必须提交邮件。

第一个是html文件。

mailhtml.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数据没有在邮件中呈现。它看起来和我在文本框中插入的相同。见图。我收到的是邮件。 enter image description here

4 个答案:

答案 0 :(得分: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;

答案 1 :(得分:1)

听起来信息格式不正确。确保包含doctype和标签

<!DOCTYPE HTML>
<html>
your message here
</html> 

答案 2 :(得分:0)

正如尼克所说,请务必添加DOCTYPE和其他代码,同时您的htmlentities($_POST['message'])正在转换您的&lt;和&gt;到&lt;&gt;

根据PHP文档中的htmlentities

答案 3 :(得分:0)

<form action="" method="post">

    Subject: <input name="subject" type="text" />

    Message:

    <textarea name="comment" ></textarea>

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

<?php

        if(isset($_POST['submit']))
        {
            $to = 'example@example.com';
            $subject = $_POST['subject'];
            $message = $_POST['comment'];
            $headers = 'From: example@example.com';
            $send_email = mail($to, $subject, $message, $headers);
            if($send_email == true)
            {
                echo "Email Successfully Insert.";
            }
            else
            {
                echo "Email Not Send.";
            }
        }
            ?>