JavaScript'ten e-posta gönderme


244

Web sitemin sayfayı yenilemeden bir e-posta gönderebilmesini istiyorum. Bu yüzden Javascript kullanmak istiyorum.

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

İşte nasıl işlev çağırmak istiyorum, ama javascript işlevine ne koymak emin değilim. Yaptığım araştırmadan mailto yöntemini kullanan bir örnek buldum, ama benim anlayışım aslında siteden doğrudan göndermiyor.

Bu yüzden sorum doğrudan web sitesinden bir e-posta göndermek için JavaScript işlevinin içine ne koyacağımı bulabilirim.

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

7
E-postayı gerçekten göndermek için sunucu tarafı dilini ve istediğiniz görünümü ve hissi elde etmek için AJAX'ı kullanın.
Gölge Sihirbazı Sizin İçin

1
Bu biraz geç olabilir, ancak bu size yardımcı olabilir: stackoverflow.com/questions/271171/…
PatrickMelia

2
Gmail kullanıcıları bunu yapabilir, bkz. Developers.google.com/gmail/api
Densi Tensy

Aşağıda belirtildiği gibi, doğrudan Javascript'ten önceden oluşturulmuş şablonları kullanarak e-posta göndermeye izin veren ve aynı zamanda dinamik parametreleri, ekleri, captcha, REST API'sini ve daha fazlasını destekleyen EmailJS'ye de göz atmak isteyebilirsiniz . Ayrıca başlamak için ücretsiz bir katman sunuyoruz [açıklama - Yaratıcılardan biriyim]
Sasha

Kabul edilen yanıtı kullanırsanız, e-posta kullanıcının hesabından gelecektir. Kişisel veya işletme hesabınızdan bir e-posta göndermek için doğru yol kendi sunucunuzdan veya Byteline gibi bir üçüncü taraf hizmeti aracılığıyla e-posta göndermek için javascript kullanmaktır . Aşağıda bu cevapta daha fazla ayrıntı bulabilirsiniz .
dsbajna

Yanıtlar:


311

Javascript ile doğrudan e-posta gönderemezsiniz.

Ancak, kullanıcının posta istemcisini açabilirsiniz:

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

Konuyu ve vücudu önceden doldurmak için bazı parametreler de vardır:

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

Başka bir çözüm, sunucunuzun e-posta göndermesi için sunucunuza ajax çağrısı yapmak olacaktır. Sunucunuz üzerinden kimsenin e-posta göndermemesine dikkat edin.


3
Sayfayı açan program zaten e-posta istemcisi özelliklerine sahipse (Opera 12.50 gibi), bağlantıyı normal bir URL olarak açar. Ayrıca firefox gecko motoruna sahip Thunderbird: e-postalardaki köprülerden web sayfalarını yeni sekmeler olarak açabilir.
user2284570

11
Sadece bir not, e-posta istemcisini açmak için de kullanabilirsiniz window.location.href(bu cevapta olduğu gibi: stackoverflow.com/questions/271171/… ) ve kullanıcı e-postayı bitirdiğinde bu boş pencereyi geride bırakmaz.
igneosaur

1
Değişkenler mi subject, bodydeğişkenler mi olacaklar yoksa bunlar gerçek metin mi olacak?
Edward Karak

3
bu cevap gerçekten soruyu cevaplamıyor, ama @ rahulroy'un cevabı iyi
Medet Tleukabiluly

3
Bir adım daha ileri gidip window.open( String( 'mailto:recipient^example.com' ).replace('^', '@') );spam botları karıştırmak için
yapardım

94

Sunucunuz aracılığıyla Dolaylı - 3. Taraf API'yı Arama - güvenli ve önerilen


Sunucunuz, uygun kimlik doğrulamasından ve yetkilendirmeden sonra 3. Taraf API'sını arayabilir. API Anahtarları istemciye maruz kalmaz.

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

});

ve sonra e-posta API'nızı aramak için istemcide $ .ajax kullanın.


Doğrudan İstemciden - 3. Taraf API'yı Aramak - önerilmez


Yalnızca JavaScript kullanarak e-posta gönderme

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

Bunun gibi -

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

Not: API anahtarınızın herkes tarafından görülebildiğini unutmayın, bu nedenle kötü amaçlı herhangi bir kullanıcı anahtarınızı kotanızı tüketebilecek e-postalar göndermek için kullanabilir.


8
Makale bu burada da söylenmelidir gibi hissediyorum bunu söylüyor olsa da, bu işe yarayacak olsa da, api anahtarı istemciye de göndermek için gereken bazı güvenlik sorunları vardır. bu istismar edilebilir.
14:51

35

Orijinal soruyu gerçekten tatmin eden bir cevap bulamadım.

  • Mandrill, yeni fiyatlandırma politikası nedeniyle arzu edilmiyor, ayrıca kimlik bilgilerinizi güvende tutmak istiyorsanız bir arka uç hizmeti gerektiriyordu.
  • E-postanızı gizlemek genellikle tercih edilir, böylece hiçbir listeye girmezsiniz (mailto çözümü bu sorunu ortaya çıkarır ve çoğu kullanıcı için uygun değildir).
  • SendMail'i kurmak veya sadece bir e-posta göndermek için arka uç gerektirmek zor.

Bir e-posta göndermek için standart bir HTTP POST isteği yapmanızı sağlayan basit bir ücretsiz hizmet bir araya getirdim. PostMail denir ve sadece bir form gönderebilir, Javascript veya jQuery kullanabilirsiniz. Kaydolduğunuzda, kopyalayıp web sitenize yapıştırabileceğiniz bir kod sağlar. İşte bazı örnekler:

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>

Yine, tam açıklamada, uygun bir cevap bulamadığım için bu hizmeti yarattım.


Bu çözümü arıyordum, cevap için teşekkürler ama html formunda bir metin kutusu daha nasıl ekleyebilirim diye merak ediyorum, çünkü ne zaman başka bir bilgi için bir metin kutusu daha eklemek için kodu değiştirmeye çalıştığımda, kod durdu Çalışma. Bunun için herhangi bir çözüm biliyor musunuz?
Suman

Gmail kullanıcıları aslında istediklerini yapabilirler - developers.google.com/gmail/api adresine bakın , bu nedenle diğer bazı e-posta satıcılarının Javascript API'sı vardır
Densi Tensy

1
Bu en iyi çözümdür. Çok teşekkür ederim. Mandrill artık hiç boş planı vardır ve Mailgun böylece Cors ve JavaScript desteklemiyor
stallingOne

3
Bunun diğerleri ile aynı sorunu yok mu? Erişim belirteci (API Anahtarı) açıkta
Greg Ennis

1
Günlük 25 e-posta sınırı vardır.
Archi

26

Bu yazıda JavaScript işlevinin içine ne koyacağınızı bulabilirsiniz.

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

E-postayı göndermek için kendi PHP (veya herhangi bir dil) komut dosyanızı sağlayın.


18

Size haberleri veriyorum. Kendi başına JavaScript kullanan bir e-posta gönderemezsiniz.


OP sorusunun bağlamına dayanarak, yukarıdaki cevabım @KennyEvitt'in yorumlarda belirttiği gibi artık doğru değil. Görünüşe göre JavaScript'i SMTP istemcisi olarak kullanabilirsiniz .

Ancak , yeterince güvenli ve çapraz tarayıcı uyumlu olup olmadığını öğrenmek için daha derine inmedim. Bu yüzden, onu kullanmanız için ne cesaretlendirebilir ne de cesaret edemezim. Kendi sorumluluğunuzdadır kullanın.


1
ajax veya hatta gizli iframe'lerle yapılabilir ... Asla bilemezsiniz
Zebra

1
@danialentzri: JavaScript asla posta geçişi olmayacak, "per se" ile kastediyorum .
Shef

ayy! Size gerçeği söyleyecek küçük bir monitörüm var ve kaydırma çubuklarını desteklemiyor.
Zebra

@KennyEvitt hızlı bir bakışta aldım, hala bir posta geçişine ihtiyacınız var gibi görünüyor. Temel olarak cevabımda söylediğim buydu.
Shef

@Shef Hızlı bakışınızda ne gördünüz? Başka herhangi bir e-posta istemcisinin gerektirdiğinden öte bir şey bulamıyorum. Yoksa Microsoft Outlook'un da e-posta gönderemediğini mi iddia ediyorsunuz? Bu teknik olarak doğrudur, ancak başka birinden anlamasını bekleyebileceğim hiçbir anlamda değil.
Kenny Evitt

16

Bu soruya cevap yazmak için çok geç olduğumu biliyorum ama yine de bunun javascript yoluyla e-posta göndermeyi düşünen herkes için kullanacağını düşünüyorum.

Bunu önermek için ilk yolu sunucuda bunu yapmak için bir geri arama kullanmaktır. Gerçekten javascript foeding kullanarak ele alınmasını istiyorsanız ne tavsiye olduğunu.

Bulduğum en kolay yol smtpJ kullanmaktı. E-posta göndermek için kullanılabilecek ücretsiz bir kütüphane.

1. betiği aşağıdaki gibi ekleyin

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

2. Bunun gibi bir e-posta gönderebilirsiniz

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

Bu, istemci tarafında şifrenizi görüntüleyeceği için önerilmez. Bu nedenle, SMTP kimlik bilgilerinizi şifreleyen ve tek bir etki alanına kilitleyen ve bunun yerine kimlik bilgileri yerine güvenli bir belirteç ileten aşağıdakileri yapabilirsiniz.

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

Son olarak bir SMTP sunucunuz yoksa, Elastik E-posta gibi bir smtp geçiş hizmeti kullanırsınız

Ayrıca, ihtiyacınız olan tüm örneği ve güvenli jetonunuzu oluşturabileceğiniz yeri bulabileceğiniz resmi SmtpJS.com web sitesine bağlantı .

Umarım birisi bu detayları faydalı bulur. Mutlu kodlama.


3
Bu, SMTP sunucunuza üçüncü bir tarafa tam erişim sağlıyor, böylece sizin için posta gönderebilirler… ne?
Quentin

SecureToken, yalnızca oluşturulduğunda belirttiğiniz bir etki alanı için geçerlidir, bu nedenle başka bir etki alanından js çağrısı çalışmaz.
smoore4

8

Ufukta yeni bir çözüm var gibi görünüyor. Adı EmailJS . Hiçbir sunucu kodunun gerekli olmadığını iddia ediyorlar. Davetiye isteyebilirsiniz.

Ağustos 2016'yı güncelleyin: EmailJS zaten yayında. Ayda 200 adede kadar ücretsiz e-posta gönderebilirsiniz ve daha yüksek hacimler için abonelikler sunar.


Bu biraz serseri yönlendirmek, çok güzel bir kullanıcı arayüzü ama tüm dokümantasyon örnekleri veya yardım şeyler. Önlemek.
Skarsnik

EmailJS'yi denedim, ancak yalnızca e-postama gönderiliyor. Başka bir e-postaya nasıl gönderebilirim?
Maged Saeed

Bu gecikti ancak e-posta şablonları bölümünde @MagedSaeed, bir şablonu düzenlerken "Kime" e-postasını belirtebilirsiniz. Şablon seçeneğini kullanarak "Alıcı" alanını dinamik hale getirebilirsiniz. Dokümanları ayrıntılı bir iş çıkarıyor.
abagh0703

6

window.open ( 'Posta: test@example.com'); yukarıdaki gibi "test@example.com" e-posta adresinin spambotlar tarafından toplanmasını önlemek için hiçbir şey yapmaz. Sürekli bu problemle karşılaşırdım.

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

4

Javascript istemci tarafındadır, Javascript ile e-posta gönderemezsiniz. Tarayıcı yalnızca belki tanır mailto:ve varsayılan posta istemcinizi başlatır.


bunun hakkında neden herhangi bir bilgi bulamadığımı açıklar. Teşekkür ederim!!
user906357

Aynı şey ... Bir limana ham bağlantıya izin verebilecek gelecekteki API geliyor ...
user2284570

Bu en doğru cevap! Kulağa mümkün kılan diğer tüm cevaplar bir yerde bir arka uç kullanıyor .. OP sadece Javascript dedi. Anlamı, SAAS arka ucu olsa bile, arka uç yok lütfen. Mükemmel cevap.
Dan Chase

4

Senin içinde sendMail()işlev sunucu tarafında bu uygulayabileceğinden arka uç, için bir ajax arama ekleyin.


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>


Doğrudan javascript'ten değil, e-posta istemcisi kullanıyor.
Weijing Jay Lin

2
Ayrıca tam bir örneğe sahip olmak güzel olsa da, herkesin örneği anlamak için bunu filtrelemesi gerektiğinden, CSS işleri karıştırır. Hiçbir suçun anlamı yoktu.
Dan Chase

2

JavaScript bir web tarayıcısından e-posta gönderemez. Ancak, zaten uygulamaya çalıştığınız çözümden geri adım atmak için orijinal gereksinimi karşılayan bir şey yapabilirsiniz:

sayfayı yenilemeden bir e-posta gönder

E-postaya ihtiyaç duyacağınız değerleri oluşturmak için JavaScript'i kullanabilir ve ardından e-postayı gerçekten gönderen bir sunucu kaynağına AJAX isteği yapabilirsiniz. (Hangi sunucu tarafı dillerini / teknolojilerini kullandığınızı bilmiyorum, bu yüzden bu bölüm size kalmış.)

AJAX'ı bilmiyorsanız, hızlı bir Google araması size birçok bilgi verecektir. Genellikle jQuery'nin $ .ajax () işleviyle hızlı bir şekilde çalışmaya başlayabilirsiniz. Sunucuda istekte çağrılabilecek bir sayfanız olması yeterlidir.


2

Buna bir 'cevap' bir SMPT istemcisi uygulamak gibi görünüyor. Bkz. Email.jsSMTP istemcisine sahip bir JavaScript kitaplığı için .

İşte SMTP istemcisi için GitHub repo . Reponun README'sine dayanarak, müşteri tarayıcısına bağlı olarak çeşitli şimler veya çoklu dolgular gerekebilir, ancak genel olarak makul bir şekilde bile kolayca açıklanabilecek bir şekilde değil, kesinlikle uygulanabilir görünmektedir ( burada uzun cevap.


2

Bir kombinasyon hizmeti var. Mandrill gibi yukarıda listelenen çözümleri, sistemi daha güvenli hale getirebilecek bir servis EmailJS ile birleştirebilirsiniz. Hizmete henüz başlamadılar.


2

JavaScript'ten e-posta göndermenin başka bir yolu, directtomx.com'u aşağıdaki gibi kullanmaktır ;

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

Ardından sayfanızdan şu şekilde arayın;

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

Buna ek olarak, bir SMTP sunucusuna erişiminiz olduğunu varsayarak alternatif bir yol, şu komut dosyasını smtpjs.com/smtp.js adresinde kullanmaktır ; Email.send ("from@you.com", "to@them.com", "Konu", "Gövde", "smtp.yourisp.com", "kullanıcı adı", "şifre"); - Bakınız smtpjs.com
Fiach Reid

1
smtp.js kullanarak html gönderebilir misiniz?
Alejandro Corredor

@AlejandroCorredor - Evet, SMTPJS aracılığıyla HTML e-postaları gönderebilirsiniz
Fiach Reid

2

Bunu SMTPJs kütüphanesi ile yapardım . Kullanıcı adı, şifre gibi kimlik bilgilerinize şifreleme sunar.


1
Küçük bir şirkete SMTP şifremi vermek konusunda gerçekten isteksiz olurum, bu yüzden sunucumu kullanarak şifremi başka bir şey karşılığında e-posta gönderebilirler. Onlara para ödemiyorum. Hizmeti çalışır durumda tutmak / kimlik bilgilerimi gerçekten korumak / sunucumu spam için kullanmamak için güçlü bir motivasyonları yoktur.
Quentin

@Quentin anladım, ancak bu kütüphane soruya cevap olabilir.
Suhail Mumtaz Awan

2

Yalnızca javascript kullanarak e-posta gönderemediğimiz için sorunuza doğrudan bir cevap yoktur, ancak bizim için e-posta göndermek için javascript kullanmanın yolları vardır:

1) bize bir e-posta göndermek için bir api kullanmak ve api'yi javascript yoluyla aramak, örneğin https://www.emailjs.com , bazı ayarlardan sonra api'lerini aramak için aşağıdaki böyle bir kodu kullanabileceğinizi söylüyor:

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) sizin için bir e-posta göndermek için bir arka uç kodu oluşturun, sizin için bunu yapmak için herhangi bir arka uç çerçevesi kullanabilirsiniz.

3) aşağıdaki gibi bir şey kullanmak:

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

e-posta uygulamanızı açar, bu tarayıcınızda engellenen açılır pencereye girebilir.

Genel olarak, bir e-posta göndermek bir sunucu görevidir, bu nedenle arka uç dillerinde yapılmalıdır, ancak gerekli verileri toplamak ve sunucuya veya api'ye göndermek için javascript kullanabiliriz, ayrıca üçüncü taraflar uygulamasını kullanabilir ve açabiliriz. yukarıda belirtildiği gibi javascript kullanarak tarayıcı üzerinden.


5
Re (1): SMTP şifremi küçük bir şirkete vermek için gerçekten isteksiz olurum, böylece benim şifremi kullanarak hiçbir şey karşılığında sunucumu kullanarak e-posta gönderebilirler. Onlara para ödemiyorum. Hizmeti çalışır durumda tutmak / kimlik bilgilerimi gerçekten korumak / sunucumu spam için kullanmamak için güçlü bir motivasyonları yoktur.
Quentin

0

Kısa cevap, sadece JavaScript kullanarak yapamamanızdır. Postayı gerçekten göndermek için SMTP sunucusuna bağlanmak için bir sunucu tarafı işleyicisine ihtiyacınız vardır. PHP için bu gibi birçok basit posta komut dosyası vardır:

PHP komut dosyasına istek göndermek için Ajax'ı kullanın , js kullanarak gerekli alanın boş veya yanlış olup olmadığını kontrol edin, ayrıca sunucunuzdan kim tarafından gönderilen postaların kaydını tutun.

function sendMail() is good for doing that.

Komut dosyanızdan posta gönderirken yakalanan hataları kontrol edin ve uygun işlemi yapın.
Çözmek için, örneğin posta adresi yanlışsa veya sunucu sorunu nedeniyle posta gönderilmiyorsa veya bu durumda kuyruğa giriyorsa, derhal kullanıcıya bildirin ve aynı e-postayı tekrar tekrar göndermesini engelleyin. Komut dosyanızdan yanıt alın jQuery GET ve POST kullanma

$ .Get (URL, geri arama); $ .Post (URL, geri arama);


-1

Bunların hepsi harika bilgiler olduğundan , javascript'ten posta göndermek için Mandrill adında küçük bir api var ve mükemmel çalışıyor. Bir şans verebilirsiniz. İşte başlangıç ​​için küçük bir öğretici .


-5

JavaScript veya jQuery kullanarak e-posta gönderme

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
Lütfen bu kodun soruya nasıl cevap verdiğini açıklayın.
JAL

Bu ActiveX kullanıyor gibi görünüyor ve sadece Outlook yüklü bir bilgisayarda IE'de çalışıyorvar objO = new ActiveXObject('Outlook.Application');
Chic
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.