【问题标题】:PHP mail function missing charactersPHP邮件功能缺少字符
【发布时间】:2013-05-16 21:08:33
【问题描述】:

我在 php 中的 mail() 函数有一个非常奇怪的错误。

这是我用来发送消息的代码:

        $to = strip_tags($_POST['newMail']);
        $subject = "Company: Update your email address ";
        $message = $mailHeader.'<b>Hello from Company!</b><br/> <br/> Please confirm your new email address by clicking this link: <a href="http://www.Company.com/confirm.php?regID='.$regID.'&newemail='.mysql_escape_string($_POST['newMail']).'" class="link"> Confirm Email Address Change</a><br/><br/><p class="p"><b>Thank you.</b></p><br/><b class="h2">Company.</b>'.$mailFooter;
        $from = "<noreply@company.com>";
        $headers = "MIME-Version: 1.0\r\n";
        $headers .= "Content-Type: text/html; charset=ISO-8859-1\r\n";
        $headers .= "From: Company Name" . $from. " \r\n";

请注意,公司名称已替换为“公司”。

编辑 - $mailHeader

    <html>
<style>
/* `XHTML, HTML4, HTML5 Reset
----------------------------------------------------------------------------------------------------*/

body {
  border: 0;
  margin: 0;
  padding: 0;
  font-size: 100%;
}

html,
body {
  height: 100%;
}

.link{
    color:#81c6f6;
    text-decoration:none;
}
.link:visited {
    color:#81c6f6;
}
.link:hover {
    color:#f6b181;
}
.h1{
    color:#696969;
    font:20px/1.5 Helvetica, Geneva, sans-serif;
}
.p{
    padding:2px;
    color:#787878;
    font:16px/1.5 Tahoma, Geneva, sans-serif;
}
.h2{
    padding:2px;
    color:#81c6f6;;
    font:16px/1.5 Tahoma, Geneva, sans-serif;
}
.roundAll{
    -moz-border-radius:20px;
    border-radius:20px;
    -webkit-radius: 20px;
}
#header{
    height:71px;
    width:100%;
    background-color:#99d1f8;
}
#automarginwrap{
    width:90%;
    margin:0 auto;
    text-align:center;
}
#content{
    margin:0 auto;
    padding:10px;
    width:80%;
    border: solid 10px #f1f1f1;
    background-color:#fff;
}
</style>
<body>
<div id="header"><center><img src="http://www.downloadablecreations.com/images/logo.png" /></center></div>
<div id="automarginwrap">
    <div id="content" class="roundAll h1">

$mailFooter -

    </div>
</div>
</body>
</html>

现在这工作正常,发送和接收邮件没有出现错误消息,但是当我点击链接时,它会将我引导到一个 URL,该 URL 缺少消息的 href 部分中的“w”(Mail.app苹果):

<a href="http://ww.Company.com/confirm.php?

或来自链接的随机字母:

<a href="http://www.Compay.com/confirm.php?

我做错了吗?

我认为错误在于电子邮件或编码的字符集方面。

编辑 - 删除 mysql_escape_string() 对结果没有影响。

【问题讨论】:

  • 无法想象为什么您在电子邮件正文中使用 mysql_escape_string()。可能值得将 urlencode() 添加到 vars 以查看是否有任何作用
  • 更新了原帖。
  • 看起来很奇怪,你能把剩下的邮件代码贴出来吗
  • 包含 $mailHeader 和 $mailFooter 代码

标签: php email hyperlink


【解决方案1】:

会不会是该行超过 70 个字符? PHP manual states 表示行不应超过 70 个字符。

This answer 也可能有用。

就个人而言,我遇到了一些电子邮件客户端截断长文本行的问题,类似于您所描述的。解决这个问题的最佳方法是分开行或使用更适合发送 HTML 邮件的框架或方法。

手册推荐Pear::Mail_Mine。不过,如果使用 ZF,我会推荐 Zend Mail 之类的东西。从长远来看,使用框架还有助于让您的生活更轻松,尤其是在处理许多不同的邮件服务器和客户端时。

【讨论】:

  • 感谢您提供此信息,但是客户端拥有的服务器包不允许修改 serverphp.ini 配置。是否有任何简单的 .php 文件,可以将我的参数变成可读的电子邮件?
  • 谢谢贾斯汀,今天晚些时候我会试试这个!
  • 我只用过 Zend Framework,this 可能更符合你的需要!
猜你喜欢
  • 2012-02-27
  • 2013-04-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-17
  • 2022-01-21
相关资源
最近更新 更多