如何在不打开邮件客户端的情况下使用JavaScript发送电子邮件?

j3d*_*j3d 18 html javascript html-email

我正在编写一个带有注册按钮的HTML页面,该按钮应该无需打开本地邮件客户端即可静默发送电子邮件.这是我的HTML:

<form method="post" action="">
    <input type="text" id="email_address" name="name" placeholder="Enter your email address..." required>
    <button onclick="sendMail(); return false">Send Email</button>
</form>
Run Code Online (Sandbox Code Playgroud)

...这是我的JavaScript代码:

<script type="text/javascript">
  function sendMail() {
    var link = 'mailto:hello@domain.com?subject=Message from '
             +document.getElementById('email_address').value
             +'&body='+document.getElementById('email_address').value;
    window.location.href = link;
}
</script>
Run Code Online (Sandbox Code Playgroud)

上面的代码有效...但它会打开本地电子邮件客户端.如果我删除属性中的return语句,onclick如下所示:

<form method="post" action="">
    <input type="text" id="email_address" name="name" placeholder="Enter your email address..." required>
    <button onclick="sendMail()">Send Email</button>
</form>
Run Code Online (Sandbox Code Playgroud)

...然后根本不发送电子邮件.我错过了什么吗?

任何帮助将得到真诚的赞赏:-)

Que*_*tin 14

您无法使用户的浏览器以静默方式发送电子邮件.这将是一个可怕的安全问题,因为任何网站都可以将他们的系统用作垃圾邮件中继和/或收集他们的电子邮件地址.

您需要向服务器端进程(使用您选择的语言编写)发出HTTP请求,该进程从您的服务器发送邮件.


Tom*_*icz 13

您需要服务器端支持才能实现此目的.基本上你的表单应该发布(AJAX也没问题)到服务器,该服务器应该通过SMTP连接到某个邮件提供商并发送该电子邮件.

即使可以使用JavaScript(即来自用户计算机)直接发送电子邮件,用户仍然必须连接到某个SMTP服务器(如gmail.com),提供SMTP凭据等.这通常是在服务器端(在您的应用程序中),它知道这些凭据.


rah*_*202 7

直接来自客户


仅使用JavaScript发送电子邮件

in short: 
1. register for Mandrill to get an API key
2. load jQuery
3. use $.ajax to send an email
Run Code Online (Sandbox Code Playgroud)

像这样 -

function sendMail() {
    $.ajax({
      type: 'POST',
      url: 'https://mandrillapp.com/api/1.0/messages/send.json',
      data: {
        'key': 'YOUR API KEY HERE',
        'message': {
          'from_email': 'YOUR@EMAIL.HERE',
          'to': [
              {
                'email': 'RECIPIENT@EMAIL.HERE',
                'name': 'RECIPIENT NAME (OPTIONAL)',
                'type': 'to'
              }
            ],
          'autotext': 'true',
          'subject': 'YOUR SUBJECT HERE!',
          'html': 'YOUR EMAIL CONTENT HERE! YOU CAN USE HTML!'
        }
      }
     }).done(function(response) {
       console.log(response); // if you're into that sorta thing
     });
}
Run Code Online (Sandbox Code Playgroud)

https://medium.com/design-startups/b53319616782

注意:请注意,任何人都可以看到您的API密钥,因此任何恶意用户都可能使用您的密钥发送可能会占用您配额的电子邮件.


间接通过您的服务器 - 安全


要克服上述漏洞,您可以修改自己的服务器,以便在基于会话的身份验证后发送电子邮件.

node.js - https://www.npmjs.org/package/node-mandrill

var mandrill = require('node-mandrill')('<your API Key>'); 

function sendEmail ( _name, _email, _subject, _message) {
    mandrill('/messages/send', {
        message: {
            to: [{email: _email , name: _name}],
            from_email: 'noreply@yourdomain.com',
            subject: _subject,
            text: _message
        }
    }, function(error, response){
        if (error) console.log( error );
        else console.log(response);
    });
}

// define your own email api which points to your server.

app.post( '/api/sendemail/', function(req, res){

    var _name = req.body.name;
    var _email = req.body.email;
    var _subject = req.body.subject;
    var _messsage = req.body.message;

    //implement your spam protection or checks. 

    sendEmail ( _name, _email, _subject, _message );

});
Run Code Online (Sandbox Code Playgroud)

然后使用$ .ajax在客户端上调用您的电子邮件API.