【问题标题】:plain text email from MySQL in phpphp中来自MySQL的纯文本电子邮件
【发布时间】:2012-07-13 05:07:43
【问题描述】:

情况如下。我在 MySQL 中存储了一封纯文本电子邮件,其中包含\r\n 的换行符。当我的 php 脚本需要发送邮件时,它首先使用sprintf 填写一些参数,然后使用标准的mail() 函数发送邮件。

我遇到的问题是电子邮件客户端(在我的例子中是雷鸟)显示这些换行符而不是解释它们。

为了测试我的脚本,我在邮件中硬编码了一个句子。当我这样做时,邮件被正确解释。我的第一个问题是 MySQL 转义了反斜杠,所以我尝试执行 str_replace("\\\\", "\\", $str) 但这无济于事。

我显然做出了错误的假设或愚蠢的错误,但我没有看到。可能是什么问题呢?

【问题讨论】:

  • 为什么不打印查询的结果集,看看mysql到底返回了什么?
  • 我已经打印了$result['message'] 并且在浏览器中没有任何内容被转义。
  • 那么,显然 mail() 函数会转义你的特殊字符
  • mail() 函数在我对它们进行硬编码时不会转义 \r\n。所以我认为这不是问题?

标签: php mysql email plaintext line-breaks


【解决方案1】:

尝试像这样替换它 str_replace('\n\r', "\n\r");如果 \n\r 字符在您的消息中保存为四个单独的字符,它可能会解决您的问题。如果您使用例如 phpmyadmin 输入它们,它们将被保存为 4 个字符,而不是您期望的 2 个字符。

希望对你有帮助!

【讨论】:

  • 谢谢这解决了问题。我确实在 phpMyAdmin 中输入了测试邮件。
  • 请注意,如果您将转义字符放在单引号 '' 之间,它们将不会被转义。如果将它们放在双引号之间,它们将被转义!但对于 \' 来说,情况并非如此。 \' 放在单引号之间时会被转义
【解决方案2】:

尝试使用 var_dump 打印消息,这可能会更好地显示有关字符串值的信息。

【讨论】:

  • 我现在尝试了var_dump,但它不显示转义字符。
【解决方案3】:

也许用它来连接和删除斜线:​​

stripslashes($str);

【讨论】:

  • 没有电子邮件客户端显示 rn 而不是 `\r\n'。真奇怪。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-06-05
  • 1970-01-01
  • 2011-12-24
  • 1970-01-01
  • 2011-07-15
  • 2017-06-28
  • 2018-07-19
相关资源
最近更新 更多