这有点令人困惑,所以请耐心等待......

我想建立一个系统,用户可以通过我的网站发送模板化的电子邮件,除非它实际上并没有使用我的服务器发送 - 而只是打开他们自己的本地邮件客户端,并准备好电子邮件。应用程序将使用预定义变量填充电子邮件正文,以保存用户必须自己键入。然后,如果消息不完全符合他们的目的,他们可以根据需要编辑消息。

我希望它通过用户的本地邮件客户端有多种原因,因此让服务器发送电子邮件不是一种选择:它必须是100%客户端。

我已经有一个主要工作的解决方案,我会发布详细信息作为答案,我想知道是否有更好的方法?

有帮助吗?

解决方案

我现在这样做的方式基本上是这样的:

HTML:

<textarea id="myText">
    Lorem ipsum...
</textarea>
<button onclick="sendMail(); return false">Send</button>

Javascript:

function sendMail() {
    var link = "mailto:me@example.com"
             + "?cc=myCCaddress@example.com"
             + "&subject=" + escape("This is my subject")
             + "&body=" + escape(document.getElementById('myText').value)
    ;

    window.location.href = link;
}

令人惊讶的是,这很有效。唯一的问题是,如果身体特别长(超过2000个字符),那么它只是打开一个新的电子邮件,但它没有信息。我怀疑它与超出URL的最大长度有关。

其他提示

以下是使用jQuery和<!> quot;元素<!>的方法。点击:

$('#element').click(function(){
    $(location).attr('href', 'mailto:?subject='
                             + encodeURIComponent("This is my subject")
                             + "&body=" 
                             + encodeURIComponent("This is my body")
    );
});

然后,您可以通过从输入字段(即使用$('#input1').val()或使用$.get('...')的服务器端脚本)提供内容来获取您的内容。玩得开心

您不需要任何javascript,只需要将您的href编码为:

<a href="mailto:me@me.com">email me here!</a>

如何在文本框上进行实时验证,一旦超过2000(或任何最大阈值),然后显示'此电子邮件太长,无法在浏览器中完成,请<span class="launchEmailClientLink">launch what you have in your email client</span>'

我有

.launchEmailClientLink {
cursor: pointer;
color: #00F;
}

并将其添加到你的onDomReady

$('.launchEmailClientLink').bind('click',sendMail);

您可以使用此免费服务: https://www.smtpjs.com

  1. 包含脚本:
  2. <script src="https://smtpjs.com/v2/smtp.js"> </script>

    1. 使用以下方式发送电子邮件:

      Email.send("from@you.com", "to@them.com", "This is a subject", "this is the body", "smtp.yourisp.com", "username", "password");

如果这只是打开用户的客户端发送电子邮件,为什么不让他们在那里撰写。您无法跟踪他们发送的内容,但如果这不重要,则只需收集地址和主题,然后弹出客户端以让用户填写正文。

这个想法的问题是用户必须拥有一个电子邮件客户端,如果他依赖网络邮件则不是这种情况,许多用户就是这种情况。 (至少在我十几年前调查这个问题时没有转向重定向到这个网络邮件)。

这就是为什么正常的解决方案是依靠php mail()来发送电子邮件(服务器端,然后)。

但如果现在<!>“;电子邮件客户端<!>”;总是自动地设置给webmail客户端,我很乐意知道。

mandrillapp.com 发送请求:

var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
    if (xhttp.readyState == 4 && xhttp.status == 200) {
        console.log(xhttp.responseText);
    }
}
xhttp.open('GET', 'https://mandrillapp.com/api/1.0/messages/send.json?message[from_email]=mail@7995.by&message[to][0][email]=zdanevich.vitaly@yaa.ru&message[subject]=Заявка%20с%207995.by&message[html]=xxxxxx&key=oxddROOvCpKCp6InvVDqiGw', true);
xhttp.send();
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top