【问题标题】:Why are some anchor tags incorrect?为什么有些锚标签不正确?
【发布时间】:2011-12-16 05:54:13
【问题描述】:

我正在使用 Zend_Mail 通过 SMTP 发送文本电子邮件。在测试环境中,我注意到通过浏览器客户端收邮件时,URL被转换为超链接,但是链接和普通文本之间的边界被画错了。

例如,在下面的邮件sn-p中,你可以看到我已经给用户发送了一封注册邮件。它包括“id”和“code”的参数。您将看到,在这种情况下,浏览器客户端已确定“id”是超链接的一部分,但“代码”不是。

please follow this link <a href="http://mydomain.com/user/validate/id/18">http://mydomain.com/user/validate/id/18</a>/code/1a0d917c1512c700f7237ae1f3727e47 If you did not...

有时“边界”是在任意位置绘制的 - 例如,在代码字段的一半处!

在通过 Outlook 等客户端收邮件时,似乎没有出现问题。

大概这是我的 PHP 环境和浏览器客户端之间的某种字符集不兼容。话虽如此,我使用的是标准的 PHP 安装,并且在我的浏览器客户端中接收来自其他站点的链接没有问题。 (浏览器客户端作为网站管理员帐户的一部分提供。)

有什么想法吗?

更新:这是生成链接的代码。尝试了各种组合,包括EOT、单引号、双引号...相同的结果...

$id         = $options['id'];
$code       = $options['validation'];
$link       = "http://mydomain.com/user/validate/id/" . $id . "/code/" . $code;

$body = 'Thanks for registering ... please follow this 
link ' . $link . ' If you did not request ....please ignore it.';

$this->setBodyText($body);

【问题讨论】:

  • 您能展示生成该锚点的代码吗?

标签: zend-framework email-client zend-mail


【解决方案1】:

使用 setBodyText() 可以设置电子邮件的仅文本部分:当您在纯文本电子邮件中编写链接时,您只会编写一些没有特殊含义的字符;接收邮件的客户将了解这是否是一个链接以及如何呈现它。然而,这个过程是我们无法控制的(它是客户端,取决于用户拥有的客户端)。

我认为最好的解决方案是同时设置 Zend_Mail 对象的 HTML 部分调用

$yourMailObject->setBodyHtml($htmlString);

这样做你明确告诉邮件客户端如何呈现链接

显然你必须多做一些工作,但既然你希望客户端将 HTML 属性呈现为 A 标记,更好的方法是向他传递正确的 HTML。

总而言之,工作流程如下:

  1. 确定链接并将其(假设)放入$link 变量中
  2. 准备纯文本邮件正文:$bodyText = "Something... click here: $link ...";
  3. 准备 HTML 格式的邮件正文:$bodyHtml = "&lt;body&gt;&lt;p&gt;Click the link below&lt;/p&gt;&lt;p&gt;&lt;a href='$link'&gt;$link&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Or copy and paste in your browser the url:&lt;br/&gt;&lt;pre&gt;$link&lt;/pre&gt;&lt;/p&gt;&lt;/body&gt;";
  4. 调用邮件对象的两个方法:$yourMailObject-&gt;setBodyText($bodyText)-&gt;setBodyHtml($bodyHtml);

那么你就可以像往常一样发送邮件了。您可以选择以更复杂的方式自定义 html,添加 inline css 等等。您还可以将其格式化为纯文本邮件(使用等宽字体),但由于您传递了正确的 HTML,您可以确保客户端会单击正确的链接。

【讨论】:

    猜你喜欢
    • 2022-12-17
    • 1970-01-01
    • 2021-02-19
    • 2022-07-07
    • 1970-01-01
    • 2014-04-01
    • 2011-01-06
    • 1970-01-01
    • 2018-10-08
    相关资源
    最近更新 更多