提问人:nickf 提问时间:11/7/2008 最后编辑:nickf 更新时间:1/13/2021 访问量:406827
使用 Javascript 发送电子邮件
Sending emails with Javascript
问:
这有点难以解释,所以请耐心等待......
我想建立一个系统,用户可以通过我的网站发送模板化电子邮件,但它实际上不是使用我的服务器发送的 - 它只是打开他们自己的本地邮件客户端,并准备好电子邮件。该应用程序将使用预定义的变量填充电子邮件的正文,以节省用户自己输入的时间。然后,他们可以根据需要编辑消息,如果它不完全符合他们的目的。
我希望它通过用户的本地邮件客户端进行传输的原因有很多,因此让服务器发送电子邮件不是一种选择:它必须是 100% 的客户端。
我已经运行了一个大部分工作的解决方案,我将发布它的详细信息作为答案,我想知道是否有更好的方法?
答:
我现在的做法基本上是这样的:
The HTML:
<textarea id="myText">
Lorem ipsum...
</textarea>
<button onclick="sendMail(); return false">Send</button>
The Javascript:
function sendMail() {
var link = "mailto:[email protected]"
+ "[email protected]"
+ "&subject=" + encodeURIComponent("This is my subject")
+ "&body=" + encodeURIComponent(document.getElementById('myText').value)
;
window.location.href = link;
}
令人惊讶的是,这效果很好。唯一的问题是,如果正文特别长(超过 2000 个字符),那么它只会打开一封新电子邮件,但其中没有任何信息。我怀疑这与超出 URL 的最大长度有关。
评论
如果这只是打开用户的客户端来发送电子邮件,为什么不让他们也在那里撰写它。你失去了跟踪他们发送的内容的能力,但如果这不重要,那么只需收集地址和主题,然后弹出客户端,让用户填写正文。
评论
你不需要任何 javascript,你只需要像这样编码你的 href:
<a href="mailto:[email protected]">email me here!</a>
评论
href
target="_blank"
在文本框上进行实时验证,一旦超过 2000(或任何最大阈值),然后显示“此电子邮件太长,无法在浏览器中完成,请<span class="launchEmailClientLink">launch what you have in your email client</span>
'
我会的
.launchEmailClientLink {
cursor: pointer;
color: #00F;
}
并将其查询到您的 onDomReady 中
$('.launchEmailClientLink').bind('click',sendMail);
这是使用jQuery和“元素”单击的方法:
$('#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][email protected]&message[to][0][email][email protected]&message[subject]=Заявка%20с%207995.by&message[html]=xxxxxx&key=oxddROOvCpKCp6InvVDqiGw', true);
xhttp.send();
评论
您可以使用此免费服务:https://www.smtpjs.com
- 包括脚本:
<script src="https://smtpjs.com/v2/smtp.js"></script>
- 使用以下方式发送电子邮件:
Email.send(
"[email protected]",
"[email protected]",
"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: "[email protected]",
From: "[email protected]",
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() 函数使用以下命令获取输入:
document.getElementById('id_of_the_element').value
例如,您可以添加另一个 HTML 元素,例如主题(使用 id=“subject”):
<textarea id="subject">write text here...</textarea>
并在 sendEmail() 函数中获取其值:
主题:document.getElementById('subject').value
大功告成!
注意:如果您没有SMTP服务器,可以在此处免费创建一个。然后在此处加密您的 SMTP 凭据(sendEmail() 中的 SecureToken 属性对应于此处生成的加密凭据)。
评论