使用EmailJS从JavaScript直接发送电子邮件

4

使用EmailJS可以直接从JavaScript发送电子邮件。

请查看下面的答案,我收到了很多有关恶意攻击的评论..因为该文件在浏览器中加载,所以恶意用户可以轻易地获取您的密钥配置。那么,如何避免呢?

 var templateParams = {
    to_name: 'xyz',
    from_name: 'abc',
    message_html: 'Please Find out the attached file'
  };

  emailjs.send('YOUR_SERVICE_ID', 'YOUR_TEMPLATE_ID', templateParams)
    .then(function(response) {
      console.log('SUCCESS!', response.status, response.text);
    }, function(error) {
      console.log('FAILED...', error);
    });


当执行这段代码时,您遇到了什么问题? - MGot90
如何避免恶意攻击? - Prabhat
3个回答

4

嗨,您可以使用EmailJS直接发送电子邮件,而无需使用服务器端代码。它完全是客户端的。

为了发送邮件,您需要配置以下细节:

1)首先,访问此网站 [https://www.emailjs.com/] 并创建免费账户。

2)点击“连接你的邮件服务”按钮并进行配置。您将获得'YOUR_SERVICE_ID'

3)然后点击“创建电子邮件模板”按钮并进行配置。您将获得'YOUR_TEMPLATE_ID'

4)单击“从JavaScript发送电子邮件”按钮。您将获得代码。

5)在[https://dashboard.emailjs.com/account]中可以找到'YOUR_USER_ID'

我已完成所有配置并添加了下面的代码,请检查:

注意:请对"YOUR_USER_ID"进行加密或嵌入以防止恶意攻击。

<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/emailjs-com@2.4.0/dist/email.min.js">
</script>
<script type="text/javascript">
  (function() {
    emailjs.init("YOUR_USER_ID"); //please encrypted user id for malicious attacks
  })();
//set the parameter as per you template parameter[https://dashboard.emailjs.com/templates]
  var templateParams = {
    to_name: 'xyz',
    from_name: 'abc',
    message_html: 'Please Find out the attached file'
  };

  emailjs.send('YOUR_SERVICE_ID', 'YOUR_TEMPLATE_ID', templateParams)
    .then(function(response) {
      console.log('SUCCESS!', response.status, response.text);
    }, function(error) {
      console.log('FAILED...', error);
    });
</script>


3
当您像这样使用服务密钥时,您不会让每个访问您网站的人都可以访问它吗?因此,该人可能会滥用您的服务密钥,例如发送垃圾邮件。 - Endzeit
好的,谢谢!我没有在任何地方提供服务密钥,请问您能帮我找到它吗? - Prabhat
这似乎是一个非常糟糕的想法,正如@Endzeit所提到的那样。这也是为什么你不应该尝试在前端嵌入大量电子邮件功能的绝佳例子。 - verandaguy
2
你说你需要emailjs API密钥/承载令牌/任何东西来调用emailJS的服务发送电子邮件。这些令牌必须存在于您的JS代码库中,该库提供给客户端。客户端可以提取这些令牌并冒充您滥用emailjs服务。你不应该在客户端应用程序中嵌入此类数据,无论如何。 - verandaguy
1
@Prabhat 不可以,因为你不应该将你自己真实的服务凭证,包括 API 密钥,交给客户信任。你的客户完全可以提取、滥用和滥用这些凭证,包括冒充你并对其他用户进行攻击。 - verandaguy
显示剩余6条评论

0

使用JavaScript可能会将您的凭据(如用户ID、服务ID)暴露给公众。为此,您可以将这些密钥值存储在一个变量(半值)中,然后在运行时进行操作,例如附加密钥的剩余一半等。但这并不完全安全。

代码:

<html>
<head>
  <title>Contact Us</title>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet">
  <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js"></script>
  <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/emailjs-com@2/dist/email.min.js"></script>
</head>
<body>
  <div class="container">
    <div class="card col-md-6 offset-md-3" style="margin-top:50px;">
      <div class="card-body">
        <h2>Contact Us</h2>
        <label for="thename">Name</label>
        <input type="text" class="form-control" id="thename" placeholder="Enter Name">
        <label for="themail">Email:</label>
        <input type="email" class="form-control" id="themail" placeholder="Enter Email">
        <label for="themsg">Message</label>
        <textarea class="form-control" id="themsg" placeholder="Enter Message"></textarea>
        <button class="btn btn-danger btn-sm" style="margin-top:10px;" onCLick="sendemail();">Send</button>
        </form>
      </div>
    </div>
  </div>
  <script>
    function sendemail() {
      var userid = "YourUserID"
      emailjs.init(userid);
      var thename = document.getElementById('thename').value;
      var themail = document.getElementById('themail').value;
      var themsg = document.getElementById('themsg').value;
      var validmail = /^w+([.-]?w+)*@w+([.-]?w+)*(.w{2,3})+$/;
      if (thename == "") {
        alert("Please Enter Name");
      }
      else if (themail == "" || themail.match(!validmail)) {
        alert("Please Enter Valid Email");
      }

      else if (themsg == "") {
        alert("Please Enter Message");
      }
      else {
        var contactdetail = {
          from_name: thename,
          from_email: themail,
          message: themsg
        };

        emailjs.send('YourServiceID', 'YourTemplateID', contactdetail).then(function (res) {
          alert("Email Sent Successfully");
        },
          reason => {
            alert("Error Occur");
          })
      }
    }
  </script>
</body>
</html>

请确保将“YourUserID”、“YourServiceID”和“YourTemplateID”替换为您自己的ID

参考:Narendra Dwivedi - 从JavaScript发送电子邮件


0

<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/emailjs-com@2.4.0/dist/email.min.js">
</script>
<script type="text/javascript">
  (function() {
    emailjs.init("service_ud48moz"); //please encrypted user id for malicious attacks
  })();
//set the parameter as per you template parameter[https://dashboard.emailjs.com/templates]
  var templateParams = {
    to_name: 'xyz',
    from_name: 'abc',
    message_html: 'Please Find out the attached file'
  };

  emailjs.send('service_ud48moz', 'template_njhhxon', templateParams)
    .then(function(response) {
      console.log('SUCCESS!', response.status, response.text);
    }, function(error) {
      console.log('FAILED...', error);
    });
</script>


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接