জাভাস্ক্রিপ্ট সহ ইমেল প্রেরণ করা হচ্ছে


107

এটি ব্যাখ্যা করতে কিছুটা বিভ্রান্তিকর, তাই এখানে আমার সাথে সহ্য করুন ...

আমি এমন একটি সিস্টেম স্থাপন করতে চাই যেখানে কোনও ব্যবহারকারী আমার ওয়েবসাইটের মাধ্যমে টেম্পলেটড ইমেলগুলি প্রেরণ করতে পারে, এটি কেবলমাত্র আমার সার্ভার ব্যবহার করে প্রেরণ করা হয়নি - পরিবর্তে এটি প্রস্তুত ইমেল সহ তাদের নিজস্ব স্থানীয় মেইল ​​ক্লায়েন্টকে খুলবে। ব্যবহারকারীর এটিকে টাইপ করতে বাঁচাতে অ্যাপ্লিকেশনটি পূর্বনির্ধারিত ভেরিয়েবলগুলির সাথে ইমেলের মূল অংশটি পূরণ করবে। তারপরে তারা বার্তাটি পছন্দসই হিসাবে সম্পাদনা করতে পারে, এটি যদি তাদের উদ্দেশ্যগুলির সাথে যথাযথ না হয়।

ব্যবহারকারীর স্থানীয় মেল ক্লায়েন্টের মধ্য দিয়ে যেতে চান এমন অনেকগুলি কারণ রয়েছে, সুতরাং ইমেলটি প্রেরণ করার জন্য সার্ভার পাওয়া কোনও বিকল্প নয়: এটি 100% ক্লায়েন্ট-সাইড হতে হবে।

আমার ইতিমধ্যে বেশিরভাগ কার্যক্ষম সমাধান চলছে, এবং আমি এর উত্তর হিসাবে উত্তরটি পোস্ট করব, আমি ভাবছি যে এর চেয়ে ভাল উপায় আছে কিনা?


উত্তর:


137

আমি এখন যেভাবে এটি করছি তা মূলত:

এইচটিএমএল:

<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=" + encodeURIComponent("This is my subject")
             + "&body=" + encodeURIComponent(document.getElementById('myText').value)
    ;
    
    window.location.href = link;
}

এটি, আশ্চর্যজনকভাবে, বরং ভাল কাজ করে। একমাত্র সমস্যাটি হ'ল যদি শরীরটি বিশেষত লম্বা হয় (কোথাও 2000 টিরও বেশি অক্ষর) তবে এটি কেবল একটি নতুন ইমেল খুলবে তবে এতে কোনও তথ্য নেই। আমার সন্দেহ হয় যে ইউআরএল সর্বোচ্চ দৈর্ঘ্য ছাড়িয়ে যাওয়ার সাথে এটি করা উচিত।


1
এটি যখন জাভাস্ক্রিপ্ট ব্যবহার না করে কেবল একই বিষয়বস্তুতে href বৈশিষ্ট্য সেট করতে পারেন এটি করার এটি একটি দুর্দান্ত চক্রাকার উপায়।
রায়ান দোহার্টি

1
আপনি যদি ইমেলটিতে টেক্সারিয়ার সামগ্রীগুলি অন্তর্ভুক্ত করতে চান তবে চক্রাকার নয়। স্প্যাম কাটার থেকে আপনার ইমেলটি আড়াল করার জন্য একটি ভাল পদ্ধতি।
গর্ডন বেল

1
@ গর্ডন- এটি ধারণা করা হয়েছে যে ইমেল হারভেস্টার ইনলাইন জাভাস্ক্রিপ্টটিকে রিজেক্স করে না বা <স্ক্রিপ্ট src = ""> অনুসরণ করে
lex

6
পালাতে অগ্রাধিকারে এনকোডিউআরআইকিউম্পোন্ট ব্যবহার করুন যা ইউআরএল-এনকোডিং থেকে আলাদা যথেচ্ছ নিয়ম অনুসরণ করে। যদিও ইউনিকোডের অক্ষরগুলি এখনও ব্যর্থ হওয়ার সম্ভাবনা রয়েছে ... তবে তারপরে পুরো জিনিসটি যাইহোক ব্যর্থ হওয়ার সম্ভাবনা খুব বেশি। পরামিতিগুলির সাথে মেলটো লিঙ্কগুলি অতি অবিশ্বাস্য এবং এগুলি সত্যই ব্যবহার করা উচিত নয়।
বোবিনস

5
বোবিন্স: হ্যাঁ আমি বুঝতে পেরেছি যে এটি করার একটি অদ্ভুত উপায়, তবে বিকল্পটি কী?
নিক

17

এখানে ক্লিক করার জন্য jQuery এবং একটি "উপাদান" ব্যবহার করে এটি করার উপায় এখানে রয়েছে:

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

তারপর, আপনি (ইনপুট ক্ষেত্র থেকে এটা খাওয়ানোর অর্থাত। ব্যবহার করে হয় আপনার বিষয়বস্তু পেতে পারেন $('#input1').val()বা সঙ্গে একটি সার্ভার প্রান্তের স্ক্রিপ্ট দ্বারা $.get('...')। আপনি উপভোগ করুন


এটি এখনও ইউআরএল আকারের সীমাবদ্ধতার বিষয়, যেমনটি ওপি উল্লেখ করেছে mentioned
সানকাট 2000

10

আপনার কোনও জাভাস্ক্রিপ্টের দরকার নেই, আপনার কোড্রেড করার জন্য আপনার href প্রয়োজন:

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

আমি অনুমান করি যে আসল কোডটি ঠিকানাগুলিতে গতিশীলভাবে পূর্ণ filled
tvanfosson

@ ট্যাভানফসন যদি অ্যাঙ্কর উপাদানটি ক্লিক করার সময় পৃষ্ঠায় ইমেল ঠিকানাগুলি জানা থাকে তবে আপনি অ্যাঙ্করগুলিকে একটি আইডি দেওয়ার চেষ্টা করতে পারেন এবং hrefঠিকানাগুলি নির্বাচন করার সময় এর মান নির্ধারণ করতে পারেন। ক্লিকটি হওয়ার সময় যদি কোনও পোস্টের ইমেল ঠিকানা পেতে প্রয়োজন হয়, সম্ভবত এটি কাজ করবে না।
মেকটিউ

5

পাঠ্যবক্সে লাইভ বৈধতা পাওয়ার বিষয়ে কী হবে এবং একবার এটি 2000 এরও বেশি হয়ে যায় (বা সর্বাধিক প্রান্তিক যা কিছু হোক) তারপরে প্রদর্শন করুন 'ব্রাউজারে এই ইমেলটি সম্পূর্ণ হতে দীর্ঘ নয়, দয়া করে <span class="launchEmailClientLink">launch what you have in your email client</span>'

যা আমি চাই

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

এবং এটি আপনার অন ডোমআরডিতে jQuery

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

5

আপনি এই নিখরচায় পরিষেবাটি ব্যবহার করতে পারেন: 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"
);

2
এটির সাহায্যে আপনি আপনার এসএমটিপি সার্ভারের ডেটা প্রকাশ করেন, নোড বা পিএইচপি দিয়ে সার্ভারের পক্ষে এটি করা ভাল, সমানভাবে ধন্যবাদ
jcarlosweb

আপনি কি এখানে "একটি এসএমটিপি সার্ভার সেটআপ" বোতামটি চেষ্টা করেছেন? উত্তরে ভাগ করা লিঙ্কে এটি পেতে পারেন।
jmojico

2

এটি যদি কেবল ইমেলটি প্রেরণের জন্য ব্যবহারকারীর ক্লায়েন্টকে খোলার জন্য চলে যায় তবে তাদের কেন এটি সেখানে রচনা করতে দেওয়া হবে না। তারা কী পাঠাচ্ছে তা ট্র্যাক করার ক্ষমতা আপনি হারাতে পারেন তবে এটি যদি গুরুত্বপূর্ণ না হয় তবে কেবল ঠিকানাগুলি এবং বিষয়গুলি সংগ্রহ করুন এবং ক্লায়েন্টকে পপ আপ করুন যাতে ব্যবহারকারীকে শরীরে পূরণ করতে পারে।


1
ধারণাটি ছিল যে আমার অ্যাপ্লিকেশনটি তাদের জন্য শরীরটি পূর্ণ করে। আরও পরিষ্কার করার জন্য আমি প্রশ্নটি সম্পাদনা করব ...
নিকফ

1
আপনি যখন ইমেলটি প্রেরণের জন্য কেবল একটি খুলতে যাচ্ছেন তখন কেন ইমেল ক্লায়েন্ট লিখবেন?
tvanfosson

এটি কোনও ইমেল ক্লায়েন্ট নয়, এটি কেবলমাত্র আমার ওয়েবসাইটটিতে একটি পৃষ্ঠা যা একটি ইমেল বার্তা প্রিফিল করে।
নিকফ

2

খুব ধারণা নিয়ে সমস্যাটি হ'ল ব্যবহারকারীর একটি ইমেল ক্লায়েন্ট থাকতে হবে, যা যদি তিনি ওয়েবমেলগুলিতে নির্ভর করেন তবে তা নয়, এটি অনেক ব্যবহারকারীর ক্ষেত্রে case (আমি যখন এক ডজন বছর আগে বিষয়টি তদন্ত করেছি তখন কমপক্ষে এই ওয়েবমেইলে পুনর্নির্দেশের কোনও পালা হয়নি)।

এজন্যই সাধারণ সমাধানটি হল ইমেল প্রেরণের জন্য (সার্ভার-সাইড, তারপরে) পিএইচপি মেল () এর উপর নির্ভর করা।

তবে যদি আজকাল "ইমেল ক্লায়েন্ট" সর্বদা সেট থাকে, স্বয়ংক্রিয়ভাবে, সম্ভাব্যভাবে একটি ওয়েবমেল ক্লায়েন্টের কাছে, আমি জেনে খুশি হব।


> "তবে যদি আজকাল" ইমেল ক্লায়েন্ট "সর্বদা সেট করা থাকে, স্বয়ংক্রিয়ভাবে, সম্ভাব্যভাবে কোনও ওয়েবমেল ক্লায়েন্টের কাছে, আমি জেনে খুশি হব" " ... এটি আধুনিক ব্রাউজারগুলি দ্বারা সমর্থিত, যেমন: সমর্থন.
google.com/a/users/answer/9308783?hl=en

1

ম্যান্ডরিলাপডটকমকে অনুরোধ পাঠান :

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

কেন পেতে এবং পোস্ট করা হয় না? যদি বার্তাটি যথেষ্ট বড় হয় তবে এটি কোনও পর্যায়ে কেটে যাবে।
অ্যালেক্সি শেভিলভ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.