Cách gửi email từ JavaScript


244

Tôi muốn trang web của tôi có khả năng gửi email mà không cần làm mới trang. Vì vậy, tôi muốn sử dụng Javascript.

<form action="javascript:sendMail();" name="pmForm" id="pmForm" method="post">
Enter Friend's Email:
<input name="pmSubject" id="pmSubject" type="text" maxlength="64" style="width:98%;" />
<input name="pmSubmit" type="submit" value="Invite" />

Đây là cách tôi muốn gọi hàm, nhưng tôi không chắc nên đặt gì vào hàm javascript. Từ nghiên cứu tôi đã thực hiện, tôi đã tìm thấy một ví dụ sử dụng phương thức mailto, nhưng sự hiểu biết của tôi là không thực sự gửi trực tiếp từ trang web.

Vì vậy, câu hỏi của tôi là tôi có thể tìm thấy những gì cần đặt trong hàm JavaScript để gửi email trực tiếp từ trang web.

function sendMail() {
    /* ...code here...    */
}

7
Sử dụng ngôn ngữ phía máy chủ để thực sự gửi email và AJAX để có giao diện mà bạn mong muốn.
Shadow Wizard là Ear For You

1
Điều này có thể hơi muộn, nhưng điều này có thể giúp bạn: stackoverflow.com/questions/271171/
Khăn

2
Người dùng Gmail có thể có nó, hãy xem developers.google.com/gmail/api
Densi Tensy

Như được đề cập dưới đây, bạn cũng có thể muốn xem EmailJS , cho phép gửi email bằng các mẫu dựng sẵn trực tiếp từ Javascript và cũng hỗ trợ các tham số động, tệp đính kèm, captcha, API REST và hơn thế nữa. Chúng tôi cũng cung cấp một cấp miễn phí để bắt đầu [tiết lộ - Tôi là một trong những người sáng tạo]
Sasha

Lưu ý nếu bạn sử dụng câu trả lời được chấp nhận, email sẽ đến từ tài khoản của người dùng. Để gửi email từ tài khoản cá nhân hoặc doanh nghiệp của bạn, cách đúng đắn là sử dụng javascript để gửi email thông qua máy chủ của riêng bạn hoặc dịch vụ của bên thứ ba như Byteline . Chi tiết hơn trong câu trả lời dưới đây.
DSBajna

Câu trả lời:


311

Bạn không thể gửi email trực tiếp bằng javascript.

Tuy nhiên, bạn có thể mở ứng dụng thư khách của người dùng:

window.open('mailto:test@example.com');

Ngoài ra còn có một số tham số để điền trước đối tượng và phần thân:

window.open('mailto:test@example.com?subject=subject&body=body');

Một giải pháp khác là thực hiện cuộc gọi ajax đến máy chủ của bạn, để máy chủ gửi email. Hãy cẩn thận không cho phép bất cứ ai gửi bất kỳ email thông qua máy chủ của bạn.


3
Nếu chương trình mở trang đã có các tính năng máy khách email .. (như Opera 12.50) thì nó sẽ mở liên kết dưới dạng một URL thông thường. Họ cũng là Thunderbird có công cụ tắc kè firefox: nó có thể mở các trang web từ các siêu liên kết trong e-mail dưới dạng các tab mới.
dùng2284570

11
Chỉ cần một lưu ý, bạn cũng có thể sử dụng window.location.href(như trong câu trả lời này: stackoverflow.com/questions/271171/ Khăn ) để mở ứng dụng email và nó không để lại cửa sổ trống phía sau khi người dùng kết thúc email.
igneizard

1
subjectbodycác biến hoặc chúng là văn bản thực tế sẽ có trong các lĩnh vực?
Edward Karak

3
câu trả lời đó thực sự không trả lời câu hỏi, nhưng câu trả lời của @ rahulroy là tốt
Medet Tleukabiluly

3
Tôi sẽ tiến thêm một bước và làm gì window.open( String( 'mailto:recipient^example.com' ).replace('^', '@') );để nhầm lẫn các bot spam
Pavel Lebedeff

94

Gián tiếp qua máy chủ của bạn - Gọi API bên thứ 3 - an toàn và được đề xuất


Máy chủ của bạn có thể gọi API của bên thứ 3 sau khi xác thực và ủy quyền thích hợp. Khóa API không được hiển thị cho khách hàng.

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

});

và sau đó sử dụng $ .ajax trên máy khách để gọi API email của bạn.


Trực tiếp từ khách hàng - Gọi API của bên thứ 3 - không được đề xuất


Gửi email chỉ sử dụng JavaScript

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

Như thế này -

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

Lưu ý: Hãy nhớ rằng khóa API của bạn hiển thị cho bất kỳ ai, vì vậy bất kỳ người dùng độc hại nào cũng có thể sử dụng khóa của bạn để gửi email có thể ăn hết hạn ngạch của bạn.


8
mặc dù bài báo nói điều này tôi cảm thấy như nó nên được nói ở đây cũng như mặc dù điều này sẽ hoạt động, có một số vấn đề bảo mật khi bạn cần gửi khóa api của mình cho khách hàng. điều này có thể bị lạm dụng.
cantdutchthis

35

Tôi không thể tìm thấy một câu trả lời thực sự thỏa mãn câu hỏi ban đầu.

  • Mandrill không mong muốn do chính sách giá mới của nó, cộng với yêu cầu dịch vụ phụ trợ nếu bạn muốn giữ thông tin đăng nhập của mình an toàn.
  • Bạn thường nên ẩn email của mình để không kết thúc bất kỳ danh sách nào (giải pháp mailto phơi bày vấn đề này và không thuận tiện cho hầu hết người dùng).
  • Thật rắc rối khi thiết lập sendMail hoặc yêu cầu một phụ trợ chỉ để gửi email.

Tôi kết hợp một dịch vụ miễn phí đơn giản cho phép bạn thực hiện một yêu cầu POST HTTP tiêu chuẩn để gửi email. Nó được gọi là PostMail và bạn chỉ cần đăng một biểu mẫu, sử dụng Javascript hoặc jQuery. Khi bạn đăng ký, nó cung cấp cho bạn mã mà bạn có thể sao chép và dán vào trang web của mình. Dưới đây là một số ví dụ:

Javascript:

<form id="javascript_form">
    <input type="text" name="subject" placeholder="Subject" />
    <textarea name="text" placeholder="Message"></textarea>
    <input type="submit" id="js_send" value="Send" />
</form>

<script>

    //update this with your js_form selector
    var form_id_js = "javascript_form";

    var data_js = {
        "access_token": "{your access token}" // sent after you sign up
    };

    function js_onSuccess() {
        // remove this to avoid redirect
        window.location = window.location.pathname + "?message=Email+Successfully+Sent%21&isError=0";
    }

    function js_onError(error) {
        // remove this to avoid redirect
        window.location = window.location.pathname + "?message=Email+could+not+be+sent.&isError=1";
    }

    var sendButton = document.getElementById("js_send");

    function js_send() {
        sendButton.value='Sending…';
        sendButton.disabled=true;
        var request = new XMLHttpRequest();
        request.onreadystatechange = function() {
            if (request.readyState == 4 && request.status == 200) {
                js_onSuccess();
            } else
            if(request.readyState == 4) {
                js_onError(request.response);
            }
        };

        var subject = document.querySelector("#" + form_id_js + " [name='subject']").value;
        var message = document.querySelector("#" + form_id_js + " [name='text']").value;
        data_js['subject'] = subject;
        data_js['text'] = message;
        var params = toParams(data_js);

        request.open("POST", "https://postmail.invotes.com/send", true);
        request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");

        request.send(params);

        return false;
    }

    sendButton.onclick = js_send;

    function toParams(data_js) {
        var form_data = [];
        for ( var key in data_js ) {
            form_data.push(encodeURIComponent(key) + "=" + encodeURIComponent(data_js[key]));
        }

        return form_data.join("&");
    }

    var js_form = document.getElementById(form_id_js);
    js_form.addEventListener("submit", function (e) {
        e.preventDefault();
    });
</script>

jQuery:

<form id="jquery_form">
    <input type="text" name="subject" placeholder="Subject" />
    <textarea name="text" placeholder="Message" ></textarea>
    <input type="submit" name="send" value="Send" />
</form>

<script>

    //update this with your $form selector
    var form_id = "jquery_form";

    var data = {
        "access_token": "{your access token}" // sent after you sign up
    };

    function onSuccess() {
        // remove this to avoid redirect
        window.location = window.location.pathname + "?message=Email+Successfully+Sent%21&isError=0";
    }

    function onError(error) {
        // remove this to avoid redirect
        window.location = window.location.pathname + "?message=Email+could+not+be+sent.&isError=1";
    }

    var sendButton = $("#" + form_id + " [name='send']");

    function send() {
        sendButton.val('Sending…');
        sendButton.prop('disabled',true);

        var subject = $("#" + form_id + " [name='subject']").val();
        var message = $("#" + form_id + " [name='text']").val();
        data['subject'] = subject;
        data['text'] = message;

        $.post('https://postmail.invotes.com/send',
            data,
            onSuccess
        ).fail(onError);

        return false;
    }

    sendButton.on('click', send);

    var $form = $("#" + form_id);
    $form.submit(function( event ) {
        event.preventDefault();
    });
</script>

Một lần nữa, trong sự tiết lộ đầy đủ, tôi đã tạo ra dịch vụ này vì tôi không thể tìm thấy câu trả lời phù hợp.


Tôi đang tìm giải pháp này, cảm ơn vì câu trả lời nhưng tôi tự hỏi làm thế nào tôi có thể thêm một hộp văn bản ở dạng html, bởi vì bất cứ khi nào tôi đang cố gắng thay đổi mã để thêm một hộp văn bản cho một số thông tin khác, mã đã dừng đang làm việc. Bạn có biết bất kỳ giải pháp cho việc này.
Suman

Người dùng Gmail thực sự có thể làm điều bạn muốn - xem nhà phát
triển.google.com/gmail/api

1
Đây là giải pháp tốt nhất. Cảm ơn rât nhiều. Mandrill không còn gói miễn phí nữa và mailgun không hỗ trợ cors và do đó JavaScript
stallingOne

3
Điều này không có vấn đề tương tự như những người khác? Mã thông báo truy cập (Khóa API) được hiển thị
Greg Enni

1
Họ có giới hạn hàng ngày là 25 email mỗi ngày.
Archi

26

Bạn có thể tìm thấy những gì cần đặt bên trong hàm JavaScript trong bài viết này.

function getAjax() {
    try {
        if (window.XMLHttpRequest) {
            return new XMLHttpRequest();
        } else if (window.ActiveXObject) {
            try {
                return new ActiveXObject('Msxml2.XMLHTTP');
            } catch (try_again) {
                return new ActiveXObject('Microsoft.XMLHTTP');
            }
        }
    } catch (fail) {
        return null;
    }
}

function sendMail(to, subject) {
     var rq = getAjax();

     if (rq) {
         // Success; attempt to use an Ajax request to a PHP script to send the e-mail
         try {
             rq.open('GET', 'sendmail.php?to=' + encodeURIComponent(to) + '&subject=' + encodeURIComponent(subject) + '&d=' + new Date().getTime().toString(), true);

             rq.onreadystatechange = function () {
                 if (this.readyState === 4) {
                     if (this.status >= 400) {
                         // The request failed; fall back to e-mail client
                         window.open('mailto:' + to + '?subject=' + encodeURIComponent(subject));
                     }
                 }
             };

             rq.send(null);
         } catch (fail) {
             // Failed to open the request; fall back to e-mail client
             window.open('mailto:' + to + '?subject=' + encodeURIComponent(subject));
         }
     } else {
         // Failed to create the request; fall back to e-mail client
         window.open('mailto:' + to + '?subject=' + encodeURIComponent(subject));
     }
}

Cung cấp tập lệnh PHP (hoặc bất kỳ ngôn ngữ nào) của riêng bạn để gửi e-mail.


18

Tôi đang phá vỡ tin tức cho bạn. Bạn không thể gửi email bằng JavaScript mỗi lần.


Dựa trên bối cảnh câu hỏi của OP, câu trả lời của tôi ở trên không còn đúng nữa như được chỉ ra bởi @KennyEvitt trong các bình luận. Có vẻ như bạn có thể sử dụng JavaScript như một ứng dụng khách SMTP .

Tuy nhiên , tôi chưa đào sâu hơn để tìm hiểu xem nó có đủ an toàn và đa trình duyệt tương thích hay không. Vì vậy, tôi không thể khuyến khích cũng không khuyến khích bạn sử dụng nó. Sử dụng có nguy cơ của riêng bạn.


1
có thể được thực hiện với ajax hoặc thậm chí ẩn iframe ... bạn không bao giờ biết
Zebra

1
@danialentzri: JavaScript sẽ không bao giờ là chuyển tiếp thư, đó là ý nghĩa của "per se" .
Shef

Giáo sư! Tôi có một màn hình nhỏ để cho bạn biết sự thật và nó không hỗ trợ thanh cuộn.
Ngựa vằn

@KennyEvitt từ một cái liếc nhanh tôi đã chụp, có vẻ như bạn vẫn cần một chuyển tiếp thư. Về cơ bản, đó là những gì tôi đã nói trong câu trả lời của mình.
Shef

@Shef Bạn đã thấy gì trong cái nhìn nhanh của bạn? Tôi không thể tìm thấy một yêu cầu cho bất cứ điều gì ngoài những gì khách hàng email khác yêu cầu. Hoặc bạn đang tuyên bố rằng, ví dụ, Microsoft Outlook cũng không thể gửi email? Điều đó đúng về mặt kỹ thuật nhưng không phải trong bất kỳ ý nghĩa nào mà tôi mong đợi bất cứ ai khác hiểu.
Kenny Evitt

16

Tôi biết rằng tôi đã quá muộn để viết câu trả lời cho câu hỏi này nhưng tuy nhiên tôi nghĩ rằng nó sẽ được sử dụng cho bất kỳ ai đang nghĩ đến việc gửi email thông qua javascript.

Cách đầu tiên tôi muốn đề xuất là sử dụng một cuộc gọi lại để làm điều này trên máy chủ. Nếu bạn thực sự muốn nó được xử lý bằng cách sử dụng javascript folowing là những gì tôi khuyên bạn nên.

Cách dễ nhất tôi tìm thấy là sử dụng smtpJs. Một thư viện miễn phí có thể được sử dụng để gửi email.

1. Bao gồm các tập lệnh như dưới đây

<script src="https://smtpjs.com/v3/smtp.js"></script>

2. Bạn có thể gửi một email như thế này

Email.send({
    Host : "smtp.yourisp.com",
    Username : "username",
    Password : "password",
    To : 'them@website.com',
    From : "you@isp.com",
    Subject : "This is the subject",
    Body : "And this is the body"
    }).then(
      message => alert(message)
    );

Điều này không được khuyến khích vì nó sẽ hiển thị mật khẩu của bạn ở phía máy khách. Vì vậy, bạn có thể thực hiện các thao tác sau để mã hóa thông tin đăng nhập SMTP của mình và khóa nó vào một tên miền và chuyển mã thông báo an toàn thay vì thông tin đăng nhập thay thế.

Email.send({
    SecureToken : "C973D7AD-F097-4B95-91F4-40ABC5567812",
    To : 'them@website.com',
    From : "you@isp.com",
    Subject : "This is the subject",
    Body : "And this is the body"
}).then(
  message => alert(message)
);

Cuối cùng, nếu bạn không có máy chủ SMTP, bạn sử dụng dịch vụ chuyển tiếp smtp, chẳng hạn như Email đàn hồi

Ngoài ra, đây là liên kết đến trang web chính thức của SmtpJS.com nơi bạn có thể tìm thấy tất cả ví dụ bạn cần và nơi bạn có thể tạo mã thông báo an toàn của mình.

Tôi hy vọng ai đó tìm thấy chi tiết này hữu ích. Chúc mừng mã hóa.


3
Điều này vẫn đang cung cấp quyền truy cập đầy đủ vào máy chủ SMTP của bạn cho bên thứ ba để họ có thể chuyển tiếp thư cho bạn để đổi lấy điều gì?
Quentin

SecureToken chỉ hợp lệ cho một tên miền mà bạn chỉ định khi được tạo, vì vậy việc gọi js từ một tên miền khác sẽ không hoạt động.
smoore4

8

Dường như có một giải pháp mới ở đường chân trời. Nó được gọi là EmailJS . Họ tuyên bố rằng không cần mã máy chủ. Bạn có thể yêu cầu một lời mời.

Cập nhật tháng 8 năm 2016: EmailJS dường như đã hoạt động. Bạn có thể gửi miễn phí tới 200 email mỗi tháng và nó cung cấp đăng ký cho khối lượng cao hơn.


Đây là một chút của một tay lái bum, UI rất đẹp nhưng nhét tất cả các ví dụ tài liệu hoặc trợ giúp. Tránh.
Skarsnik

Tôi đã thử emailJS, nhưng nó chỉ gửi đến email của tôi. Làm thế nào tôi có thể gửi đến bất kỳ email nào khác?
Maged Saeed

Điều này là muộn nhưng @MagedSaeed trong phần mẫu email, khi chỉnh sửa một mẫu bạn có thể chỉ định email "Tới". Bạn thậm chí có thể làm cho trường "Tới" động bằng tùy chọn tạo khuôn mẫu của chúng. Tài liệu của họ làm một công việc tốt chi tiết nó.
abagh0703

6

window.open ('mailto: test@example.com'); như trên không có gì để che giấu địa chỉ email "test@example.com" khỏi bị thu hoạch bởi spam bots. Tôi đã từng liên tục gặp phải vấn đề này.

var recipient="test";
var at = String.fromCharCode(64);
var dotcom="example.com";
var mail="mailto:";
window.open(mail+recipient+at+dotcom);

4

Javascript là phía máy khách, bạn không thể gửi email bằng Javascript. Trình duyệt chỉ có thể nhận ra mailto:và bắt đầu ứng dụng thư khách mặc định của bạn.


điều đó sẽ giải thích tại sao tôi không thể tìm thấy bất kỳ thông tin nào về nó. Cảm ơn bạn!!
user906357

Điều tương tự ... API tương lai có thể cho phép kết nối thô tới một cổng đang đến ...
user2284570

Đây là câu trả lời chính xác nhất! Tất cả các câu trả lời khác làm cho nó có thể nghe được, đang sử dụng back-end ở đâu đó .. OP chỉ nói Javascript. Có nghĩa là, không có back-end, ngay cả khi đó là back-end SAAS. Câu trả lời chính xác.
Dan Chase

4

Trong sendMail()chức năng của bạn , thêm một cuộc gọi ajax vào phụ trợ của bạn, nơi bạn có thể thực hiện điều này ở phía máy chủ.


4

function send() {
  setTimeout(function() {
    window.open("mailto:" + document.getElementById('email').value + "?subject=" + document.getElementById('subject').value + "&body=" + document.getElementById('message').value);
  }, 320);
}
input {
  text-align: center;
  border-top: none;
  border-right: none;
  border-left: none;
  height: 10vw;
  font-size: 2vw;
  width: 100vw;
}

textarea {
  text-align: center;
  border-top: none;
  border-right: none;
  border-left: none;
  border-radius: 5px;
  width: 100vw;
  height: 50vh;
  font-size: 2vw;
}

button {
  border: none;
  background-color: white;
  position: fixed;
  right: 5px;
  top: 5px;
  transition: transform .5s;
}

input:focus {
  outline: none;
  color: orange;
  border-radius: 3px;
}

textarea:focus {
  outline: none;
  color: orange;
  border-radius: 7px;
}

button:focus {
  outline: none;
  transform: scale(0);
  transform: rotate(360deg);
}
<!DOCTYPE html>
<html>

<head>
  <title>Send Email</title>
</head>

<body align=center>
  <input id="email" type="email" placeholder="yourfreind@something.somthing"></input><br><br>
  <input id="subject" placeholder="Subject"></input><br>
  <textarea id="message" placeholder="Message"></textarea><br>
  <button id="send" onclick="send()"><img src=https://www.dropbox.com/s/chxcszvnrdjh1zm/send.png?dl=1 width=50px height=50px></img></button>
</body>

</html>


Nó đang sử dụng email client, không trực tiếp từ javascript.
Weijing Jay Lin

2
Ngoài ra, trong khi thật tuyệt khi có một ví dụ hoàn chỉnh, CSS chỉ gây nhầm lẫn mọi thứ vì mọi người phải lọc nó ra để hiểu ví dụ. Không có vi phạm nghĩa.
Dan Chase

2

JavaScript không thể gửi email từ trình duyệt web. Tuy nhiên, lùi lại từ giải pháp bạn đã cố gắng thực hiện, bạn có thể làm điều gì đó đáp ứng yêu cầu ban đầu:

gửi email mà không làm mới trang

Bạn có thể sử dụng JavaScript để xây dựng các giá trị mà email sẽ cần và sau đó thực hiện yêu cầu AJAX đến tài nguyên máy chủ thực sự gửi email. (Tôi không biết ngôn ngữ / công nghệ phía máy chủ nào bạn đang sử dụng, vì vậy phần đó tùy thuộc vào bạn.)

Nếu bạn không quen thuộc với AJAX, một tìm kiếm nhanh trên Google sẽ cung cấp cho bạn nhiều thông tin. Nói chung, bạn có thể tải nó lên và chạy nhanh với hàm $ .ajax () của jQuery. Bạn chỉ cần có một trang trên máy chủ có thể được gọi trong yêu cầu.


2

Có vẻ như một "câu trả lời" cho việc này là triển khai ứng dụng khách SMPT. Xem email.js để biết thư viện JavaScript có ứng dụng khách SMTP.

Đây là repo GitHub cho máy khách SMTP. Dựa trên README của repo, có vẻ như các miếng chêm hoặc polyfill khác nhau có thể được yêu cầu tùy thuộc vào trình duyệt của khách hàng, nhưng nhìn chung nó có vẻ khả thi (nếu không thực sự được thực hiện một cách đáng kể), tho không phải là cách dễ dàng mô tả Câu trả lời dài đây.


2

Có một dịch vụ kết hợp. Bạn có thể kết hợp các giải pháp được liệt kê ở trên như ủy quyền với EmailJS dịch vụ, có thể làm cho hệ thống an toàn hơn. Họ chưa bắt đầu dịch vụ mặc dù.


2

Một cách khác để gửi email từ JavaScript, là sử dụng directtomx.com như sau;

 Email = {
 Send : function (to,from,subject,body,apikey)
    {
        if (apikey == undefined)
        {
            apikey = Email.apikey;
        }
        var nocache= Math.floor((Math.random() * 1000000) + 1);
        var strUrl = "http://directtomx.azurewebsites.net/mx.asmx/Send?";
        strUrl += "apikey=" + apikey;
        strUrl += "&from=" + from;
        strUrl += "&to=" + to;
        strUrl += "&subject=" + encodeURIComponent(subject);
        strUrl += "&body=" + encodeURIComponent(body);
        strUrl += "&cachebuster=" + nocache;
        Email.addScript(strUrl);
    },
    apikey : "",
    addScript : function(src){
            var s = document.createElement( 'link' );
            s.setAttribute( 'rel', 'stylesheet' );
            s.setAttribute( 'type', 'text/xml' );
            s.setAttribute( 'href', src);
            document.body.appendChild( s );
    }
};

Sau đó gọi nó từ trang của bạn như sau;

 window.onload = function(){
    Email.apikey = "-- Your api key ---";
    Email.Send("to@domain.com","from@domain.com","Sent","Worked!");
 }

Chỉ cần thêm vào điều này, một cách khác, giả sử bạn có quyền truy cập vào máy chủ SMTP là sử dụng tập lệnh này tại smtpjs.com/smtp.js , được gọi như sau; Email.send ("from@you.com", "to@them.com", "Chủ đề", "Cơ thể.", "Smtp.yourisp.com", "tên người dùng", "mật khẩu"); - Xem smtpjs.com
Fiach Reid

1
bạn có thể gửi html bằng smtp.js không?
Corrjor Alejandro

@AlejandroCorredor - Có, bạn có thể gửi email HTML qua SMTPJS
Fiach Reid

2

Tôi sẽ làm điều đó với thư viện SMTPJs. Nó cung cấp mã hóa cho thông tin đăng nhập của bạn như tên người dùng, mật khẩu, v.v.


1
Tôi sẽ thực sự miễn cưỡng khi cung cấp mật khẩu SMTP của mình cho một công ty nhỏ bé để họ có thể gửi email bằng máy chủ của tôi để đổi lấy không có gì nhiều hơn mật khẩu của tôi. Tôi không trả tiền cho họ. Họ không có động lực mạnh mẽ để duy trì dịch vụ chạy / thực sự bảo vệ thông tin đăng nhập của tôi / không sử dụng máy chủ của tôi cho thư rác của họ.
Quentin

@Quentin tôi hiểu, nhưng thư viện này có thể là câu trả lời cho câu hỏi.
Suhail Mumtaz Awan

2

Không có câu trả lời thẳng cho câu hỏi của bạn vì chúng tôi không thể gửi email chỉ bằng javascript, nhưng có nhiều cách để sử dụng javascript để gửi email cho chúng tôi:

1) sử dụng api đến và gọi api qua javascript để gửi email cho chúng tôi, ví dụ https://www.emailjs.com nói rằng bạn có thể sử dụng mã dưới đây để gọi api của họ sau một số cài đặt:

var service_id = 'my_mandrill';
var template_id = 'feedback';
var template_params = {
name: 'John',
reply_email: 'john@doe.com',
message: 'This is awesome!'
};

emailjs.send(service_id,template_id,template_params);

2) tạo mã phụ trợ để gửi email cho bạn, bạn có thể sử dụng bất kỳ khung phụ trợ nào để làm điều đó cho bạn.

3) sử dụng một cái gì đó như:

window.open('mailto:me@http://stackoverflow.com/');

sẽ mở ứng dụng email của bạn, điều này có thể vào cửa sổ bật lên bị chặn trong trình duyệt của bạn.

Nói chung, gửi email là một nhiệm vụ máy chủ, vì vậy nên được thực hiện bằng ngôn ngữ phụ trợ, nhưng chúng ta có thể sử dụng javascript để thu thập dữ liệu cần thiết và gửi nó đến máy chủ hoặc api, chúng ta cũng có thể sử dụng ứng dụng chẵn lẻ thứ ba và mở chúng thông qua trình duyệt sử dụng javascript như đã đề cập ở trên.


5
Re (1): Tôi thực sự miễn cưỡng khi cung cấp mật khẩu SMTP của mình cho một công ty nhỏ bé để họ có thể gửi email bằng máy chủ của tôi để đổi lấy không có gì nhiều hơn mật khẩu của tôi. Tôi không trả tiền cho họ. Họ không có động lực mạnh mẽ để duy trì dịch vụ chạy / thực sự bảo vệ thông tin đăng nhập của tôi / không sử dụng máy chủ của tôi cho thư rác của họ.
Quentin

0

Câu trả lời ngắn gọn là bạn không thể làm điều đó bằng JavaScript một mình. Bạn sẽ cần một trình xử lý phía máy chủ để kết nối với máy chủ SMTP để thực sự gửi thư. Có nhiều tập lệnh thư đơn giản trực tuyến, chẳng hạn như tập lệnh này cho PHP:

Sử dụng Ajax để gửi yêu cầu tới tập lệnh PHP, kiểm tra xem trường bắt buộc không trống hoặc không chính xác bằng js cũng giữ một bản ghi thư được gửi bởi ai từ máy chủ của bạn.

function sendMail() is good for doing that.

Kiểm tra bất kỳ lỗi nào xảy ra trong khi gửi thư từ tập lệnh của bạn và thực hiện hành động thích hợp.
Ví dụ, để giải quyết nó nếu địa chỉ thư không chính xác hoặc thư không được gửi do sự cố máy chủ hoặc trong hàng đợi trong điều kiện như vậy, hãy báo cáo cho người dùng ngay lập tức và ngăn chặn nhiều lần gửi cùng một email. Nhận phản hồi từ tập lệnh của bạn bằng cách sử dụng jQuery GET và POST

$ .get (URL, gọi lại); $ .post (URL, gọi lại);


-1

Vì tất cả đều là những bản infos tuyệt vời, có một api nhỏ tên là Mandrill để gửi thư từ javascript và nó hoạt động hoàn hảo. Bạn có thể cho nó một shot. Đây là một hướng dẫn nhỏ cho sự khởi đầu.


-5

Gửi email bằng JavaScript hoặc jQuery

var ConvertedFileStream;
var g_recipient;
var g_subject;
var g_body;
var g_attachmentname;


function SendMailItem(p_recipient, p_subject, p_body, p_file, p_attachmentname, progressSymbol) {

    // Email address of the recipient 
    g_recipient = p_recipient;

   // Subject line of an email
    g_subject = p_subject;

   // Body description of an email
    g_body = p_body;

    // attachments of an email
    g_attachmentname = p_attachmentname;

    SendC360Email(g_recipient, g_subject, g_body, g_attachmentname);

}

function SendC360Email(g_recipient, g_subject, g_body, g_attachmentname) {
    var flag = confirm('Would you like continue with email');
    if (flag == true) {

        try {
            //p_file = g_attachmentname;
            //var FileExtension = p_file.substring(p_file.lastIndexOf(".") + 1);
           // FileExtension = FileExtension.toUpperCase();
            //alert(FileExtension);
            SendMailHere = true;

            //if (FileExtension != "PDF") {

            //    if (confirm('Convert to PDF?')) {
            //        SendMailHere = false;                    
            //    }

            //}
            if (SendMailHere) {
                var objO = new ActiveXObject('Outlook.Application');

                var objNS = objO.GetNameSpace('MAPI');

                var mItm = objO.CreateItem(0);

                if (g_recipient.length > 0) {
                    mItm.To = g_recipient;
                }

                mItm.Subject = g_subject;

                // if there is only one attachment                 
                // p_file = g_attachmentname;
                // mAts.add(p_file, 1, g_body.length + 1, g_attachmentname);

                // If there are multiple attachment files
                //Split the  files names
                var arrFileName = g_attachmentname.split(";");
                 // alert(g_attachmentname);
                //alert(arrFileName.length);
                var mAts = mItm.Attachments;

                for (var i = 0; i < arrFileName.length; i++)
                {
                    //alert(arrFileName[i]);
                    p_file = arrFileName[i];
                    if (p_file.length > 0)
                    {                     
                        //mAts.add(p_file, 1, g_body.length + 1, g_attachmentname);
                        mAts.add(p_file, i, g_body.length + 1, p_file);

                    }
                }

                mItm.Display();

                mItm.Body = g_body;

                mItm.GetInspector.WindowState = 2;

            }
            //hideProgressDiv();

        } catch (e) {
            //debugger;
            //hideProgressDiv();
            alert('Unable to send email.  Please check the following: \n' +
                    '1. Microsoft Outlook is installed.\n' +
                    '2. In IE the SharePoint Site is trusted.\n' +
                    '3. In IE the setting for Initialize and Script ActiveX controls not marked as safe is Enabled in the Trusted zone.');
        }
    }
  }

3
Xin hãy giải thích cách mã này trả lời câu hỏi.
JAL

Có vẻ như điều này đang sử dụng ActiveX và chỉ hoạt động trong IE trên PC có cài đặt Outlookvar objO = new ActiveXObject('Outlook.Application');
Chic
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.