使用 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.
大家好,我正在尝试用 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.