使用Javascript发送电子邮件

nic*_*ckf 105 javascript email client-side

这有点令人困惑解释,所以在这里忍受我...

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

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

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

nic*_*ckf 131

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

HTML:

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

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;
}
Run Code Online (Sandbox Code Playgroud)

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

  • 使用encodeURIComponent优先进行转义,它遵循与URL编码不同的任意规则.尽管Unicode字符仍有可能失败......但是整个事情很可能无论如何都会失败.带参数的mailto链接超级不可靠,不应该真正使用. (6认同)
  • bobince:是的,我认为这是一种狡猾的方式,但是替代方案是什么? (4认同)

小智 17

这是使用jQuery和"元素"点击的方式:

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

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


Rya*_*rty 11

你不需要任何javascript,你只需要你的href编码如下:

<a href="mailto:me@me.com">email me here!</a>
Run Code Online (Sandbox Code Playgroud)


jmo*_*ico 6

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

  1. 包括脚本:

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

  1. 发送电子邮件使用:

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

  • 这样你就暴露了你的 SMTP 服务器的数据,最好在服务器端用 Node 或 PHP 来做,同样感谢 (2认同)

ale*_*lex 5

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

我有

.launchEmailClientLink {
cursor: pointer;
color: #00F;
}
Run Code Online (Sandbox Code Playgroud)

并将jQuery这个放入你的onDomReady中

$('.launchEmailClientLink').bind('click',sendMail);
Run Code Online (Sandbox Code Playgroud)