Як надіслати електронний лист від JavaScript


244

Я хочу, щоб мій веб-сайт мав можливість надсилати електронний лист, не оновлюючи сторінку. Тому я хочу використовувати 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" />

Ось як я хочу викликати функцію, але я не впевнений, що ввести у функцію javascript. З проведених нами досліджень я знайшов приклад, який використовує метод mailto, але я розумію, що насправді не надсилається безпосередньо з сайту.

Тому моє запитання - де я можу знайти те, що можна помістити у функцію JavaScript, щоб надіслати електронний лист безпосередньо з веб-сайту.

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

7
Використовуйте мову стороною сервера, щоб насправді надіслати повідомлення електронною поштою, а AJAX мати вигляд і відчуття, які ви хочете.
Shadow Wizard is Ear For You

1
Це може бути трохи пізно, але це може допомогти вам: stackoverflow.com/questions/271171 / ...
PatrickMelia

2
Користувачі Gmail можуть його мати, дивіться developers.google.com/gmail/api
Densi Tensy

Як було зазначено нижче, ви також можете поглянути на EmailJS , який дозволяє надсилати електронну пошту за допомогою попередньо вбудованих шаблонів безпосередньо з Javascript, а також підтримує динамічні параметри, вкладення, captcha, API REST та інше. Ми також пропонуємо безкоштовний рівень для початку роботи [розкриття інформації - я один із творців]
Саша

Зверніть увагу, якщо ви використовуєте прийняту відповідь, електронний лист надійде з облікового запису користувача. Щоб надіслати електронний лист із особистого або ділового акаунта, правильним способом є використання javascript для надсилання електронної пошти через власний сервер або сторонні сервіси, такі як Byteline . Детальніше у цій відповіді нижче.
dsbajna

Відповіді:


311

Ви не можете надсилати електронний лист безпосередньо за допомогою JavaScript.

Однак ви можете відкрити поштовий клієнт користувача:

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

Існують також деякі параметри для попереднього заповнення теми та тіла:

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

Іншим рішенням буде зробити дзвінок ajax на ваш сервер, щоб сервер надсилав електронне повідомлення. Будьте обережні, щоб не дозволяти кому-небудь надсилати будь-який лист через ваш сервер.


3
Якщо програма, яка відкриває сторінку, вже має функції клієнта електронної пошти .. (наприклад, Opera 12.50), вона відкриває посилання як звичайну URL-адресу. Їх також є Thunderbird, який має двигун gecko Firefox: він може відкривати веб-сторінки із гіперпосилань в електронній пошті як нові вкладки.
користувач2284570

11
Лише зауваження, ви також можете використовувати window.location.href(як у цій відповіді: stackoverflow.com/questions/271171/… ), щоб відкрити клієнт електронної пошти, і він не залишить порожнього вікна позаду, коли користувач закінчив електронну пошту.
igneosaur

1
Чи є subjectі bodyзмінними чи це власне текст, який буде в полях?
Едвард Карак

3
ця відповідь справді не відповідає на запитання, але відповідь @ rahulroy хороша
Медет Tleukabiluly

3
Я б пішов на крок далі і збивав window.open( String( 'mailto:recipient^example.com' ).replace('^', '@') );би з пантелику спам-ботів
Павло Лебедеф

94

Непряме через ваш сервер - виклик стороннього API - безпечний і рекомендований


Ваш сервер може зателефонувати до стороннього API після належної аутентифікації та авторизації. Ключі API не піддаються клієнту.

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

});

а потім використовуйте $ .ajax для клієнта, щоб викликати API електронної пошти.


Безпосередньо від клієнта - виклик стороннього API - не рекомендується


Надсилайте електронний лист, використовуючи лише 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': '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
незважаючи на те, що в статті йдеться про це, я відчуваю, що слід сказати і тут, що, хоча це і буде працювати, є деякі проблеми безпеки, оскільки вам потрібно надіслати свій ключ api і клієнту. цим можна було зловживати.
cantdutchthis

35

Я не зміг знайти відповідь, яка справді задовольнила б оригінальне запитання.

  • Mandrill не бажаний через нову політику ціноутворення, плюс для цього потрібна послуга резервного копіювання, якщо ви хочете зберегти свої дані.
  • Часто бажано приховувати свою електронну пошту, щоб ви не опинилися в жодному списку (рішення поштового зв’язку розкриває цю проблему і не зручно для більшості користувачів).
  • Налаштувати sendMail або взагалі вимагати бекенда просто надіслати електронний лист.

Я зібрав простий безкоштовний сервіс, який дозволяє вам зробити стандартний HTTP POST-запит, щоб надіслати електронний лист. Він називається PostMail , і ви можете просто розмістити форму, використовувати Javascript або jQuery. Коли ви реєструєтесь, він надає вам код, який ви можете скопіювати та вставити на свій веб-сайт. Ось кілька прикладів:

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>

Знову ж таки, під час повного розкриття інформації я створив цю послугу, оскільки не зміг знайти відповідну відповідь.


Я шукав це рішення, дякую за відповідь, але мені цікаво, як я можу додати ще одне текстове поле у ​​формі html, тому що коли я намагаюся змінити код, щоб додати ще одне текстове поле для іншої інформації, код зупинився робочий. Чи знаєте ви якесь рішення для цього.
Суман

Користувачі Gmail насправді можуть робити все, що завгодно - дивіться developers.google.com/gmail/api , тому, можливо, деякі інші постачальники електронної пошти мають свій Javascript API
Densi Tensy

1
Це найкраще рішення. Велике спасибі. У Mandrill більше немає вільного плану, а поштовий пістолет не підтримує корси, і тому JavaScript
stallingOne

3
Чи не має це така ж проблема, як інші? Доступний маркер доступу (API Key)
Грег Енніс

1
Вони мають щоденний ліміт 25 електронних листів на день.
Арчі

26

У цій публікації ви можете дізнатися, що потрібно помістити у функцію JavaScript.

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

Я повідомляю вам новину. Ви не можете надсилати електронний лист із JavaScript як такої.


Виходячи з контексту питання ОП, моя відповідь вище вже не відповідає дійсності, як вказував @KennyEvitt у коментарях. Схоже, ви можете використовувати JavaScript як клієнт SMTP .

Однак я не копав глибше, щоб дізнатися, чи достатньо сумісний він із безпечним та перехресним браузером. Отже, я не можу ні заохочувати, ні перешкоджати вам використовувати його. Використовуйте на свій страх і ризик.


1
можна зробити за допомогою аякса або навіть прихованих кадрів ... ніколи не знаєш
Зебра

1
@danialentzri: JavaScript ніколи не буде ретрансляцією пошти, саме так я мав на увазі під собою "per se" .
Шеф

ой! У мене невеликий монітор, щоб сказати вам правду, і він не підтримує смуги прокрутки.
Зебра

@KennyEvitt з швидкого погляду, який я взяв, здається, вам все одно потрібне поштове реле. Це в основному те, що я сказав у своїй відповіді.
Шеф

@Shef Що ти побачив у своєму швидкому погляді? Я не можу знайти вимогу до нічого, крім того, що вимагає будь-який інший клієнт електронної пошти. Або ти стверджуєш, що, наприклад, Microsoft Outlook також не може надсилати електронну пошту? Це ніби технічно правда, але не в якомусь сенсі, що я б очікував, що хтось інший зрозуміє.
Кенні Евітт

16

Я знаю, що я занадто пізно, щоб написати відповідь на це питання, але все-таки я думаю, що це буде корисно для тих, хто думає надсилати електронні листи через javascript.

Перший спосіб, який я б запропонував, - це використання зворотного дзвінка, щоб зробити це на сервері. Якщо ви дійсно хочете, щоб це оброблялося за допомогою перегляду javascript - це те, що я рекомендую.

Найпростіший спосіб, який я знайшов - це використання 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, ви використовуєте службу ретрансляції smtp, наприклад Elastic Email

Також тут знаходиться посилання на офіційний веб-сайт SmtpJS.com, де ви можете знайти весь необхідний вам приклад та місце, де ви можете створити захищений маркер.

Сподіваюсь, хтось знайде ці деталі корисними. Щасливе кодування.


3
Це все ще надає повний доступ до вашого SMTP-сервера третій стороні, щоб вони могли пересилати пошту для вас в обмін на ... що?
Квентін

SecureToken дійсний лише для домену, який ви вказуєте під час його створення, тому виклик js з іншого домену не буде працювати.
smoore4

8

Здається, на горизонті є нове рішення. Це називається EmailJS . Вони стверджують, що не потрібен код сервера. Ви можете надіслати запит на запрошення.

Оновлення серпня 2016 року. Здається, EmailJS вже доступний. Ви можете відправляти до 200 електронних листів на місяць безкоштовно, і він пропонує передплату на більші обсяги.


Це трохи кермо, дуже гарний інтерфейс, але наповнюйте усі приклади документації чи допомогу. Уникайте.
Скарсник

Я спробував emailJS, але він надсилається лише на мій електронний лист. Як я можу надіслати будь-який інший електронний лист?
Maged Saeed

Це пізно, але @MagedSaeed у розділі шаблонів електронної пошти, під час редагування шаблону ви можете вказати електронний лист "До". Ви навіть можете зробити поле «До» динамічним, використовуючи їх параметр шаблону. Їх документи роблять добру роботу, детально описуючи це.
abagh0703

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

Javascript - це клієнт, ви не можете надіслати електронною поштою Javascript. Браузер розпізнає, можливо, лише mailto:і запускає ваш поштовий клієнт за замовчуванням.


це пояснило б, чому я не зміг знайти інформацію про нього. Дякую!!
user906357

Те ж саме ... Майбутній API, який міг би дозволити
необмежене

Це найточніша відповідь! Усі інші відповіді, які роблять це можливим, десь використовують бек-енд. ОП сказав лише Javascript. Значення: Ніякого зворотного зв'язку, будь ласка, навіть якщо це SAAS бек-енд. Чудова відповідь.
Dan Chase

4

У своїй sendMail()функції додайте виклик ajax у свій бекенд, де ви можете реалізувати це на стороні сервера.


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>


Він використовує клієнт електронної пошти, не безпосередньо через javascript.
Векін Джей Лін

2
Крім того, хоча приємно мати повний приклад, CSS просто плутає речі, оскільки всі повинні відфільтрувати це, щоб зрозуміти приклад. Жодного образи не означало.
Ден Чейз

2

JavaScript не може надсилати електронну пошту з веб-браузера. Однак, відступивши від рішення, яке ви вже намагалися реалізувати, ви можете зробити щось, що відповідає початковій вимозі:

надіслати електронний лист, не оновлюючи сторінку

Ви можете використовувати JavaScript для побудови значень, необхідних для електронної пошти, а потім зробити запит AJAX на серверний ресурс, який фактично надсилає електронний лист. (Я не знаю, якими мовами / технологіями на стороні сервера ви користуєтесь, тому ця частина залежить від вас.)

Якщо ви не знайомі з AJAX, швидкий пошук в Google дасть вам багато інформації. Як правило, ви можете швидко і швидко працювати за допомогою функції $ .ajax () jQuery. Вам просто потрібно мати сторінку на сервері, яку можна викликати у запиті.


2

Схоже, одна «відповідь» на це полягає у впровадженні SMPT-клієнта. Дивіться email.js щодо бібліотеки JavaScript із клієнтом SMTP.

Ось репортаж GitHub для клієнта SMTP. Виходячи з README репо, видно, що залежно від веб-переглядача клієнта можуть знадобитися різні прокладки або поліфіли, але в цілому це, безумовно, здається здійсненним (якщо це фактично не досягнуто значною мірою). довга відповідь тут.


2

Є комбінований сервіс. Ви можете поєднати перераховані вище рішення, такі як мандриль, із сервісом EmailJS, що може зробити систему більш захищеною. Вони ще не розпочали послугу.


2

Ще один спосіб надсилання електронної пошти з JavaScript - це використання 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!");
 }

Просто додати до цього, альтернативним способом, припускаючи, що у вас є доступ до SMTP-сервера, є використання цього скрипту на smtpjs.com/smtp.js , який називається наступним чином; Email.send ("from@you.com", "to@them.com", "Subject", "Body.", "Smtp.yourisp.com", "ім'я користувача", "пароль"); - Дивіться smtpjs.com
Fiach Reid

1
чи можете ви надіслати HTML за допомогою smtp.js?
Алехандро Корредор

@AlejandroCorredor - Так, ви можете надсилати HTML-листи електронною поштою через SMTPJS
Fiach Reid

2

Я б зробив це з бібліотекою SMTPJs. Він пропонує шифрування ваших облікових даних, таких як ім'я користувача, пароль і т.д.


1
Я б дуже не хотів давати свій пароль SMTP маленькій маленькій компанії, щоб вони могли надсилати електронні листи за допомогою мого сервера в обмін ні на що, крім мого пароля. Я їм не плачу. У них немає сильної мотивації тримати роботу сервісу / дійсно захищати мої облікові дані / не використовувати мій сервер для їх спаму.
Квентін

@Quentin я зрозумів, але ця бібліотека могла б відповісти на питання.
Suhail Mumtaz Awan

2

Немає прямої відповіді на ваше запитання, оскільки ми не можемо надсилати електронну пошту лише за допомогою javascript, але є способи використання javascript для надсилання електронної пошти нам:

1) за допомогою api до та зателефонуйте до api через javascript, щоб надіслати нам електронне повідомлення, наприклад, https://www.emailjs.com говорить, що ви можете використовувати такий код нижче, щоб викликати їх api після деяких налаштувань:

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

що відкриє вашу електронну програму, це може потрапити в заблокований спливаючий вікно вашого браузера.

Взагалі, надіслати електронний лист - це завдання сервера, тому це повинно бути виконано на мовах бекенду, але ми можемо використовувати javascript для збору потрібних даних та надсилання їх на сервер чи api, також ми можемо використовувати додаток третіх паритетів та відкривати їх через браузер, використовуючи JavaScript, як згадувалося вище.


5
Re (1): Я б дуже не хотів давати свій пароль SMTP маленькій маленькій компанії, щоб вони могли надсилати електронні листи за допомогою мого сервера в обмін ні на що, крім мого пароля. Я їм не плачу. У них немає сильної мотивації тримати роботу сервісу / дійсно захищати мої облікові дані / не використовувати мій сервер для їх спаму.
Квентін

0

Коротка відповідь полягає в тому, що ви не можете зробити це лише за допомогою JavaScript. Вам потрібен обробник на стороні сервера для підключення до SMTP-сервера для фактичного надсилання пошти. В Інтернеті є багато простих скриптів пошти, таких як цей для PHP:

Використовуйте Ajax для надсилання запиту до сценарію PHP, переконайтеся, що потрібне поле не порожнє чи неправильне, використовуючи js, також зберігайте запис надсилань електронною поштою від вашого сервера.

function sendMail() is good for doing that.

Перевірте наявність помилок під час надсилання пошти зі свого сценарію та вживайте відповідних заходів.
Наприклад, щоб вирішити цю проблему, наприклад, якщо поштова адреса невірна або пошта не надсилається через проблему з сервером або вона стоїть у черзі в такому стані, повідомте про це користувачеві негайно та запобігайте багаторазовому надсиланню одного і того ж електронного листа знову і знову. Отримайте відповідь зі свого сценарію, використовуючи jQuery GET та POST

$ .get (URL, зворотний дзвінок); $ .post (URL, зворотний дзвінок);


-1

Оскільки це все чудово, є невелика api під назвою Mandrill для надсилання повідомлень з javascript, і вона працює чудово. Ви можете дати йому постріл. Ось невеликий підручник для початку.


-5

Надішліть електронний лист за допомогою JavaScript або 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 на ПК із встановленим Outlookvar objO = new ActiveXObject('Outlook.Application');
Chic
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.