如何禁用电子邮件链接?

18

我正在使用 Ruby on Rails 3,希望在一封 HTML 邮件中禁用电子邮件地址链接。

例如,在我发送的某个原始 HTML 中:

Hi, you email is: <br/>
test@email.com

Gmail自动检测到这是一个电子邮件地址,并将其更改为

Hi, you email is: <br/>
<a target="_blank" href="mailto:test@email.com">test@email.com</a>

我想要得到这个输出

# Text without the 'mailto:' link
Hi, you email is:
test@email.com

我该如何做到这一点?


或者可以通过一些jQuery干预甚至PHP将其转换为图像? - user621639
10个回答

36

我有一个更自然的建议:用超链接标签将电子邮件/网址包裹起来。

<a name="myname">test@email.com</a>

由于文本已经包含在超链接中,Gmail就放弃了对其进行修改。

(注:苹果电子邮件客户端也适用。)


这对我来说也适用于在Gmail中添加电话号码。 - Phil Gibbins
这在Outlook Web Access和Gmail中都有效,谢谢! - jebeaudet
刚刚试了一下苹果邮件应用,它在iOS上能用,但在macOS上却不起作用。 - undefined

11
到2021年,对我来说最好的是:
<a href='#' style='text-decoration: none; color:#000000' name='myname'>x@somemail.com</a> 说明: 尝试过Gmail、Outlook 365、Mailinator和MyTrashMail等不同的服务后,得出以下结论:
• 使用标签将电子邮件地址包装起来是必要的,正如raugfer指出的那样
• 对于Outlook而言,href ='#'是必须的。链接到假锚点会禁用链接跟踪。
• text-decoration:none、color:#000000可以去掉下划线,将颜色从蓝色链接颜色改为自然文本颜色。对于那些不仅想要禁用链接,而且希望将其外观变为常规文本的人来说非常有用。
• name = 'myname'不会有害,但我没有注意到它的必要性。
• 应该避免使用任何JavaScript,这样会导致Gmail无法通过。例如,onClick="return false;",<script>...</script>都不行。
• 如果您想将光标更改为默认值,则cursor:defaultcursor:auto将无济于事。对于Gmail,不需要使用href ='#'。
• 使用或对于Gmail而言是有效的,正如Prince Mishra所说,但它在所有服务中都无法起作用(例如,在Outlook中)。

Outlook online会完全剥离锚点标签,即使它设置为href="#" - Rob
@Rob,我已经检查了Outlook在线版(outlook.office365.com),对我来说看起来没问题。链接已被禁用。希望你也是这样?抱歉,我没有看到问题。 - HoRn

2
这是我在Laravel中使用的方法。
<a style="pointer-events: none; color: inherit">
    {{$user->email}}
</a>

你的回答可以通过提供更多支持信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的答案是正确的。您可以在帮助中心中找到有关如何编写良好答案的更多信息。 - Community

2

我曾经也遇到过同样的问题。Gmail会检测并将邮件地址和IP地址转换为链接。我使用了string.replace在<span>标签中包含点(.)和@符号,这对我来说很有效。示例Python代码如下:

text = myname@gmail.com
chars = ['.','@']
encloseIn = 'span'

for char in chars:
    text = string.replace(text, char, '<'+encloseIn+'>'+char+'</'+encloseIn+'>')

1
你的回答帮了我很多,我只是用了类似这样的东西:indiandexter007<span>@</span>gmail<span>.</span>com。 - marianotigre
这确实适用于Gmail,但目前不适用于Outlook 365。 - HoRn

1

你可以尝试

Hi, you email is:<br />
test&#64;email&#46;com

9
如果那不起作用,尝试类似这样的方法:test<span>@</span>email.com。 - Gavi Lock
不要使用Gmail,所以被投反对票。Gavin Lock的解决方案要好得多。 - Ulflander
@Ulflander..我同意。Gavin的解决方案更简单更好。他可能应该将其作为答案添加。 - rubyprince
Gavin的解决方案在当前的Gmail(2015年1月)不起作用,rubyprince的也是如此。 - Borek Bernard

1

回复晚了,但我想我已经找到了解决这个自动链接问题的方法。

最简单和最快的方法是在每个字母之间添加零宽度非连接符。现在听起来很难,所以我开发了一个小脚本,让事情变得容易。运行下面的代码,添加电子邮件地址(粘贴或输入),它会在电子邮件地址周围添加所需的代码。将结果粘贴到您的电子邮件中。

$('#userInput').keyup(function() {
    var s = $(this).val().trim();
    var text = "";
    for ( var i = 0; i < s.length; i++ )
        {
            text += s[i]+'&zwnj;' ;
        } 
    $('p').text( text );
});
#userInput{max-width:400px;width:100%;padding:10px 5px;}
*{outline:none;}
p,#userInput{font-family: 'Roboto', sans-serif;}
p{word-break:break-all;}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<link href="https://fonts.googleapis.com/css?family=Roboto" rel="stylesheet">
<input type="text" id="userInput" />

<p></p>


0

阅读所有答案后,我在 Joomla 文章中尝试了这个方法,它有效。

<p><strong>This is the email address: </strong><a name="whatever">youremail&#64domain.com</a></p>

结果:

这是电子邮件地址:youremail&#64domain.com</p>

<p>在Chrome和Firefox上工作。


0
您可以将电子邮件地址分成两半,中间使用一个不可见的空格。
测试 @email.com 标签在电子邮件中添加了一个空格,但样式阻止了空格的显示。对于浏览器而言,文本是"test @email.com",但它显示为"test@email.com",甚至允许用户剪切和粘贴时不包含空格。

-1

你只需要添加“零宽度空格”字符,它在HTML中的代码是:

&#8203;

这段代码可以在需要的字符串中添加空格。 为了得到一个体面的解决方案,您需要使用<nobr>标签来补充此方法,因为使用此标签可以防止文本换行。

-3

唯一的解决方法是将电子邮件地址转换为图像,并将其包含在电子邮件中。当然,这意味着用户可能选择不下载该图像,这将意味着他们也无法获得电子邮件地址。

实际上,问题在于一旦 Gmail 或其他任何电子邮件客户端接收到邮件,您就无法控制其所做的事情,因此没有其他方法可以解决这个问题。 Gmail 或任何其他电子邮件客户端都可以自由决定如何处理邮件,包括超链接电子邮件地址。

如果您非常坚决地不想将电子邮件转换为超链接,可以尝试做其他事情来隐藏它是一个电子邮件,比如将其写出来:

Hi, your email is:
test at email dot com

当然这可能更加令人困惑。如果我是你,我会简单地接受 Gmail 会为你的电子邮件添加超链接。


将电子邮件转换为图像的方法在某种程度上是可以接受的,因为正如您所说,收件人可能不会下载图像。确实,没有任何系统会添加图像链接,但我想一些人不喜欢它的缺点是:1)您无法快速更改地址。您需要重新呈现图像(以编程方式);2)无法复制粘贴地址。将图像嵌入为编码的<img src="data:image/png;base64...对于Gmail不起作用,但对于Outlook起作用。 - HoRn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接