使用 HTML 发送 PHP 邮件

Sending PHP mail with HTML

大家好,我正在尝试用 php 发送 HTML 电子邮件。当我单击一页上的按钮时,它会加载 php 文件并向其发送应通过邮件发送的数据。该数据是 HTML 代码,我也使用相同的 variable/code 在 PHP 文件中生成内容。内容生成完美,但电子邮件为空,虽然我发送了与我用来在该页面上制作内容相同的变量。代码是

                            <?php 
                            $message=$_POST["email"];
                            echo $message;//Use variable to generate content
                            if (isset($_POST['button1'])) 
                            {          

                                    $to = 'test@gmail.com';                                                                            
                                    $subject = 'Subject';
                                    $headers[] = 'MIME-Version: 1.0';
                                    $headers[] = 'Content-type: text/html; charset=iso-8859-1';
                                    mail($to, $subject, $message, implode("\r\n", $headers));
                            }                            
                            ?>
                            <form method="POST" action=''>
                           <input type="submit" name="button1"  value="Send mail" class="btn">

编辑:如果我手动输入 html 代码,它就可以工作。

根据文档 (https://secure.php.net/manual/en/function.mail.php),您的 headers 似乎没问题 #4.

您在第 2 行代码中使用的字段 "email" 未包含在表单中!

<?php

function mailX($to, $subject, $message, $headers) {
    var_dump($message);
}

if (array_key_exists('button1', $_POST)) {
    $headers[] = 'MIME-Version: 1.0';
    $headers[] = 'Content-type: text/html; charset=iso-8859-1';

    mailX(
        'test@gmail.com',
        'Subject',
        array_key_exists('email', $_POST) && !empty($_POST['email']) ? $_POST['email'] : 'Empty message!',
        implode("\r\n", $headers)
    );
}

?>
<form method="POST">
    <input type="text" name="email">
    <input type="submit" class="btn" name="button1" value="Send mail">
</form>

你真的应该避免发送用户通过 E-Mail 输入的 HTML 这可能会导致 xss-injection 因为他们可以做类似

的事情
<script>alert('TEST');</script>

我建议您使用像 PHPMailer (https://github.com/PHPMailer/PHPMailer) or SwiftMailer (https://swiftmailer.symfony.com/) 这样的库,两者都是 free/open-source。您可以很容易地通过 SMTP 发送邮件(某些托管商要求这样做以避免垃圾邮件),而且库会根据设置优化您的 headers 为 valid/compatible 大多数 (web)mail-clients.