86

我想从 JavaScript 调用一个mailto链接——这就是我想要一种允许我在用户 PC 上打开电子邮件客户端的方法,就像他们点击了一个普通的 mailto 链接一样。

我怎样才能做到这一点?

4

6 回答 6

146

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

window.location.href = "mailto:address@dmail.com";
于 2010-10-05T22:47:33.783 回答
10

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

document.getElementById('mymailto').click();
...
<a href="mailto:...." id="mymailto" style="display:none"></a>
于 2013-01-02T08:03:47.020 回答
5

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

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

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

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

于 2018-01-26T02:23:33.733 回答
1

实际上,可以避免出现空白页。

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

使用 jQuery,我得到了这个:

var initMailtoButton = function()
{
    var iframe = $('<iframe id="mailtoFrame" src="mailto:name@domain.com" width="1" height="1" 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);

        });
    }
}
于 2015-04-24T14:15:20.590 回答
1

更好用

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

如果我们使用window.location.hrefchrome 浏览器在网络选项卡中出现错误,显示临时标题 Upgrade-Insecure-Requests: 1

于 2021-05-27T04:58:37.590 回答
1

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

//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的提示

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

于 2021-10-28T04:03:53.733 回答