我如何使用JavaScript发送电子邮件,而无需打开邮件客户端?(How do I send em

2019-07-18 02:06发布

我正在写一个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>

...这里是我的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>

上面的代码工作...但它开启了本地电子邮件客户端。 如果我删除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>

......那么电子邮件不会被发送的。 我缺少的东西吗?

任何帮助,将reeeally赞赏:-)

Answer 1:

你需要一个服务器端的支持,以实现这一目标。 基本上,你的表格应张贴(AJAX是罚款以及)到服务器,该服务器应该通过SMTP连接到某些邮件提供商和发送电子邮件。

即使有可能直接发送使用JavaScript(即从用户电脑)的电子邮件时,用户仍然必须连接到某些SMTP服务器(如gmail.com),提供SMTP凭证等,这通常是在处理服务器端(在你的应用程序),它知道这些凭据。



Answer 2:

你不能引起用户的浏览器默默发送电子邮件。 这将是一个可怕的安全问题,任何网站都可以使用他们的系统作为垃圾邮件转发和/或收获他们的电子邮件地址。

你需要做一个HTTP请求到服务器端程序(用你选择的语言),它从你的服务器发送邮件。



Answer 3:

从客户端直接


发送使用只有JavaScript电子邮件

in short: 
1. register for Mandrill to get an API key
2. load jQuery
3. use $.ajax to send an email

像这样 -

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
     });
}

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 );

});

然后使用在客户端使用$就打电话给你的电子邮件API。



Answer 4:

你不能只用客户端脚本做...你可以做一个AJAX调用一些服务器端的代码,会发邮件...



Answer 5:

需要有某种类型的后端框架,以发送电子邮件。 这可以通过PHP / ASP.NET来完成,或与当地的邮件客户端。 如果你希望用户看到什么,最好的办法是进军那些由一个AJAX调用一个单独的文件SEND_EMAIL。



Answer 6:

我想你可以使用smtpjs.com



Answer 7:

您需要直接做它的服务器上。 但更好的方法是使用PHP。 我听说PHP有一个特殊的代码,可以直接发送电子邮件,而无需打开邮件客户端。



文章来源: How do I send email with JavaScript without opening the mail client?