使用 JQuery / JavaScript 调用/单击 mailto 链接

Posted

技术标签:

【中文标题】使用 JQuery / JavaScript 调用/单击 mailto 链接【英文标题】:Invoke / click a mailto link with JQuery / JavaScript 【发布时间】:2011-04-21 13:33:34 【问题描述】:

我想从 javascript 调用 mailto 链接——我想要一种方法,让我可以在用户 PC 上打开电子邮件客户端,就像他们点击了普通的 mailto 链接一样。

我该怎么做?

【问题讨论】:

工作示例:jsfiddle.net/gaboom/h81qov5g 试试<button onclick="window.open('mailto:KingRider<contato@sandroalvares.com.br>');">Contact me</button> 【参考方案1】:

你可以在这里使用window.location.href,像这样:

window.location.href = "mailto:address@dmail.com";

【讨论】:

我将如何附加正文? mailto:address@dmail.com?body=myBody 和 mailto:address@dmail.com&myBody 对我不起作用... @jipiboily,你能解释一下吗?你试过哪个浏览器没用? @Adnan 我记得它不适用于 Opera 和更多的浏览器。根据您的需要,您或许可以解决该问题。 @Rolf 我刚刚在最新的 chrome stable 中进行了测试,仍然可以正常工作。 Max,您可能已经明白这一点,但对于未来的读者:window.location.href = 'mailto:address@dmail.com&subject=Hello there&body=This is the body';。不是? 也不是&,只是&【参考方案2】:

您可以通过在页面上使用带有链接的 .click() 来避免上面讨论的空白页面问题:

document.getElementById('mymailto').click();
...
<a href="mailto:...." id="mymailto" style="display:none"></a>

【讨论】:

我试过这个:`function Call() document.getElementById('mymailto').click(); ` 新标签仍然打开。【参考方案3】:

对我来说,在 chrome、IE 和 firefox 以及 Outlook 中测试的工作答案是这样的

window.location.href = 'mailto:address@dmail.com?subject=Hello there&body=This is the body';

%0d%0a 是 mailto 链接中电子邮件正文的换行符

%20 是应该使用的空格符号,但它也适用于普通空格

【讨论】:

【参考方案4】:

其实也有避免空白页的可能。

我发现,您可以简单地将带有 mailto 链接的 iframe 插入到 dom 中。 这适用于当前的 Firefox/Chrome 和 IE(IE 也会显示一个简短的确认对话框)。

使用 jQuery,我得到了这个:

var initMailtoButton = function()

    var iframe = $('<iframe id="mailtoFrame" src="mailto:name@domain.com"   border="0" frameborder="0"></iframe>');
    var button = $('#mailtoMessageSend');    
    if (button.length > 0)             
        button.click(function()
            // create the iframe
            $('body').append(iframe);
            //remove the iframe, we don't need it any more
            window.setTimeout(function()
                iframe.remove();    
            , 500);

        );
    

【讨论】:

【参考方案5】:

更好用

window.open('mailto:address@mail.com?subject=sub&amp;body=this is body')

如果我们使用window.location.href chrome 浏览器在网络选项卡中出现错误并显示临时标题 升级不安全请求:1

【讨论】:

这对我帮助很大,谢谢@Prabin Tp【参考方案6】:

这是一个老问题,但我结合了几个堆栈溢出来提出这个功能:

//this.MailTo is an array of Email addresses
//this.MailSubject is a free text (unsafe) Subject text input
//this.MailBody is a free text (unsafe) Body input (textarea)
//SpawnMail will URL encode /n, ", and ', append an anchor element with the mailto, and click it to spawn the mail in the users default mail program
SpawnMail: function()
    $("#MyMailTo").remove();
    var MailList="";
    for(i in this.MailTo)
        MailList+=this.MailTo[i]+";";
    var NewSubject=this.MailSubject.replace(/\n/g, "%0d%0a");
    NewSubject=NewSubject.replace(/"/g, "%22");
    NewSubject=NewSubject.replace(/'/g, "%27");
    var NewBody=this.MailBody.replace(/\n/g, "%0d%0a");
    NewBody=NewBody.replace(/"/g, "%22");
    NewBody=NewBody.replace(/'/g, "%27");
    $("#mainNavBar").after("<a id='MyMailTo' style='display:none;' href='mailto:"+MailList+"?subject="+NewSubject+"&body="+NewBody+"'>&nbsp;</a>");
    document.getElementById('MyMailTo').click();

关于这个(以及我打算如何使用它)最酷的部分是我可以把它放在一个循环中,并将单独的消息拆分给数组中的每个人,或者让每个人都在一起(这是这个函数目前所做的)。 无论如何,感谢@Toskan 的提示

FOLLOW-UP - 请注意,新的 html5 标准不允许在没有“必需的用户手势”的情况下循环 mailto(或其他与弹出窗口相关的 js)。很酷的文章在这里:https://github.com/WICG/interventions/issues/12 因此,您不能使用它来大量生成单独的电子邮件,但在当前的设计中,它确实可以很好地发送给许多人。

【讨论】:

以上是关于使用 JQuery / JavaScript 调用/单击 mailto 链接的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 javascript/jquery/AJAX 调用 Django REST API?

如何找出使用 javascript/jquery 调用函数的次数?

使用 JQuery / JavaScript 调用/单击 mailto 链接

javascript 使用jQuery调用API

使用 JavaScript/jQuery 调用 do_action

从 Jquery 调用 javascript 函数