जावास्क्रिप्ट से एक ईमेल कैसे भेजें


244

मैं चाहता हूं कि मेरी वेबसाइट में पेज को रिफ्रेश किए बिना ईमेल भेजने की क्षमता हो। इसलिए मैं जावास्क्रिप्ट का उपयोग करना चाहता हूं।

<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" />

यहां बताया गया है कि मैं फ़ंक्शन को कैसे कॉल करना चाहता हूं, लेकिन मुझे यकीन नहीं है कि जावास्क्रिप्ट फ़ंक्शन में क्या डाला जाए। मैंने जो शोध किया है उससे मुझे एक उदाहरण मिला है जो मेल्टो विधि का उपयोग करता है, लेकिन मेरी समझ यह है कि वास्तव में साइट से सीधे नहीं भेजा जाता है।

इसलिए मेरा सवाल यह है कि मैं वेबसाइट से सीधे ईमेल भेजने के लिए जावास्क्रिप्ट फंक्शन के अंदर क्या डाल सकता हूं।

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

7
वास्तव में ईमेल भेजने के लिए सर्वर साइड लैंग्वेज का उपयोग करें, और AJAX का लुक और आपकी इच्छा को महसूस करने के लिए।
शैडो विजार्ड ईयर फॉर यू

1
यह थोड़ी देर हो सकती है, लेकिन इससे आपको मदद मिल सकती है: stackoverflow.com/questions/271171/…
पैट्रिकमेलिया

2
जीमेल उपयोगकर्ता इसके पास हो सकते हैं, डेवलपर्स को
http://www.gmail/api

जैसा कि नीचे बताया गया है, आप ईमेलजेएस पर भी एक नज़र डाल सकते हैं , जो सीधे जावास्क्रिप्ट से पूर्व-निर्मित टेम्पलेट्स का उपयोग करके ईमेल भेजने की अनुमति देता है, और गतिशील मापदंडों, संलग्नक, कैप्चा, रीस्ट एपीआई और बहुत कुछ का समर्थन भी करता है। हम भी शुरू करने के लिए एक निशुल्क स्तरीय पेशकश करते हैं [प्रकटीकरण - मैं रचनाकारों में से एक हूं]
साशा

ध्यान दें यदि आप स्वीकृत उत्तर का उपयोग करते हैं, तो ईमेल उपयोगकर्ता के खाते से आएगा। अपने व्यक्तिगत या व्यावसायिक खाते से एक ईमेल भेजने के लिए, सही तरीका यह है कि आप अपने स्वयं के सर्वर या बायटलाइन जैसी तृतीय-पक्ष सेवा के माध्यम से ईमेल भेजने के लिए जावास्क्रिप्ट का उपयोग करें । इस उत्तर में अधिक जानकारी नीचे दी गई है।
dsbajna

जवाबों:


311

आप सीधे जावास्क्रिप्ट के साथ एक ईमेल नहीं भेज सकते हैं।

हालाँकि, आप उपयोगकर्ता के मेल क्लाइंट खोल सकते हैं:

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

विषय और निकाय को भरने के लिए कुछ पैरामीटर भी हैं:

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

एक अन्य उपाय यह होगा कि आप अपने सर्वर पर एक अजाक्स कॉल करें, ताकि सर्वर ईमेल भेज दे। अपने सर्वर के माध्यम से किसी को भी ईमेल भेजने की अनुमति न दें, सावधान रहें।


3
यदि प्रोग्राम जो पेज को खोलता है, उसके पास पहले से ही ई-मेल क्लाइंट सुविधाएँ हैं .. (जैसे ओपेरा 12.50) तो, यह एक नियमित URL के रूप में लिंक को खोलता है। उनका थंडरबर्ड भी है जिसमें फ़ायरफ़ॉक्स जेको इंजन है: यह नए टैब के रूप में ई-मेल में हाइपरलिंक्स से वेब पेज खोल सकता है।
2022 को user2284570

11
बस एक नोट, आप भी ईमेल क्लाइंट को खोलने के लिए window.location.href(जैसे इस उत्तर में: stackoverflow.com/questions/271171/… ) का उपयोग कर सकते हैं और यह उस खाली विंडो को पीछे नहीं छोड़ता जब उपयोगकर्ता ईमेल के साथ समाप्त हो गया हो।
इग्नायूसर

1
क्या हैं subjectऔर bodyचर हैं या वे वास्तविक पाठ हैं जो खेतों में होंगे?
एडवर्ड करक

3
वह जवाब वास्तव में सवाल का जवाब नहीं देता है, लेकिन @ रुलरॉय का जवाब अच्छा है
मेडेट टिलुकएबुल

3
मैं एक कदम आगे जाऊंगा और window.open( String( 'mailto:recipient^example.com' ).replace('^', '@') );स्पैम बॉट्स को भ्रमित करने के लिए करूंगा
पावेल लेबेडेफ

94

अपने सर्वर के माध्यम से अप्रत्यक्ष - 3 पार्टी एपीआई कॉलिंग - सुरक्षित और अनुशंसित


आपका सर्वर उचित प्रमाणीकरण और प्राधिकरण के बाद 3rd पार्टी एपीआई को कॉल कर सकता है। API कुंजी क्लाइंट के संपर्क में नहीं हैं।

नोड.जेएस - 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 का उपयोग करें।


क्लाइंट से सीधे - 3 पार्टी एपीआई को कॉल करना - पुन: शामिल नहीं किया गया


केवल जावास्क्रिप्ट का उपयोग करके एक ईमेल भेजें

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 कुंजी किसी को भी दिखाई देती है, इसलिए कोई भी दुर्भावनापूर्ण उपयोगकर्ता आपकी कुंजी का उपयोग ईमेल भेजने के लिए कर सकता है जो आपका कोटा खा सकता है।


8
भले ही लेख यह कहता है कि मुझे ऐसा लगता है कि यह यहाँ भी कहा जाना चाहिए कि भले ही यह काम करेगा, लेकिन कुछ सुरक्षा मुद्दे भी हैं क्योंकि आपको अपनी एपी कुंजी को क्लाइंट को भेजने की आवश्यकता है। इसका दुरुपयोग हो सकता है।
कैंटुचिथिस

35

मुझे ऐसा कोई उत्तर नहीं मिला जो वास्तव में मूल प्रश्न को संतुष्ट करता हो।

  • नई मूल्य निर्धारण नीति के कारण मैनड्रिल वांछनीय नहीं है, इसके अलावा अगर आपको अपने क्रेडेंशियल्स को सुरक्षित रखना है तो बैकएंड सेवा की आवश्यकता है।
  • यह अक्सर आपके ईमेल को छिपाने के लिए बेहतर होता है ताकि आप किसी सूची में समाप्त न हों (मेल्टो समाधान इस समस्या को उजागर करता है, और अपने उपयोगकर्ताओं के लिए सुविधाजनक नहीं है)।
  • यह केवल एक ईमेल भेजने के लिए sendMail सेट करने या बैकएंड की आवश्यकता के लिए एक परेशानी है।

मैंने एक सरल मुफ्त सेवा को एक साथ रखा है जो आपको एक ईमेल भेजने के लिए मानक HTTP POST अनुरोध करने की अनुमति देता है। इसे पोस्टमेल कहा जाता है , और आप बस एक फॉर्म पोस्ट कर सकते हैं, जावास्क्रिप्ट या jQuery का उपयोग कर सकते हैं। जब आप साइन अप करते हैं, तो यह आपको कोड प्रदान करता है जिसे आप अपनी वेबसाइट में कॉपी और पेस्ट कर सकते हैं। यहाँ कुछ उदाहरण हैं:

जावास्क्रिप्ट:

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

फिर से, पूर्ण प्रकटीकरण में, मैंने यह सेवा बनाई क्योंकि मुझे उपयुक्त उत्तर नहीं मिला।


मैं इस समाधान की तलाश कर रहा था, उत्तर के लिए धन्यवाद, लेकिन मुझे आश्चर्य है कि मैं HTML फॉर्म में एक और टेक्स्ट बॉक्स कैसे जोड़ सकता हूं, क्योंकि जब भी मैं किसी अन्य जानकारी के लिए एक और टेक्स्ट बॉक्स को जोड़ने के लिए कोड को बदलने की कोशिश कर रहा हूं, तो कोड बंद हो गया काम कर रहे। क्या आप इसके लिए कोई उपाय जानते हैं।
सुमन

जीमेल उपयोगकर्ता वास्तव में वह काम कर सकते हैं जो आप चाहते हैं - डेवलपर्स देखें।
URLgmail/api

1
यह सबसे अच्छा उपाय है। आपका बहुत बहुत धन्यवाद। प्रकार का बंदर कोई नि: शुल्क योजना अब और है और mailgun CORS और इस तरह जावास्क्रिप्ट का समर्थन नहीं करता
stallingOne

3
यह दूसरों के रूप में एक ही समस्या नहीं है? प्रवेश टोकन (एपीआई की) उजागर किया गया है
ग्रेग

1
उनके पास प्रतिदिन 25 ईमेल की सीमा है।
अर्चि

26

आप इस पोस्ट में जावास्क्रिप्ट फ़ंक्शन के अंदर क्या डाल सकते हैं।

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

ई-मेल भेजने के लिए अपनी खुद की PHP (या जो भी भाषा) स्क्रिप्ट प्रदान करें।


18

मैं आपको खबर तोड़ रहा हूं। आप प्रति से अधिक जावास्क्रिप्ट के साथ एक ईमेल भेज सकते हैं।


ओपी के प्रश्न के संदर्भ के आधार पर, ऊपर दिए गए मेरे उत्तर अभी भी सही नहीं हैं, जैसा कि टिप्पणियों में @ केनीईविट ने बताया है। ऐसा लगता है कि आप एक SMTP क्लाइंट के रूप में जावास्क्रिप्ट का उपयोग कर सकते हैं ।

हालांकि , मैंने यह पता लगाने के लिए गहराई से खुदाई नहीं की है कि क्या यह सुरक्षित और क्रॉस-ब्राउज़र संगत है। इसलिए, मैं आपको इसे इस्तेमाल करने के लिए न तो प्रोत्साहित कर सकता हूं और न ही हतोत्साहित कर सकता हूं। अपने जोखिम पार इस्तेमाल करें।


1
अजाक्स के साथ किया जा सकता है या यहां तक ​​कि छिपे हुए iframes के साथ ... आप कभी नहीं जान
ज़ेबरा

1
@danialentzri: जावास्क्रिप्ट कभी भी मेल रिले नहीं होगी, यही मेरा मतलब है "प्रति से"
Shef

उफ़! मेरे पास आपको सच बताने के लिए एक छोटा मॉनिटर है और यह स्क्रॉलबार का समर्थन नहीं करता है।
जेब्रा

@KennyEvitt एक त्वरित नज़र से, मुझे लगता है कि आपको अभी भी एक मेल रिले की आवश्यकता है। यह मूल रूप से मैंने अपने उत्तर में कहा है।
Shef

@ शेफ़ आपने अपनी त्वरित नज़र में क्या देखा? मैं किसी भी अन्य ईमेल क्लाइंट की आवश्यकता के अलावा किसी भी चीज के लिए आवश्यकता नहीं पा सकता हूं। या आप दावा कर रहे हैं कि, उदाहरण के लिए, Microsoft Outlook ईमेल नहीं भेज सकता है? यह थोड़े तकनीकी रूप से सच है लेकिन किसी भी मायने में ऐसा नहीं है कि मैं किसी और से समझने की उम्मीद करूंगा।
केनी एविट

16

मुझे पता है कि मैं इस प्रश्न का उत्तर लिखने में बहुत देर कर रहा हूं लेकिन फिर भी मुझे लगता है कि इसका उपयोग किसी ऐसे व्यक्ति के लिए किया जाएगा जो जावास्क्रिप्ट के माध्यम से ईमेल भेजने के बारे में सोच रहा है।

पहला तरीका जो मैं सुझाऊंगा वह सर्वर पर ऐसा करने के लिए कॉलबैक का उपयोग कर रहा है। यदि आप वास्तव में इसे जावास्क्रिप्ट फॉलिंग का उपयोग करके संभाला जाना चाहते हैं तो मैं सलाह देता हूं।

सबसे आसान तरीका मुझे smtpJs का उपयोग करना पड़ा। एक मुफ्त पुस्तकालय जिसका उपयोग ईमेल भेजने के लिए किया जा सकता है।

1. नीचे की तरह स्क्रिप्ट को हटा दें

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

2. आप या तो इस तरह एक ईमेल भेज सकते हैं

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

यह उचित नहीं है क्योंकि यह क्लाइंट पासवर्ड पर आपका पासवर्ड प्रदर्शित करेगा। यदि आप निम्नलिखित कार्य कर सकते हैं जो आपके SMTP क्रेडेंशियल्स को एन्क्रिप्ट करते हैं, और इसे एक ही डोमेन पर लॉक करते हैं, और क्रेडेंशियल्स के बजाय एक सुरक्षित टोकन पास करते हैं।

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

अंत में अगर आपके पास SMTP सर्वर नहीं है तो आप एक लोचदार रिले सेवा जैसे लोचदार ईमेल का उपयोग करते हैं

यहाँ भी आधिकारिक SmtpJS.com वेबसाइट का लिंक दिया गया है जहाँ आप अपनी ज़रूरत के सभी उदाहरण पा सकते हैं और वह स्थान जहाँ आप अपना सुरक्षित टोकन बना सकते हैं।

मुझे आशा है कि किसी को यह विवरण उपयोगी लगेगा। खुश कोडिंग।


3
यह अभी भी आपके SMTP सर्वर को किसी तीसरे पक्ष तक पूरी पहुँच प्रदान कर रहा है ताकि वे आपके बदले मेल भेज सकें ... क्या?
क्वेंटिन

SecureToken केवल एक डोमेन के लिए मान्य है जिसे आप इसे बनाते समय निर्दिष्ट करते हैं, इसलिए js को किसी अन्य डोमेन से कॉल करने से काम नहीं चलेगा।
smoore4

8

क्षितिज पर एक नया समाधान प्रतीत होता है। इसे EmailJS कहा जाता है । उनका दावा है कि किसी सर्वर कोड की जरूरत नहीं है। आप निमंत्रण का अनुरोध कर सकते हैं।

अगस्त 2016 को अपडेट करें: ईमेलजेएस पहले से ही लाइव लगता है। आप प्रति माह 200 ईमेल तक मुफ्त में भेज सकते हैं और यह उच्च संस्करणों के लिए सदस्यता प्रदान करता है।


यह एक चूतड़ स्टीयर का एक सा है, बहुत सुंदर यूआई लेकिन सभी दस्तावेज़ीकरण उदाहरण या मदद सामान। से बचें।
स्कार्सनिक

मैंने ईमेलजेएस की कोशिश की, लेकिन यह केवल मेरे ईमेल को भेजता है। मैं किसी अन्य ईमेल को कैसे भेज सकता हूं?
मस्त सईद

ईमेल टेम्प्लेट सेक्शन में यह देर से ही सही लेकिन @MagedSaeed है, टेम्प्लेट को एडिट करते समय आप "टू" ईमेल को निर्दिष्ट कर सकते हैं। तुम भी उनके अस्थायी विकल्प का उपयोग कर "करने के लिए" क्षेत्र गतिशील बना सकते हैं। उनके डॉक्स एक अच्छा काम करते हैं।
अबघ ० .०३

6

window.open ( 'mailto: test@example.com'); जैसा कि ऊपर से "test@example.com" ईमेल पते को छिपाने के लिए कुछ भी नहीं है। मैं लगातार इस समस्या में चला जाता था।

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

4

जावास्क्रिप्ट क्लाइंट-साइड है, आप जावास्क्रिप्ट के साथ ईमेल नहीं कर सकते। ब्राउज़र शायद केवल पहचानता है mailto:और आपके डिफ़ॉल्ट मेल क्लाइंट को शुरू करता है।


यह बताएगा कि मुझे इस पर कोई जानकारी क्यों नहीं मिली। धन्यवाद!!
user906357

एक ही बात ... फ्यूचर एपीआई जो एक पोर्ट के लिए कच्चे कनेक्शन की अनुमति दे सकता है ...
user2284570

यह सबसे सटीक उत्तर है! अन्य सभी उत्तर जो इसे संभव बनाते हैं, कहीं बैक-एंड का उपयोग कर रहे हैं .. ओपी ने जावास्क्रिप्ट को ही कहा। मतलब, नो बैक-एंड कृपया, भले ही यह SAAS बैक-एंड हो। बहुत बढ़िया जवाब।
दान चेस

4

अपने sendMail()फ़ंक्शन में, अपने बैकएंड में एक अजाक्स कॉल जोड़ें, जहां आप सर्वर साइड पर इसे लागू कर सकते हैं।


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>


यह ईमेल क्लाइंट का उपयोग कर रहा है, सीधे जावास्क्रिप्ट से भी नहीं।
वेइजिंग जे लिन लिन

2
संपूर्ण उदाहरण के लिए अच्छा होने के साथ-साथ, सीएसएस सिर्फ चीजों को भ्रमित करता है क्योंकि हर किसी को उदाहरण समझने के लिए फ़िल्टर करना पड़ता है। मेरा मतलब आपको दोष देना नहीं।
दान चेस

2

जावास्क्रिप्ट एक वेब ब्राउज़र से ईमेल नहीं भेज सकता है। हालाँकि, आपके द्वारा पहले से लागू किए गए समाधान से पीछे हटते हुए, आप कुछ ऐसा कर सकते हैं जो मूल आवश्यकता को पूरा करता है:

पेज को रिफ्रेश किए बिना ईमेल भेजें

आप उन मानों का निर्माण करने के लिए जावास्क्रिप्ट का उपयोग कर सकते हैं, जिनकी ईमेल को आवश्यकता होगी और फिर सर्वर संसाधन के लिए एक AJAX अनुरोध करें जो वास्तव में ईमेल भेजता है। (मुझे नहीं पता कि आप सर्वर-साइड भाषाओं / तकनीकों का उपयोग क्या कर रहे हैं, ताकि वह हिस्सा आपके ऊपर हो।)

यदि आप AJAX से परिचित नहीं हैं, तो त्वरित Google खोज आपको बहुत सारी जानकारी देगी। आम तौर पर आप इसे तैयार कर सकते हैं और jQuery के $ .ajax () फ़ंक्शन के साथ जल्दी से चल सकते हैं। आपको बस सर्वर पर एक पृष्ठ होना चाहिए जो अनुरोध में कहा जा सकता है।


2

ऐसा लगता है कि एक 'उत्तर' एक एसएमपीटी क्लाइंट को लागू करने के लिए है। SMTP क्लाइंट के साथ JavaScript लाइब्रेरी के लिए email.js देखें ।

यहाँ SMTP क्लाइंट के लिए GitHub रेपो है । रेपो की README के ​​आधार पर, यह प्रतीत होता है कि क्लाइंट ब्राउज़र के आधार पर विभिन्न शिम या पॉलीफ़िल की आवश्यकता हो सकती है, लेकिन कुल मिलाकर यह निश्चित रूप से व्यवहार्य लगता है (यदि वास्तव में महत्वपूर्ण रूप से पूरा नहीं किया गया है), तो थियो ऐसे तरीके से नहीं है जो आसानी से एक उचित रूप से विवरण योग्य हो। यहाँ लंबा जवाब।


2

एक संयोजन सेवा है। आप एक सर्विस ईमेलजेस के साथ मैनड्रिल जैसे उपरोक्त सूचीबद्ध समाधानों को जोड़ सकते हैं, जिससे सिस्टम अधिक सुरक्षित हो सकता है। उन्होंने हालांकि अभी तक सेवा शुरू नहीं की है।


2

जावास्क्रिप्ट से ईमेल भेजने का एक और तरीका है, इस प्रकार Directtomx.com का उपयोग करना है;

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

फिर इसे अपने पृष्ठ से निम्नानुसार कॉल करें;

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

बस इसे जोड़ने के लिए, एक वैकल्पिक तरीका, मान लें कि आपके पास एसएमटीपी सर्वर तक पहुंच है, इस स्क्रिप्ट को smtpjs.com/smtp.js पर उपयोग करना है , जिसे निम्नानुसार कहा जाता है; Email.send ("from@you.com", "to@them.com", "Subject", "Body।", "Smtp.yourisp.com", "username", "password"); - smtpjs.com देखें
फियाच रीड

1
क्या आप smtp.js का उपयोग करके html भेज सकते हैं?
एलेजांद्रो कोरिडोर

@AlejandroCorredor - हाँ, आप SMTPJS के माध्यम से HTML ईमेल भेज सकते हैं
फियाद रीड

2

मैं SMTPJs पुस्तकालय के साथ ऐसा करूँगा। यह आपके क्रेडेंशियल्स जैसे कि उपयोगकर्ता नाम, पासवर्ड आदि को एन्क्रिप्शन प्रदान करता है।


1
मैं अपने SMTP पासवर्ड को एक छोटी सी कंपनी को देने के लिए वास्तव में अनिच्छुक होगा ताकि वे मेरे पासवर्ड के अलावा मेरे सर्वर का उपयोग करके ईमेल भेज सकें। मैं उन्हें भुगतान नहीं कर रहा हूं। सेवा को चालू रखने / मेरी साख की रक्षा करने / उनके स्पैम के लिए मेरे सर्वर का उपयोग न करने के लिए उनके पास कोई मजबूत प्रेरणा नहीं है।
क्वेंटिन

@ क्वेंटिन मुझे समझ में आया, लेकिन यह पुस्तकालय प्रश्न का उत्तर हो सकता है।
सुहैल मुमताज़ अवन

2

आपके प्रश्न का सीधा उत्तर नहीं है क्योंकि हम केवल जावास्क्रिप्ट का उपयोग करके ईमेल नहीं भेज सकते हैं, लेकिन हमारे लिए ईमेल भेजने के लिए जावास्क्रिप्ट का उपयोग करने के तरीके हैं:

1) हमारे लिए ईमेल भेजने के लिए जावास्क्रिप्ट के माध्यम से एपीआई का उपयोग करना और कॉल करना, उदाहरण के लिए https://www.emailjs.com का कहना है कि आप कुछ सेटिंग के बाद उनके एप को कॉल करने के लिए नीचे ऐसे कोड का उपयोग कर सकते हैं:

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) आपके लिए एक ईमेल भेजने के लिए एक बैकएंड कोड बनाएं, आप इसे करने के लिए किसी भी बैकेंड फ्रेमवर्क का उपयोग कर सकते हैं।

3) कुछ का उपयोग कर की तरह:

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

जो आपके ईमेल एप्लिकेशन को खोल देगा, यह आपके ब्राउज़र में अवरुद्ध पॉपअप में आ सकता है।

सामान्य तौर पर, ईमेल भेजना एक सर्वर कार्य है, इसलिए इसे बैकएंड भाषाओं में किया जाना चाहिए, लेकिन हम जावास्क्रिप्ट का उपयोग उस डेटा को एकत्र करने के लिए कर सकते हैं, जिसकी आवश्यकता है और इसे सर्वर या एपीआई को भेज सकते हैं, साथ ही हम तीसरे पैरिटी एप्लिकेशन का उपयोग कर सकते हैं और उन्हें खोल सकते हैं ऊपर बताए अनुसार जावास्क्रिप्ट का उपयोग करने वाले ब्राउज़र के माध्यम से।


5
Re (1): मैं अपने SMTP पासवर्ड को एक छोटी सी कंपनी को देने के लिए वास्तव में अनिच्छुक होगा ताकि वे मेरे पासवर्ड के अतिरिक्त मेरे सर्वर का उपयोग करके ईमेल भेज सकें। मैं उन्हें भुगतान नहीं कर रहा हूं। सेवा को चालू रखने / मेरी साख की रक्षा करने / उनके स्पैम के लिए मेरे सर्वर का उपयोग न करने के लिए उनके पास कोई मजबूत प्रेरणा नहीं है।
क्वेंटिन

0

संक्षिप्त उत्तर यह है कि आप इसे केवल जावास्क्रिप्ट का उपयोग करके नहीं कर सकते। वास्तव में मेल भेजने के लिए आपको SMTP सर्वर से जुड़ने के लिए एक सर्वर-साइड हैंडलर की आवश्यकता होगी। ऑनलाइन कई सरल मेल स्क्रिप्ट हैं, जैसे कि PHP के लिए यह एक है:

PHP स्क्रिप्ट में रिक्वेस्ट भेजने के लिए अजाक्स का उपयोग करें , जाँच करें कि आवश्यक फ़ील्ड खाली नहीं है या गलत है js का उपयोग करके भी मेल भेजने का रिकॉर्ड अपने सर्वर से किसके द्वारा रखें।

function sendMail() is good for doing that.

अपनी स्क्रिप्ट से मेल करते समय पकड़ी गई किसी भी त्रुटि के लिए जाँच करें और उचित कार्रवाई करें।
उदाहरण के लिए इसे हल करने के लिए यदि मेल पता गलत है या सर्वर समस्या के कारण मेल नहीं भेजा गया है या यह ऐसी स्थिति में कतार में है, तो इसे तुरंत उपयोगकर्ता को रिपोर्ट करें और बार-बार बहु ​​ईमेल भेजने से रोकें। अपनी स्क्रिप्ट से प्रतिक्रिया प्राप्त करें jQuery GET और POST का उपयोग कर

$ .Get (यूआरएल, कॉलबैक); $ .Post (यूआरएल, कॉलबैक);


-1

चूँकि ये सभी अद्भुत infos हैं, एक छोटी सी api है जिसे मैनड्रिल कहा जाता है जो जावास्क्रिप्ट से मेल भेजती है और यह पूरी तरह से काम करती है। आप इसे एक शॉट दे सकते हैं। यहां शुरुआत के लिए थोड़ा ट्यूटोरियल है


-5

जावास्क्रिप्ट या 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
कृपया विस्तार से बताएं कि यह कोड प्रश्न का उत्तर कैसे देता है।
JAL

ऐसा लगता है कि यह ActiveX का उपयोग कर रहा है और केवल IE में पीसी पर काम करता है जिसमें आउटलुक स्थापित किया गया हैvar objO = new ActiveXObject('Outlook.Application');
ठाठ
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.