【问题标题】:Whitespace in email issue电子邮件问题中的空格
【发布时间】:2010-12-19 17:27:43
【问题描述】:

我遇到了一个奇怪的问题并且难以诊断,因为
这是随机的。我已经构建了一个应用程序,该应用程序通过
发送电子邮件 大量的文本(没有确切的字符数,但可以得到)。

在 html 电子邮件中,内容中会出现一个随机空格。

请参阅下面有关空间如何漂移和随机的示例:

1- "Th ere are several things being discussed in this email."
2- "There are se veral things being discussed in this email."
3- "There are severa l things being discussed in this email."

链接也会出现此空白问题。目前在hotmail和gmail中发现了这个问题。

有人有什么想法吗?

$header = "MIME 版本:1.0\r\n";
$header .= "内容类型: text/html; charset=utf-8\r\n";
$header .= "来自:abc \r\n";
$主题=“ABC”;
$mail_body = "你好!";
$mail_body .= "内容";
邮件($email_address,$subject,$mail_body,$header);

这是给你一个大致想法的代码..

【问题讨论】:

    标签: php email


    【解决方案1】:

    当您的行很长并且在 RFC 的 72 字符建议之后自动中断到下一行时,您可能会遇到此问题。

    在哪里

    hey lots of stuff here Jimmy will probably be way longer than 72 characters
    

    会变成

    hey lots of stuff here Jimmy will probably be way longer than 72 charac
    ters
    

    这会在 HTML 电子邮件中呈现为

    hey lots of stuff here Jimmy will probably be way longer than 72 charac ters
    

    【讨论】:

      【解决方案2】:

      如果您“查看源”电子邮件,是源中的空格,还是仅出现在呈现的(可见)文本中?我要做的第一件事是查看电子邮件源以了解发生了什么 - 我不相信渲染/可见文本来调试它。

      另外,您说“在 html 电子邮件上”。这意味着您可能会将纯文本版本发送给不同的人,或者可能发送给相同的人(作为多部分消息)。如果是这样,你能确认它也不存在吗?

      正如 Terry 所说,您能否发布一些代码,特别是发送消息的代码以及构建消息文本以供发送的部分/全部(如果很短)代码?

      【讨论】:

      • 我刚刚发布了代码..希望对您有所帮助。问题是......即使链接也有空格并且它被转换为“+”号并且破坏了链接。空格也在 HTML 源代码中。不幸的是,我无法共享电子邮件,因为它是私人电子邮件……这又是随机发生的。好郁闷……
      • 如果是我,我会在每次发送消息时添加代码以将正文文本保存到临时日志文件中(以及您需要的任何日期/时间戳、主题等)从另一个人那里识别该消息)。然后每次出现神秘空间时,我都会将相应的日志文件条目与该消息进行比较。这至少可以让你弄清楚你的脚本是在做这件事还是“在外面”。当然,您的脚本可能会插入空格。但是,您将有机会尝试不同的方法(日志文件)。
      • 一些可以尝试的东西...当您不需要变量插值时尝试使用单引号。与其在该函数中分部分构建字符串,不如将消息构建放入它自己的函数中,将填充值作为参数,并返回一个大消息字符串。然后,当然,对该消息构建功能进行单元测试 :) (我个人喜欢创建消息模板文件,如“亲爱的 [Name],感谢购买 [Product] 等”,然后有一个通用函数读取文件并进行替换 - 这样您就可以在不编辑代码的情况下更改消息)
      • 你也可以尝试使用 PHP 的“heredoc”方法来构建消息而不是一堆字符串连接;请参阅php.net/manual/en/language.types.string.php - 但就我个人而言,我真的很喜欢完全从我的 PHP/脚本代码中获取电子邮件文本,就像我在上一条评论中所说的那样。
      • Rico,让我知道您是否尝试将电子邮件文本保存到日志文件,以及那里是否也有空格。我认为您不会得到更多答案,因为您发布的伪代码很好 - 问题可能出在“真实”代码中并且已被抽象出来,因此它不存在于伪代码中。
      【解决方案3】:

      如果您发布有问题的代码会有所帮助,因为有很多事情可能会导致这种情况。

      你使用 mail() 还是 phpmailer 或 swiftmailer? 您的电子邮件是多部分的还是只有文本的? 你自己解析你的模板吗?

      如果是HTML,请贴出客户收到的HTML代码等

      连接字符串时是否可能存在尾随/标题空格? 尝试对添加到 $mail_body 的每个元素进行“修剪”,例如:

      $mail_body .= trim($content);
      

      【讨论】:

      • 好吧,您的伪代码似乎没有问题。修改答案以允许格式化。
      【解决方案4】:

      据我了解,问题在于您的线路运行时间过长。 PHP 邮件程序添加换行符(以及空格)来分解长行。

      我的建议是在行尾添加“\r\n”。这会故意在您的文本中添加换行符,以防止邮件程序自己这样做。例如:

      There are several things being discussed in this email.\r\n
      

      注意这里使用了双引号。单引号只会将 \r\n 附加到您的文本中。

      供参考:This question 回答了同样的问题。

      【讨论】:

        猜你喜欢
        • 2015-11-03
        • 2020-12-20
        • 1970-01-01
        • 1970-01-01
        • 2017-10-23
        • 1970-01-01
        • 2012-08-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多