使用 Javascript 发送电子邮件

IT技术 javascript email client-side
2021-02-05 23:48:35

这解释起来有点令人困惑,所以请耐心等待......

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

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

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

6个回答

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

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 的最大长度有关。

当您可以将 href 属性设置为相同的内容而不是使用 javascript 时,这是一种非常迂回的方法。
2021-03-15 23:48:35
如果您想在电子邮件中包含 textarea 的内容,则不是迂回。也是从垃圾邮件收集器隐藏您的电子邮件的好方法。
2021-03-30 23:48:35
@Gordon- 假设电子邮件收割机不会正则表达式内联 javascript 或遵循 <script src="">
2021-04-04 23:48:35
优先使用 encodeURIComponent 来转义遵循不同于 URL 编码的任意规则。虽然 Unicode 字符仍然可能会失败……但无论如何,整个事情很可能会失败。带有参数的 mailto 链接非常不可靠,不应该真正使用。
2021-04-07 23:48:35
bobince:是的,我认为这是一种狡猾的方法,但还有什么选择呢?
2021-04-10 23:48:35

这是使用 jQuery 和“元素”单击的方法:

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

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

正如 OP 所提到的,这仍然受到 URL 大小限制。
2021-03-14 23:48:35
我只想知道,按下发送按钮需要时间吗?
2021-04-10 23:48:35

你不需要任何 javascript,你只需要你的 href 像这样编码:

<a href="mailto:me@me.com">email me here!</a>
@tvanfosson 如果单击锚元素时页面上的电子邮件地址是已知的,您可以尝试为锚指定一个 ID 并href在选择地址时设置其值。如果在点击发生时需要一个帖子来获取电子邮件地址,这可能不起作用。
2021-03-16 23:48:35
我想我期待真正的代码动态填充地址。
2021-04-10 23:48:35

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

  1. 包括脚本:

<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"
);
这样你就暴露了你的 SMTP 服务器的数据,最好在服务器端用 Node 或 PHP 来做,同样感谢
2021-03-11 23:48:35
您是否尝试过“在此处设置 SMTP 服务器”按钮?您可以在答案中共享的链接中找到它。
2021-04-01 23:48:35

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

我想要的

.launchEmailClientLink {
cursor: pointer;
color: #00F;
}

和 jQuery 到你的 onDomReady

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