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

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

我该怎么做?

【问题讨论】:

  • 试试<button onclick="window.open('mailto:KingRider<contato@sandroalvares.com.br>');">Contact me</button>

标签: javascript jquery mailto


【解决方案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" 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);
    
            });
        }
    }
    

    【讨论】:

      【解决方案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 因此,您不能使用它来大量生成单独的电子邮件,但在当前的设计中,它确实可以很好地发送给许多人。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-07-03
        • 2023-03-19
        • 1970-01-01
        • 2013-01-22
        • 1970-01-01
        • 2010-11-18
        • 1970-01-01
        • 2014-12-04
        相关资源
        最近更新 更多