2013-01-10 61 views
15

मैं पंजीकरण बटन के साथ एक 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> 

... और यहाँ मेरी जावास्क्रिप्ट कोड है:

<script type="text/javascript"> 
    function sendMail() { 
    var link = 'mailto:[email protected]?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> 

... तो ईमेल बिल्कुल नहीं भेजा जाता है। क्या मैं कुछ भूल रहा हूँ?

किसी भी मदद की सराहना की reeeally किया जाएगा :-)

+8

उपयोग कर सकते हैं आप केवल ऐसा कर सकते हैं सर्वर पर। – SLaks

+0

हाँ अपने सर्वर पर फॉर्म पोस्ट करें और सर्वर – mikakun

+0

द्वारा भेजे गए मेल को जो भी आप चाहते हैं उसे करने के लिए, आपको उस सर्वर में एक विधि कॉल करने की आवश्यकता है जो मेल जानकारी प्राप्त करता है और एक smtp सर्वर पर निर्भर करता है, इसलिए इसे सर्वर से भेजें । उस मेलto का उपयोग नहीं करेगा। – Alfabravo

उत्तर

13

आपको इसे प्राप्त करने के लिए सर्वर-साइड समर्थन की आवश्यकता है। असल में आपका फॉर्म पोस्ट किया जाना चाहिए (AJAX भी ठीक है) सर्वर पर और सर्वर को कुछ मेल प्रदाता को SMTP के माध्यम से कनेक्ट करना चाहिए और उस ई-मेल को भेजना चाहिए।

भले ही जावास्क्रिप्ट का उपयोग करके सीधे ई-मेल भेजना संभव हो (जो कि कंप्यूटर कंप्यूटर से है), उपयोगकर्ता को अभी भी कुछ एसएमटीपी सर्वर (जैसे gmail.com) से कनेक्ट करना होगा, एसएमटीपी प्रमाण-पत्र आदि प्रदान करना होगा। आमतौर पर सर्वर-साइड (आपके आवेदन में) पर संभाला जाता है, जो इन प्रमाण-पत्रों को जानता है।

+0

यह सही होगा क्योंकि सर्वर-साइड मेल सर्वर भी होस्ट करता है। ऐसा कहकर, विचार जावास्क्रिप्ट का उपयोग कर अनुरोध पोस्ट करना होगा और उसके बाद सर्वर पक्ष पर एक स्क्रिप्ट होगी जो वास्तव में स्थानीय मेल सर्वर के साथ ईमेल भेजती है। मैं वेब पर एक उदाहरण की तलाश करूंगा ... – j3d

14

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

आपको सर्वर साइड प्रक्रिया (आपकी पसंद की भाषा में लिखे गए) को HTTP अनुरोध करने की आवश्यकता है जो आपके सर्वर से मेल भेजता है।

3

आप केवल ग्राहक के पक्ष स्क्रिप्ट के साथ ऐसा नहीं कर सकते हैं ... आप कुछ सर्वर साइड कोड के लिए एक AJAX कॉल कि एक ईमेल भेजेगा कर सकता है ...

1

वहाँ बैकएंड ढांचे के कुछ प्रकार की जरूरत है ईमेल भेजने के लिए। यह PHP/ASP.NET, या स्थानीय मेल क्लाइंट के माध्यम से किया जा सकता है। यदि आप उपयोगकर्ता को कुछ भी नहीं देखना चाहते हैं, तो सबसे अच्छा तरीका है कि AJAX कॉल द्वारा अलग प्रेषण फ़ाइल को अलग-अलग भेजें।

0

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

+2

चूंकि php सर्वर पर चलता है, php का उपयोग कर सर्वर पर ऐसा करने से काफी _better_ नहीं है! – jahroy

+1

PHP के पास सीधे उपयोगकर्ता के सिस्टम से ईमेल भेजने का कोई तरीका नहीं है। ईमेल सर्वर से भेजा जाएगा। इसके बारे में * विशेष * कुछ भी नहीं है, किसी भी प्रोग्रामिंग भाषा का उपयोग किया जा सकता है। PHP का प्राथमिक लाभ यह है कि यह सबसे सस्ते होस्टिंग पर उपलब्ध है। – Quentin

6

ग्राहक


Send an email using only JavaScript

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': '[email protected]', 
      'to': [ 
       { 
       'email': '[email protected]', 
       '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

नोट: ध्यान रखें कि आपकी एपीआई कुंजी किसी के लिए दृश्यमान है, इसलिए कोई भी दुर्भावनापूर्ण उपयोगकर्ता आपके कोटा को खाने वाले ईमेल भेजने के लिए आपकी कुंजी का उपयोग कर सकता है।


अप्रत्यक्ष आपका सर्वर के माध्यम से - सुरक्षित


ऊपर जोखिम पर काबू पाने के लिए, आपको सत्र आधारित प्रमाणीकरण के बाद ईमेल भेजने के लिए अपने सर्वर को संशोधित कर सकते हैं।

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: '[email protected]in.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 अपना ईमेल एपीआई कॉल करने के लिए।