用Javascript发送电子邮件
这是一个有点混乱的解释,所以请忍受我在这里…
我想build立一个系统,用户可以通过我的网站发送模板化的电子邮件,除非它实际上没有使用我的服务器发送 – 它只是打开他们自己的本地邮件客户端,准备好一个电子邮件。 应用程序会用预定义的variables填写电子邮件正文,以保存用户自己input。 他们可以根据需要编辑邮件,如果不完全符合他们的目的。
我希望通过用户的本地邮件客户端有很多原因,所以让服务器发送电子邮件不是一个select:它必须是100%的客户端。
我已经有一个主要工作的解决scheme运行,我会发布的详细信息作为答案,我想知道是否有更好的办法?
我现在做的方式基本上是这样的:
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和“元素”点击的方法:
$('#element').click(function(){ $(location).attr('href', 'mailto:?subject=' + encodeURIComponent("This is my subject") + "&body=" + encodeURIComponent("This is my body") ); });
然后,可以通过从input字段(即使用$('#input1').val()
或服务器端脚本使用$.get('...')
。
你不需要任何JavaScript,你只需要你的href被编码像这样:
<a href="mailto:me@me.com">email me here!</a>
如何在文本框中进行实时validation,一旦超过2000(或任何最大阈值),然后显示“此电子邮件太长,无法在浏览器中完成”,请<span class="launchEmailClientLink">launch what you have in your email client</span>
'
我会有
.launchEmailClientLink { cursor: pointer; color: #00F; }
和jQuery到你的onDomReady
$('.launchEmailClientLink').bind('click',sendMail);
如果这只是打开用户的客户端发送电子邮件,为什么不让他们在那里撰写。 你失去了跟踪他们发送的能力,但如果这不重要,那么只需收集地址和主题,popup客户端,让用户填写正文。
这个想法的问题是,用户必须有一个电子邮件客户端,如果他依赖于networking邮件,情况就不是这样,对于许多用户来说就是这种情况。 (至less在我十几年前调查这个问题时,没有转向redirect到这个networking邮件)。
这就是为什么正常的解决scheme是依靠PHP邮件()发送电子邮件(服务器端,然后)。
但是,如果现在“电子邮件客户端”总是自动地,可能地设置到networking邮件客户端,我会很高兴知道。
发送请求到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();