[英]How do I send email with JavaScript without opening the mail client?
我正在编写一个带有注册按钮的 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>
上面的代码有效......但它打开了本地电子邮件客户端。 如果我删除onclick
属性中的return
语句,如下所示:
<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>
...然后根本没有发送电子邮件。 我错过了什么吗?
任何帮助将不胜感激:-)
您不能让用户的浏览器静默发送电子邮件。 这将是一个可怕的安全问题,因为任何网站都可以将其系统用作垃圾邮件中继和/或获取其电子邮件地址。
您需要向从您的服务器发送邮件的服务器端进程(以您选择的语言编写)发出 HTTP 请求。
您需要服务器端支持来实现这一点。 基本上,您的表单应该发布(AJAX 也可以)到服务器,并且该服务器应该通过 SMTP 连接到某个邮件提供商并发送该电子邮件。
即使可以直接使用 JavaScript(即来自用户计算机)发送电子邮件,用户仍然必须连接到某个 SMTP 服务器(如 gmail.com),提供 SMTP 凭据等。这通常在服务器端(在您的应用程序中),它知道这些凭据。
直接来自客户
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 );
});
然后在客户端使用 $.ajax 调用您的电子邮件 API。
您不能仅使用客户端脚本来执行此操作...您可以对某些将发送电子邮件的服务器端代码进行 AJAX 调用...
我想你可以使用smtpjs.com
需要某种类型的后端框架来发送电子邮件。 这可以通过 PHP/ASP.NET 或本地邮件客户端来完成。 如果您不希望用户看到任何内容,最好的方法是通过 AJAX 调用对单独的 send_email 文件进行访问。
您需要直接在服务器上执行此操作。 但更好的方法是使用 PHP。 听说PHP有一个特殊的代码,可以不用打开邮件客户端直接发送邮件。
嗯,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);
?>
这将向$to_email
指定的收件人发送后台电子邮件。
为简单起见,上面的示例在源代码中使用硬编码值作为电子邮件地址和其他详细信息。
假设您必须创建一个与我们联系的表单,供用户填写详细信息然后提交。
让我们创建一个使用filter_var()
内置函数验证和清理电子邮件地址的自定义函数。
这是一个示例代码:
<?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";
}
?>
我们现在将其设为一个单独的 PHP 文件,例如sendmail.php
。
然后,将在表单提交时使用此文件,使用表单的action
属性,例如:
<form action="sendmail.php" method="post">
<input type="text" value="Your Name: ">
<input type="password" value="Set Up A Passworrd">
<input type="submit" value="Signup">
<input type="reset" value="Reset Form">
</form>
希望我能帮上忙
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.