我有一个相当简单的HTML / PHP表单,只需要将数据发送到我的电子邮件。我正在使用的电子邮件不使用与网站相同的域名。 我已经被困在这几个小时了,我似乎无法找到解决方案。有人可以看看吗?
<?php
$first_name = $_POST['first_name'];
$last_name = $_POST['last_name'];
$message = $_POST['message'];
$gender = $_POST['gender'];
$user_name = $_POST['user_name'];
$email = $_POST['email"];
$message = $_POST['message'];
$from = $_POST['user_name'];
$to = 'example@email.com';
$subject = 'Comment';
$body = "From: $first_name\n From: $last_name\n Sex: $gender\n Username: $user_name\n E-Mail: $email\n Message:\n $message";
if ($_POST['submit']) {
if (mail ($to, $subject, $body, $from)) {
echo 'Your message has been sent!';
} else {
echo 'Something went wrong, go back and try again!';
}
}
?>
答案 0 :(得分:1)
假设您的PHP代码文件是 sendMail.php
让它为 form.html
<form name="sendMail" id="sendMail" action="sendMail.php" method="post">
<input type="text" name="first_name" />
<input type="text" name="last_name" />
<input type="text" name="message" />
<input type="text" name="gender" />
<input type="text" name="user_name" />
<input type="text" name="email" />
<input type="submit" name="submit" />
</form>
基本上,您的PHP代码应该按照上面的形式工作。当然,您可能希望将性别字段更改为radiogroup / dropdown和/或将消息更改为textarea。
<?php
$first_name = $_POST['first_name'];
$last_name = $_POST['last_name'];
$message = $_POST['message'];
$gender = $_POST['gender'];
$user_name = $_POST['user_name'];
$email = $_POST['email'];
$message = $_POST['message'];
$from = $_POST['user_name'];
$to = 'example@email.com';
$subject = 'Comment';
$body = "From: $first_name\n From: $last_name\n Sex: $gender\n Username: $user_name\n E-Mail: $email\n Message:\n $message";
if ($_POST['submit']) {
if (mail ($to, $subject, $body, $from)) {
echo 'Your message has been sent!';
}
else {
echo 'Something went wrong, go back and try again!';
}
}
?>
有一点要纠正$email = $_POST['email"];
应为$email = $_POST['email'];
。
您应该确保必须正确设置PHP邮件设置。我建议你使用PHPMailer这么简单,运行顺畅,配置太少。
答案 1 :(得分:1)
mail()
函数的第四个参数应该是其他电子邮件标头的列表。你传给它一个用户名。你应该有这样的东西:
$email = $_POST['email'];
$email = preg_replace('/[[:cntrl:]]/', '', $email);
$headers = "From: $email\r\n";
...
mail ($to, $subject, $body, $headers);
第二行过滤掉电子邮件地址中的控制字符。如果没有这个,恶意用户可以插入换行符来添加自己的电子邮件标题,例如CC:
标题以发送未经请求的垃圾邮件。
此外,您可能不允许使用与您的网站(或邮件服务器)不同的域名发送带有From:
地址的电子邮件。您可以联系服务器/网站的管理员,询问您的选择。
需要考虑的一些事项:
您可以尝试使用本地From:
地址,并将实际(外部)电子邮件地址保留在Reply-To:
标头中。例如:
$headers = "From: Me@mydomain.example\r\n";
$headers .= "Reply-To: Someone@otherdomain.example\r\n";
但有些电子邮件客户端可能不尊重Reply-To:
标题。
如果From:
标题中的地址不是电子邮件的实际发件人,则应指定{{>真实的发件人{{ 1}}标题。例如:
Sender:
您可能需要在邮件传输代理的附加参数中指定$headers = "From: Someone@otherdomain.example\r\n";
$headers .= "Sender: Me@mydomain.example\r\n";
地址:
From:
通过垃圾邮件过滤器发送来自其他域名的电子邮件可能会对您不利。您可能需要SPF record才能确保电子邮件通过。
您可能最好使用功能齐全的电子邮件类,例如PHPMailer而不是粗略的mail ($to, $subject, $body, $headers, "-f '$email'");
功能。
答案 2 :(得分:1)
首先在if条件下写入isset()。
再次尝试上面的代码。
$first_name = $_POST['first_name'];
$last_name = $_POST['last_name'];
$message = $_POST['message'];
$gender = $_POST['gender'];
$user_name = $_POST['user_name'];
$email = $_POST['email"];
$message = $_POST['message'];
$from = $_POST['user_name'];
$to = 'example@email.com';
$subject = 'Comment';
$body = "From: $first_name\n From: $last_name\n Sex: $gender\n Username: $user_name\n E-Mail: $email\n Message:\n $message";
if (isset($_POST['submit'])) {
if (mail ($to, $subject, $body, $from)) {
echo 'Your message has been sent!';
} else {
echo 'Something went wrong, go back and try again!';
}
}