用 Javascript 发送电子邮件

这有点难以解释,所以耐心听我解释..。

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

我希望它通过用户的本地邮件客户端发送的原因有很多,所以让服务器发送邮件不是一个选项: 它必须是100% 的客户端。

I already have a mostly-working solution running, and I'll post the details of that as an answer, I'm wondering if there's any better way?

395556 次浏览

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

HTML:

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

The Javascript:

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

window.location.href = link;
}

令人惊讶的是,这种方法相当有效。唯一的问题是,如果主体特别长(超过2000个字符) ,那么它只会打开一封新的电子邮件,但其中没有任何信息。我怀疑这与超过 URL 的最大长度有关。

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

You don't need any javascript, you just need your href to be coded like this:

<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;
}

and jQuery this into your onDomReady

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

Here's the way doing it using jQuery and an "element" to click on :

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

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

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

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

但是,如果现在的“电子邮件客户端”总是设置,自动地,潜在地对一个网络邮件客户端,我会很高兴知道。

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();

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

  1. Include the script:

<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"
);

您可以在 HTML 文件的 <head>中添加以下内容:

<script src="https://smtpjs.com/v3/smtp.js"></script>


<script type="text/javascript">
function sendEmail() {
Email.send({
SecureToken: "security token of your smtp",
To: "someone@gmail.com",
From: "someone@gmail.com",
Subject: "Subject...",
Body: document.getElementById('text').value
}).then(
message => alert("mail sent successfully")
);
}
</script>

下面是 HMTL 部分:

<textarea id="text">write text here...</textarea>
<input type="button" value="Send Email" onclick="sendEmail()">

因此 sendEmail ()函数使用以下方法获取输入:

GetElementById (‘ id _ of _ the _ element’) . value

例如,您可以添加另一个 HTML 元素,比如 subject (使用 id = “ subject”) :

<textarea id="subject">write text here...</textarea>

并在 sendEmail ()函数中获取它的值:

Subject: document.getElementById (‘ Subject’) . value

你完蛋了!

注意: 如果您没有 SMTP 服务器,您可以免费创建一个 给你。然后加密您的 SMTP 凭据 给你(sendEmail ()中的 SecureToken 属性对应于那里生成的加密凭据)。