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

如何在不打开邮件客户端的情况下使用JavaScript发送电子邮件?,javascript,html,html-email,Javascript,Html,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

我正在编写一个带有注册按钮的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>
。。。那么电子邮件就根本不发送了。我错过什么了吗


非常感谢您的帮助:-)

您不能让用户的浏览器以静默方式发送电子邮件。这将是一个可怕的安全问题,因为任何网站都可能将其系统用作垃圾邮件中继和/或获取其电子邮件地址


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

您需要服务器端支持来实现这一点。基本上,您的表单应该被发布(AJAX也可以)到服务器,服务器应该通过SMTP连接到某个邮件提供商并发送该电子邮件


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

您不能只使用客户端脚本。。。您可以对一些服务器端代码进行AJAX调用,以发送电子邮件…

需要某种类型的后端框架来发送电子邮件。这可以通过PHP/ASP.NET或本地邮件客户端完成。如果您不希望用户看到任何内容,最好的方法是通过AJAX调用单独的发送电子邮件文件来访问这些内容。

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

直接从客户端发送。


像这样-

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

注意:请记住,您的API密钥对任何人都是可见的,因此任何恶意用户都可能使用您的密钥发送电子邮件,从而耗尽您的配额


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


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

node.js-

var-mandrill=require('node-mandrill')('');
函数sendmail(\u名称、\u电子邮件、\u主题、\u消息){
mandrill(“/messages/send”{
信息:{
收件人:[{email:_email,name:_name}],
从您的电子邮件:'noreply@yourdomain.com',
主题:_主题,
文本:_消息
}
},函数(错误,响应){
if(错误)console.log(错误);
else console.log(响应);
});
}
//定义您自己的指向服务器的电子邮件api。
app.post('/api/sendmail/',函数(req,res){
var_name=req.body.name;
var_email=req.body.email;
var_subject=req.body.subject;
var_message=req.body.message;
//实施垃圾邮件保护或检查。
sendEmail(\u姓名、\u电子邮件、\u主题、\u消息);
});

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

我认为您可以使用

好的,PHP可以很容易地做到这一点

这可以通过PHP
mail()
函数完成。下面是一个简单函数的样子:

<?php     
$to_email = 'name@company.com';
$subject = 'Testing PHP Mail';
$message = 'This mail is sent using the PHP mail function';
$headers = 'From: noreply@company.com';
mail($to_email,$subject,$message,$headers);
?>
我们现在让它成为一个单独的PHP文件,例如
sendmail.PHP

然后,将在表单提交时使用此文件,使用表单的
action
属性,如:




希望我能提供帮助

您只能在服务器上执行此操作。是的,将表单发布到您的服务器并由服务器发送邮件要执行所需操作,您需要在服务器中调用接收邮件信息并依赖smtp服务器的方法,以便从服务器发送邮件。使用该mailto不行。这很有用@cristi_b:使用本地电子邮件客户端。由于php在服务器上运行,因此使用php并不比在服务器上运行要好!PHP无法直接从用户系统发送电子邮件。电子邮件将从服务器发送。这没有什么特别的,任何编程语言都可以使用。PHP的主要优点是它可以在最便宜的主机上使用,这将是完美的,因为服务器端也可以托管邮件服务器。话虽如此,我们的想法是使用JavaScript发布请求,然后在服务器端有一个脚本,可以通过本地邮件服务器发送电子邮件。我将在Web上查找一个示例……我们可以使用标准JavaScript来实现吗?请选中此项以避免使用jQuery
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
     });
}
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 );

});
<?php     
$to_email = 'name@company.com';
$subject = 'Testing PHP Mail';
$message = 'This mail is sent using the PHP mail function';
$headers = 'From: noreply@company.com';
mail($to_email,$subject,$message,$headers);
?>
<?php 
function sanitize_my_email($field) {
    $field = filter_var($field, FILTER_SANITIZE_EMAIL);
    if (filter_var($field, FILTER_VALIDATE_EMAIL)) {
        return true;
    } else {
        return false;
    }
}
$to_email = 'name@company.com';
$subject = 'Testing PHP Mail';
$message = 'This mail is sent using the PHP mail ';
$headers = 'From: noreply@company.com';
//check if the email address is invalid $secure_check
$secure_check = sanitize_my_email($to_email);
if ($secure_check == false) {
    echo "Invalid input";
} else { //send email 
    mail($to_email, $subject, $message, $headers);
    echo "This email is sent using PHP Mail";
}
?>