【问题标题】:php str_replace used in a loop with mail functionphp str_replace 在带有邮件功能的循环中使用
【发布时间】:2011-09-05 14:38:09
【问题描述】:

我有一个 html 电子邮件消息分配给一个变量,然后在循环中使用它,然后在循环中我尝试使用 str_replace 将自定义值插入到钩子中。所以在下面的例子中,我有一个{email} 钩子,我试图用收件人的电子邮件地址替换它。我的问题是,当我将$message_final 输出到浏览器时,str_replace 函数似乎已经完成了这项工作。但是当我发送电子邮件时,所有电子邮件仍然带有{email} 钩子,并且似乎str_replace 没有工作。任何想法我在这里缺少什么?谢谢。

$message = "HTML email message here";

while ($r = mysql_fetch_array($emails_list)) {
    $email =  $r["email"];
    $message_final = "";

    if(!empty($email)) {
        //Replace hook with something new like an email address
        $message_final = str_replace('{email}', $email, $message);
        mail($email, $subject, $message_final, $headers); 
    }
}

【问题讨论】:

  • 你能贴出实际$message 中包含这些钩子的一部分吗?
  • 嗯..您在此处发布的代码看起来不错..您可以发布您的“真实”代码(包括您用来在浏览器中查看消息的工作var_dump())吗?

标签: php mysql email


【解决方案1】:

$message 中没有可以替换的 {email} 字符串

【讨论】:

  • HTML 字符串太长,无法在此处发布,但它在变量 $message 中
  • 我很确定 OP 的实际 $message 有它们。
  • 我刚刚测试了一个使用电子邮件地址和你的钩子的通用字符串替换,它工作正常。
  • @EvanMulawski:是的,我也是
  • 我认为OP会通过调试找到问题。
【解决方案2】:

您的代码有效且运行良好。问题出在其他地方。

您可能需要检查几件事:

  • str_replace 区分大小写,您确定是 {email} 而不是 {EMAIL}?

  • $message 是否包含有效消息?尝试在浏览器中打印出来,打开它的源代码,这样你就可以看到浏览器解析的其他html标签并检查它是否正确

顺便说一句 - 您应该考虑使用 mysql_fetch_assoc 而不是 mysql_fetch_array。您默认使用的方法将mysql_fetch_rowmysql_fetch_assoc 创建的数组合二为一,因此占用的空间是原来的2 倍

【讨论】:

    【解决方案3】:

    啊啊啊!掌心面对!!这是导致问题的完全不同的东西。在我的邮件标题中,我将消息附加在那里,并且我在错误的代码位中调用了 str_replace。谢谢大家的回复:)

    【讨论】:

      猜你喜欢
      • 2023-04-02
      • 1970-01-01
      • 2017-09-10
      • 1970-01-01
      • 2016-01-11
      • 2014-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多