繁体   English   中英

无法在php mail()中使用变量$ _SERVER ['HTTP_HOST']

[英]Cannot use variable $_SERVER['HTTP_HOST'] in php mail()

我测试了这个:

<?php
 $to = "recipient@example.com";
 $subject = "Hi!";
 $server = $_SERVER['HTTP_HOST'];
 $body = "From: ". $server. "<br>";
 $body .= "Hi,\n\nHow are you?";
 if (mail($to, $subject, $body)) {
   echo("<p>Message successfully sent!</p>");
  } else {
   echo("<p>Message delivery failed...</p>");
  }
 ?>

尽管显示“成功”的反馈,但它永远不会向我发送电子邮件。 该代码将起作用(实际发送电子邮件),但是如果我删除了

$server = $_SERVER['HTTP_HOST'];

在电子邮件正文中。

很奇怪,这没有道理吗?

这只是一个PHP页面。 我通过浏览器调用此页面! 请试试 ...

更新! 好的,我没有使用$ _SERVER ['HTTP_HOST'],而是直接使用字符串“ user.server.com”。 而且,它没有用! 但是,当我稍微修改一个字符串(例如“ user.server.com.us”)时,它可以工作! 因此,基本上,邮件服务器会填充自己对域的引用,不确定为什么要这样做...

某些垃圾邮件服务器会将您的邮件归为体内网址的“垃圾邮件”。 不幸的是,除非您有权访问发件人和收件人的邮件服务器日志,否则您将很难用mail()查找更具体的错误消息。 提供SwiftMailer或其他PHP Mailing库以获得更好的支持。

使用mail()函数时,需要指定“发件人”标头。 请参考此文档页面,查找“ additional_headers”参数的“注释”部分。

因此,您的mail()调用将如下所示:

mail($to, $subject, $body, 'From: some.guy@example.com');

当然,您不会收到它,因为这些天所有主要的Web邮件都使用反垃圾邮件过滤器,并且您的邮件可能被检测为垃圾邮件。 解决方案是为$ from变量精确指定您的电子邮件,如果您未指定真实电子邮件,则将您的邮件检测为垃圾邮件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM