سؤال

هذا أمر مربك بعض الشيء في الشرح، لذا تحملوني هنا...

أريد إعداد نظام حيث يمكن للمستخدم إرسال رسائل بريد إلكتروني نموذجية عبر موقع الويب الخاص بي، باستثناء أنه لا يتم إرسالها فعليًا باستخدام الخادم الخاص بي - بل يفتح فقط عميل البريد المحلي الخاص به ببريد إلكتروني جاهز للاستخدام.سيقوم التطبيق بملء نص البريد الإلكتروني بمتغيرات محددة مسبقًا، حتى لا يضطر المستخدم إلى كتابته بنفسه.ويمكنهم بعد ذلك تعديل الرسالة حسب الرغبة، إذا لم تناسب أغراضهم تمامًا.

هناك عدد من الأسباب التي تجعلني أريد أن يتم إرسالها عبر عميل البريد المحلي الخاص بالمستخدم، لذا فإن الحصول على الخادم لإرسال البريد الإلكتروني ليس خيارًا:يجب أن يكون 100٪ من جانب العميل.

لدي بالفعل حل يعمل في الغالب، وسأقوم بنشر تفاصيل ذلك كإجابة، وأتساءل عما إذا كان هناك أي طريقة أفضل؟

هل كانت مفيدة؟

المحلول

والطريقة أنا أفعل ذلك الآن هي في الأساس من هذا القبيل:

ووHTML:

<textarea id="myText">
    Lorem ipsum...
</textarea>
<button onclick="sendMail(); return false">Send</button>

ووجافا سكريبت:

function sendMail() {
    var link = "mailto:me@example.com"
             + "?cc=myCCaddress@example.com"
             + "&subject=" + escape("This is my subject")
             + "&body=" + escape(document.getElementById('myText').value)
    ;

    window.location.href = link;
}

وهذا مما يثير الدهشة، يعمل بشكل جيد إلى حد ما. المشكلة الوحيدة هي أنه إذا كان الجسد هو طويل ولا سيما (في مكان ما على الأحرف 2000)، بعد ذلك فقط يفتح البريد الإلكتروني الجديد ولكن ليس هناك معلومات في ذلك. وأظن أنه سوف يكون على علاقة مع الحد الأقصى لطول URL يتم تجاوزها.

نصائح أخرى

إليك طريقة القيام بذلك باستخدام مسج و "عنصرا" إلى الضغط على:

$('#element').click(function(){
    $(location).attr('href', 'mailto:?subject='
                             + encodeURIComponent("This is my subject")
                             + "&body=" 
                             + encodeURIComponent("This is my body")
    );
});

وبعد ذلك، يمكنك الحصول على المحتويات الخاصة بك إما عن طريق تغذيته من حقول الإدخال (أي باستخدام $('#input1').val() أو عن طريق برنامج نصي من جانب الخادم مع $.get('...'). المتعة

وأنت لا تحتاج إلى أي جافا سكريبت، كل ما تحتاجه هو أ href الخاص بك أن تكون مشفرة مثل هذا:

<a href="mailto:me@me.com">email me here!</a>

وماذا عن وجود التحقق من صحة الحية على النص، وبمجرد أن يذهب أكثر من 2000 (أو أيا كان الحد الأقصى للعتبة هو) ثم عرض "هذا البريد الإلكتروني هو وقتا طويلا ليكتمل في المتصفح، يرجى <span class="launchEmailClientLink">launch what you have in your email client</span> '

لوالتي كنت قد

.launchEmailClientLink {
cursor: pointer;
color: #00F;
}

وومسج ذلك في onDomReady بك

$('.launchEmailClientLink').bind('click',sendMail);

يمكنك استخدام هذه الخدمة المجانية: https://www.smtpjs.com

  1. تضمين البرنامج النصي:

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

  1. إرسال بريد إلكتروني باستخدام:

    Email.send("from@you.com", "to@them.com", "This is a subject", "this is the body", "smtp.yourisp.com", "username", "password");

إذا هذا هو مجرد الذهاب لفتح عميل المستخدم لإرسال البريد الإلكتروني، لماذا لا نسمح لهم تشكلها هناك أيضا. تفقد القدرة على تتبع ما ترسل، ولكن اذا كان هذا ليس مهما، بعد ذلك فقط جمع عناوين والموضوع، ويطفو على السطح العميل للسماح للمستخدم ملء في الجسم.

والمشكلة مع فكرة هي أن المستخدم لا بد أن يكون عميل البريد الإلكتروني، والذي ليس هو الحال إذا كان الاعتماد على webmails، كما هو الحال بالنسبة للعديد من المستخدمين. (على الأقل لم يكن هناك تحولا لإعادة توجيه إلى هذا البريد الالكتروني عندما كنت التحقيق في القضية قبل اثني عشر عاما).

وهذا هو السبب في حل العادي هو الاعتماد على البريد فب () لإرسال رسائل البريد الإلكتروني (من جانب الخادم، ثم).

ولكن إذا تم تعيين هذه الأيام "عميل البريد الإلكتروني" دائما، تلقائيا، وربما إلى عميل البريد الالكتروني، وسوف نكون سعداء لمعرفة.

وإرسال طلب إلى mandrillapp.com :

var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
    if (xhttp.readyState == 4 && xhttp.status == 200) {
        console.log(xhttp.responseText);
    }
}
xhttp.open('GET', 'https://mandrillapp.com/api/1.0/messages/send.json?message[from_email]=mail@7995.by&message[to][0][email]=zdanevich.vitaly@yaa.ru&message[subject]=Заявка%20с%207995.by&message[html]=xxxxxx&key=oxddROOvCpKCp6InvVDqiGw', true);
xhttp.send();
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top