使用Javascript发送电子邮件

时间:2008-11-07 03:33:21

标签: javascript email client-scripting

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

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

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

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

9 个答案:

答案 0 :(得分:126)

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

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=" + escape("This is my subject")
             + "&body=" + escape(document.getElementById('myText').value)
    ;

    window.location.href = link;
}

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

答案 1 :(得分:16)

以下是使用jQuery和“元素”点击的方式:

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

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

答案 2 :(得分:10)

您不需要任何javascript,只需要将您的href编码为:

<a href="mailto:me@me.com">email me here!</a>

答案 3 :(得分:5)

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

我有

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

并将其添加到你的onDomReady

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

答案 4 :(得分:5)

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

  1. 包含脚本:
  2. <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");

答案 5 :(得分:2)

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

答案 6 :(得分:1)

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

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

但如果现在&#34;电子邮件客户端&#34;我总是自动设置到网络邮件客户端,我很乐意知道。

答案 7 :(得分:1)

mandrillapp.com发送请求:

Double[] arrayName = hashtableName.get(keyName).toArray(new Double[hashtableName.get(keyName).size()]);

答案 8 :(得分:0)

您可以将以下内容添加到 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() 函数使用以下方法获取输入:

<块引用>

document.getElementById('id_of_the_element').value

例如,您可以添加另一个 HTML 元素,例如主题(带有 id="subject"):

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

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

<块引用>

主题:document.getElementById('subject').value

大功告成!

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

相关问题