这有点难以解释,还请耐心看完...
我想建立一个系统,让用户可以通过我的网站发送模板邮件,但实际上并不使用我的服务器进行发送——它只会打开他们自己的本地邮件客户端,并准备好一封邮件。应用程序将填写邮件正文中的预定义变量,以免用户自己输入。用户可以根据需要编辑邮件内容,如果不完全符合他们的要求。
有很多原因使我希望通过用户的本地邮件客户端来发送邮件,所以让服务器发送邮件并不是一个选项:必须100%基于客户端。
我已经有一个基本工作的解决方案,我将把细节发布为答案,我想知道是否有更好的方法?
这有点难以解释,还请耐心看完...
我想建立一个系统,让用户可以通过我的网站发送模板邮件,但实际上并不使用我的服务器进行发送——它只会打开他们自己的本地邮件客户端,并准备好一封邮件。应用程序将填写邮件正文中的预定义变量,以免用户自己输入。用户可以根据需要编辑邮件内容,如果不完全符合他们的要求。
有很多原因使我希望通过用户的本地邮件客户端来发送邮件,所以让服务器发送邮件并不是一个选项:必须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=" + encodeURIComponent("This is my subject")
+ "&body=" + encodeURIComponent(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")
);
});
那么,您可以通过从输入字段中提取内容(即使用$('#input1').val()
)或通过使用$.get('...')
的服务器端脚本来获取您的内容。玩得开心
您不需要任何JavaScript,只需将您的href编码如下:
<a href="mailto:me@me.com">email me here!</a>
href
值。如果需要发布以获取单击发生时的电子邮件地址,则可能无法使用此方法。 - Micteutarget="_blank"
也是必需的。 - GorvGoyl<script src="https://smtpjs.com/v2/smtp.js"></script>
Email.send(
"from@you.com",
"to@them.com",
"This is a subject",
"this is the body",
"smtp.yourisp.com",
"username",
"password"
);
文本框可以进行实时验证,一旦超过2000个字符(或任何最大阈值),则显示“该电子邮件太长,无法在浏览器中完成,请 <span class="launchEmailClientLink">使用您的电子邮件客户端</span>
”。
我会这样写
.launchEmailClientLink {
cursor: pointer;
color: #00F;
}
$('.launchEmailClientLink').bind('click',sendMail);
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();
<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>
<textarea id="text">write text here...</textarea>
<input type="button" value="Send Email" onclick="sendEmail()">
因此,sendEmail()函数使用以下方式获取输入:
例如,您可以添加另一个HTML元素,如主题(带有id="subject"):document.getElementById('id_of_the_element').value
<textarea id="subject">在此处编写文本...</textarea>
并在sendEmail()函数中获取其值:
主题:document.getElementById('subject').value
然后就完成了!
注意:如果您没有SMTP服务器,可以在这里免费创建一个。然后加密您的SMTP凭据这里(sendEmail()中的SecureToken属性对应于生成的加密凭据)。