如何用PHP发送邮件?求助调试邮件发送失败问题
问题排查与修复方案
核心错误:mail()函数参数顺序颠倒
PHP内置mail()函数的正确参数顺序是:
mail($to, $subject, $message, $headers)
你的代码里把**邮件内容($message)和邮件头($baslik)**的位置搞反了,这是导致发送失败的主要原因。
其他错误点
- Content-Type设置错误:你写的
text/php是无效的MIME类型,应该改为text/plain(纯文本)或text/html(HTML格式)。 - 表单存在无效标签:提交按钮后有多余的
</a>,需删除以保证HTML结构合法。 - 缺少邮件主题:当前代码里没有设置邮件主题,
mail()的第二个参数应为主题内容。
修复后的完整代码
HTML表单部分
<form action="eposta.php" method="post"> <table align="center"> <tr valign="baseline"> <td></td> <td><input type="email" name="eposta" required placeholder="E-Postanız" value="" size="50" /></td> </tr> <tr valign="baseline"> <td></td> <td><input type="text" name="isim" placeholder="Adınız" value="" size="50" /></td> </tr> <tr valign="baseline"> <td></td> <td><textarea name="mesaj" required cols="48" rows="5" placeholder="Mesajınız..."></textarea></td> </tr> <tr valign="baseline"> <td nowrap="nowrap" align="right"> </td> <td><input type="submit" value="Gönder" /></td> </tr> </table> <input type="hidden" name="MM_insert" value="form1" /> </form>
PHP处理部分
<?php if(isset($_POST["eposta"])) { $kime = "test@hotmail.com"; $subject = "网站留言来自:".$_POST["isim"]; // 添加邮件主题 $message = $_POST["mesaj"]; // 修正邮件头格式与MIME类型 $headers = "From: ".$_POST["isim"]." <".$_POST["eposta"].">\r\n"; $headers .= "Content-type: text/plain; charset=UTF-8\r\n"; // 明确编码避免乱码 // 修正mail()参数顺序 if (mail($kime, $subject, $message, $headers)) echo "E-Postanız Gönderildi."; else echo "E-Postanız gönderilmedi."; } ?>
额外建议
- 服务器配置检查:如果修复后仍无法发送,需确认服务器是否开启了邮件服务(如Sendmail、Postfix),或是否允许PHP使用
mail()函数。 - 安全优化:对用户输入的
isim、eposta、mesaj进行过滤,比如使用filter_var()验证邮箱,使用htmlspecialchars()防止XSS或邮件头注入。
内容的提问来源于stack exchange,提问作者Massaka
相关产品推荐
相关产品推荐

