阻止 Gmail 为 URL 和电子邮件地址创建链接

Posted

技术标签:

【中文标题】阻止 Gmail 为 URL 和电子邮件地址创建链接【英文标题】:Prevent Gmail from creating links for URLs and email addresses 【发布时间】:2012-08-12 21:12:11 【问题描述】:

问题是 Gmail 会自动为所有网站 URL 和电子邮件地址创建超链接。我不想创建链接。

var mailClient = new SmtpClient();
var netMail = new MailMessage();

msg = "I do not want www.google.com as a link at recipient end. <br/>";
msg += "I want my email addrress myemail@myudomain.com as html without a link";

var cr = new NetworkCredential("########", "###########");

netMail.From = new MailAddress("########@m####.###", "######");
netMail.To.Add(new MailAddress("abc@xyz.com"));
netMail.Subject = "Test Mail";
netMail.IsBodyHtml = true;
netMail.Body = msg;

mailClient.Host = "xyz.com";
mailClient.Port = 25;
mailClient.EnableSsl = false;
mailClient.Credentials = cr;
mailClient.Send(netMail);

有什么办法吗?

【问题讨论】:

【参考方案1】:

无法停止创建 URL,因为电子邮件提供商会自动检查文本是否为有效 URL。

解决这个问题的唯一方法是欺骗解析器。只需放置空格、HTML 标记等任何解析器无法识别的方式,例如 URL 等。

以下是一些代码示例:

http:<span>//foolishedsiteparser.com</span>
_http://www.parsersmashed.com
noonesemail<x>@</x>linkdead.com>

结果如下:

http://foolishedsiteparser.com _http://www.parsersmashed.com noonesemail@linkdead.com

【讨论】:

它不工作。 Gmail 自动将 标记替换为 @perilbrain 不确定为什么会被接受,但下面的答案在语义上明显更有意义,因此更有可能被标准化/在其他客户中工作 @AndreyFedorov 是的,您总是可以看到发布答案的日期和接受的日期:) 所以也许在那个时候,它有效,但不再有效。【参考方案2】:

我遇到了同样的问题,并发现您是否使用这样的电子邮件;

<a rel="nofollow" style='text-decoration:none; color:#333'>test@mydomain.com</a>

电子邮件提供商不倾向于将电子邮件作为链接。

希望这会有所帮助。

【讨论】:

这是一个不错的解决方案,适用于 Gmail、Outlook 等。但不能与 Apple Mail.app 一起使用。 @Psimekjr 我在使用 Apple 邮件时遇到了同样的问题。您必须包含一个 href 属性(即使它的值为 #) 使用实际文档的清洁解决方案:D support.google.com/webmasters/answer/96569?hl=en @BogdanM。这与电子邮件中的链接无关 @BogdanM。不,那是谷歌搜索文档的 SEO 部分,供网站管理员阅读。这是关于rel 属性如何告诉谷歌的网络爬虫做什么。就我而言,目前还没有爬虫爬取你的电子邮件,谷歌如何索引他们的搜索引擎肯定与电子邮件中的 URL 是否显示为 gmail 中的链接无关。【参考方案3】:

我可以通过添加&lt;a style="color: #000000"&gt;link text&lt;/a&gt; 来解决这个问题(注意没有href)。

除了style,我还没有尝试过使用属性,但我想你可以。我使用的电子邮件系统(Blackbaud NetCommunity)会去掉一个普通的&lt;a&gt; 标签,所以我必须至少有一个属性。

【讨论】:

你需要苹果邮件的 href 来应用样式 这是最优雅的答案。【参考方案4】:

从perilbrain's answer 得到启发,我实现了以下我用于此的正则表达式:

var unlink = function (val) 
  return val.replace(/([@\.:])/g, '<span>$1</span>');
;

请注意,此函数会在传入的任何内容上全局替换 - 对于 OP 的示例中的自然文本块,它可能过于激进,但通常模板是参数化的,当您可以只传递一个 url 时,这非常有用或电子邮件(我实际上将它实现为模板帮助函数,以便它完全做到这一点)。

该函数转换以下输入:

john.doe@gmail.com
http://johndoe.com

进入这个:

john<span>.</span>doe<span>@</span>gmail<span>.</span>com
http<span>:</span>//johndoe<span>.</span>com

请注意,我尝试了一个像&lt;x&gt; 这样的假短标签,如接受的答案所示,发现GMail“智能地”用&lt;u&gt; 标签替换了它,我认为这是一个功能,但不是可取的。在我的测试中,&lt;span&gt; 标签阻止了链接,没有视觉副作用。

【讨论】:

工作正常,但邮件现在进入垃圾邮件@bmoeskau 垃圾邮件过滤是一个庞大而复杂的话题,可以在从客户端到邮件服务器再到 ISP 的各个层面触发。有许多因素会影响电子邮件是否被标记为垃圾邮件,并且各种垃圾邮件过滤器的工作方式不同。我怀疑仅此更改会导致大多数垃圾邮件过滤器拒绝正常的电子邮件,但当然是 YMMV。【参考方案5】:

尽管这是一个旧线程,但我想帮助可能到达这里的人。我发现在链接中添加跨度会使谷歌看不到它作为链接,见下文:

<a href="https://www.link.dk" style="text-decoration: none   !important; color: #878787 !important;">www.<span></span>link.dk</a>

【讨论】:

【参考方案6】:

成功了!

这不会阻止电子邮件变成链接,但它允许您设置字体颜色并删除该链接的下划线。

它适用于我在 litmus.com 上测试过的所有电子邮件客户端 - 包括 Outlook 2010、2013、2016(也在 Windows 上)、Outlook.com、iPhone 6s、iPad、gmail Web 界面和 Apple Mail 8、9

变体 1: 点击时没有反应的链接

<a href="#" style="text-decoration:none; color:#000">bjorn@rosell.dk</a>

变体 2: 一个邮件链接。适用于几乎所有客户端。 Outlook.com 确实将其设置为蓝色并带有下划线。

<a href="mailto:bjorn@rosell.dk" style="text-decoration:none; color:#000">bjorn@rosell.dk</a>

【讨论】:

,还有一个 CSS :after 但这对 gmail 不起作用。 ;在 Mail.app 中它是可见的,但不可复制..【参考方案7】:

我有一个未提及的文本电子邮件解决方案:使用类似的 unicode 字符。例如一个点前导 (U+2024) 而不是点。比较一下,Běhej.com 和 Běhej․com 看起来如何(第一个是普通点)。

【讨论】:

虽然此答案中大多数其他基于 HTML 的技巧适用于 Gmail,但这是唯一适用于 Outlook 2016 的技巧。防止 URL 和电子邮件地址被点击甚至复制粘贴!太棒了! 正是我需要的——谢谢!我一直在寻找一种方法来键入示例电子邮件地址,例如“john@example․com”,这些电子邮件地址不会变成蓝色下划线,也不会像我发送的电子邮件中的真实电子邮件地址一样。这是完美的。【参考方案8】:

现在&lt;span&gt; 的简单包装不起作用,我建议将@ 替换为其 html-entity 替代项

function disable_email_link($email) 
  //encoder https://mothereff.in/html-entities
  $email = str_replace('@', '&#x40;', $email);
  $email = str_replace('.', '<span>.</span>', $email);
  return $email;

此外,如果您的电子邮件包含电话号码,您可以通过disable_tel_link 函数对其进行转义:

function wrap_span_letters($string) 
  $res = "";
  $length = strlen($string);
  for ($i = 0; $i < $length; $i++) 
    $res .= "<span>$string[$i]</span>";
  
  return $res;


function disable_tel_link($phone) 
  return wrap_span_letters($phone);

【讨论】:

【参考方案9】:

此处列出的解决方案似乎都不再有效。我对不可打印的 Unicode 字符的想法进行了一些试验,发现这个序列可以工作:

<span>foo&zwnj;.&zwnj;bar&zwnj;.&zwnj;com</span>

其中 ‌ 是零宽度非连接符。

【讨论】:

好主意!同样对我来说,这是唯一有效的解决方案 完美,只有一个对我有用的 ios 上的 Apple 邮件! 这可以防止建立链接,但我需要文本准确,所以我可以将其复制/粘贴到其他地方。非打印字符仍然存在,并且无论粘贴到哪里都会导致问题。否则是个好主意。 非常聪明!谢谢!如果有人在使用 SendGrid,则需要三个括号: field 使其工作【参考方案10】:

我的确认信息标题中有一个 .com。 受@perilbrain 的启发,我像这样解决了我的问题

domain.com => domain<span>.</span>

php

$titre = str_replace(".", "<span>.</span>", $titre);

简单!

【讨论】:

【参考方案11】:

假设您的显示网址是“abcdUrl.com” 要防止 gmail 显示为链接,请将其包装在锚标记中

<a href="" style="text-decoration:none;color:#333;"> abcdUrl.com </a>

这在 gmail 中运行良好。

【讨论】:

【参考方案12】:

我遇到了同样的问题,所以几分钟后发现如何解决它。

问题是,如果您直接定位该元素,它将无法工作,因为 gmail 会自动在其中添加一个“a”标签,因此您必须更进一步并为该“a”标签声明一个类。在我的情况下,电子邮件位于“”标签中,我发现它更容易使用。所以我所做的就是创建一个这样的类:

.email_contact a color:#ffffff!important; text-decoration: none!important;

我的代码中没有“a”标签,但由于 gmail 会自动添加它,所以你应该在那里捕捉它。现在你只需要在你放置电子邮件的地方使用那个类,比如“span”或“div”,然后繁荣!固定。

【讨论】:

【参考方案13】:

虽然不是理想的解决方案,但对某些人来说可能是一种选择。自 2020 年 3 月 12 日起,如果您禁用 Multipart 并发送 plain text only 电子邮件,您将获得以下超链接结果。无论是在新行/句子的开头还是句子的中间,结果似乎都是一样的。

【讨论】:

以上是关于阻止 Gmail 为 URL 和电子邮件地址创建链接的主要内容,如果未能解决你的问题,请参考以下文章

阻止 exim 转发电子邮件

被 gmail 代理阻止的 SVG 图像

如何阻止电子邮件中的嵌入图像被 GMail 显示为附件?

如何阻止 Gmail 将我的网络应用程序发送的邮件标记为垃圾邮件? [关闭]

阻止通知电子邮件上的Gmail线程对话

为啥 Gmail 会阻止电子邮件中的 CSS?