使用JavaScript的mailto

73

我想在用户点击图像时打开一个带有“收件人地址”的新Outlook邮件模板。 我已经在HTML页面中返回了我的代码(与图像链接),每当它加载时,Javascript都应该打开一个新的邮件模板。 但是功能无法正常工作。 请告诉我我的代码有什么问题。

body onLoad="redirect()"

script language="JavaScript"

function redirect() 

      var email = "xyz@something.com"
      var mailto_link = 'mailto:' + email
      window = window.open(mailto_link, 'emailWindow')
      if (window && window.open && !window.closed)         
          window.close()

1
window 是一个只读变量。 - Rob W
1
是因为弹出窗口拦截器吗? - Ramesh
7个回答

97

不需要jQuery。也没有必要打开一个新窗口。对于不返回HTTP数据给浏览器的协议(mailto:irc://magnet:ftp://(取决于它如何实现,通常浏览器内置FTP客户端)),可以在同一窗口中查询而不会丢失当前内容。在你的情况下:

function redirect()
{
    window.location.href = "mailto:mail@example.org";
}
<body onload="javascript: redirect();">

或直接

<body onload="javascript: window.location.href='mailto:mail@example.org';">

2
需要注意的是,浏览器仍会触发 onbeforeunload 事件: window.onbeforeunload = () => {console.log("onbeforeunload")}; window.location.href = "mailto:mail@example.org"; - D B
@DB 感谢您指出这个有趣的细节!这很有道理...我想,因为就像我之前说的,浏览器可能有一个内置工具来处理伪协议,比如ftp://。这确实会替换当前页面内容,所以即使浏览器没有内置工具来处理mailto:// URI,onbeforeunload事件也会被触发。但这只是个人的假设。在这种情况下,浏览器厂商应该先检查是否支持伪协议,否则不触发onbeforeunload事件。 - StanE
@cjm2671 我已在当前最新版本的Chrome浏览器76.0.3809.100中的普通模式和隐身模式下测试了上述代码。一切都正常工作。你有任何可能会阻止代码执行的浏览器扩展(AddOns)吗? - StanE

28
请在jsFiddle的代码中查找。它使用jQuery修改链接的href。您可以使用其他任何库来代替它。它应该有效。
<a id="emailLnk" href="#">
    <img src="http://ssl.gstatic.com/gb/images/j_e6a6aca6.png">
</a>

JavaScript

$(document).ready(function() {
    $("#emailLnk").attr('href',"mailto:xyz@something.com");
});​

更新

如果只有在单击事件中才知道id,则可以使用另一个代码示例。

$(document).ready(function() {
    $("#emailLnk").click(function()
     {
         window.location.href = "mailto:xyz@something.com";
     });
});​

24

使用 JavaScript,您可以使用类似以下代码来创建一个“即时”链接:

With JavaScript you can create a link 'on the fly' using something like:

var mail = document.createElement("a");
mail.href = "mailto:mail@example.org";
mail.click();

浏览器会将其重定向到安装在计算机上的某个邮件客户端,而不会丢失当前窗口的内容...您不需要任何API,如“jQuery”。


1
window.open('mailto') 通常会打开一个带有 mailto URL 的空白标签页,所以这种方式看起来更好。 - Unknownweirdo

5
您可以使用简单的mailto,以下是简单标记的示例。
<a href="mailto:name@gmail.com">Click here to mail</a>

一旦单击,它将打开你的Outlook或者你设置的任何电子邮件客户端。


嗨,Grant,感谢您编辑我的术语使用。我很匆忙,需要打字。 - Allan

4
我使用了这段 JavaScript 代码(使用 jQuery 但不是必须的):
    $( "#button" ).on( "click", function(event) {
         $(this).attr('href', 'mailto:me@domain.com?subject=hello');
    });

当用户点击链接时,我们会替换被点击元素的href属性。
要小心不要阻止默认行为(event.preventDefault),因为我们刚刚替换了要去的href。
我认为机器人看不到它,这个地址受到垃圾邮件的保护。

1
document.location.href = "mailto:chrisgreg23@googlemail.com"

3
“仅有代码的答案并不是高质量的答案”。虽然这段代码可能很有用,但您可以通过解释它为什么有效、如何有效、何时应该使用以及其限制是什么来改进它。请编辑您的答案,包括解释和相关文档链接。 - Stephen Ostermiller

-1

我不知道这是否有帮助,但是使用jQuery来隐藏电子邮件地址,我做了以下操作:

    $(function() {
        // planque l'adresse mail
        var mailSplitted 
            = ['mai', 'to:mye', 'mail@', 'addre', 'ss.fr'];

        var link = mailSplitted.join('');
        link = '<a href="' + link + '"</a>';
        $('mytag').wrap(link);
    });

希望它有所帮助。


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