116

这有点难以解释,所以请耐心等待......

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

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

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

4

9 回答 9

149

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

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

于 2008-11-07T03:33:28.700 回答
19

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

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

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

于 2012-02-20T18:00:37.823 回答
14

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

<a href="mailto:me@me.com">email me here!</a>
于 2008-11-07T03:42:01.460 回答
6

您可以使用此免费服务: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"
);
于 2018-01-21T16:19:42.360 回答
5

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

我会有的

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

和 jQuery 这个到你的 onDomReady

$('.launchEmailClientLink').bind('click',sendMail);
于 2008-11-07T03:47:35.737 回答
3

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

于 2008-11-07T03:41:17.263 回答
2

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

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

但是,如果现在“电子邮件客户端”总是自动设置为网络邮件客户端,我会很高兴知道。

于 2015-09-22T17:13:20.937 回答
1

向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]=mail@7995.by&message[to][0][email]=zdanevich.vitaly@yaa.ru&message[subject]=Заявка%20с%207995.by&message[html]=xxxxxx&key=oxddROOvCpKCp6InvVDqiGw', true);
xhttp.send();
于 2015-10-09T14:45:10.283 回答
0

您可以将以下内容添加到<head>您的 HTML 文件中:

<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

你完成了!

Note: If you do not have a SMTP server you can create one for free here. And then encrypt your SMTP credentials here (the SecureToken attribute in sendEmail() corresponds to the encrypted credentials generated there).

于 2021-01-13T11:53:32.717 回答