खींचें और छोड़ें
उपयोगकर्ता कैनवास पर ब्लॉक को स्थानांतरित करके लेआउट बनाते हैं, जिस क्रम में वे उन्हें चाहते हैं।
अपने उपयोगकर्ताओं को उत्तरदायी ईमेल टेम्पलेट बनाने का एक दृश्य तरीका दें - पुनः प्रयोज्य ब्लॉक, MJML, कस्टम घटक और उत्पादन-तैयार HTML निर्यात, सभी आपके अपने उत्पाद के अंदर।
वह लूप जिसमें आपके उपयोगकर्ता रहते हैं
26k+
GitHub सितारे
100+
GJS.Market पर प्लगइन्स
10 years
सक्रिय विकास
BSD-3-Clause
कोर लाइसेंस
शेल्फ से एक टेम्पलेट खोलें, इसे बदलें, फिर इसे एक नए के रूप में सहेजें। शेल्फ एक से बढ़ता है। वह लूप - व्यक्तिगत डिज़ाइन नहीं - वह है जो एक ईमेल टेम्पलेट बिल्डर आपके उपयोगकर्ताओं को देता है।
टेम्पलेट लाइब्रेरी
एक ब्लॉक जोड़ें
आपका लोगो
जहाज पर आपका स्वागत है, {{ user.first_name }}
यहां बताया गया है कि अपना पहला प्रोजेक्ट कैसे चलाएं।
अपना डैशबोर्ड खोलें
सदस्यता समाप्त करें · प्राथमिकताएं प्रबंधित करें
मर्ज टैग अछूते रहते हैं — आपका रेंडरर उन्हें भेजने के समय प्रति प्राप्तकर्ता हल करता है.
ऊपर दिया गया डेमो लूप का एक मॉडल है। यह GrapesJS ही है, आधिकारिक MJML प्रीसेट चला रहा है - केवल तभी लोड होता है जब आप इसके लिए पूछते हैं, इसलिए तब तक इस पृष्ठ पर कुछ भी खर्च नहीं होता है।
एक नए टैब में खोलेंMJML संपादक डेमो GrapesJS प्रोजेक्ट द्वारा ही प्रकाशित किया गया है। एक अनुभाग जोड़ें, प्रतिलिपि संपादित करें, फिर जेनरेट किए गए मार्कअप को देखें।
डेमो की अपनी साइट से iframe में लोड होता है।
GJS.Market पर
MJML संपादक एक उत्पाद के रूप में उपलब्ध है
एक ईमेल टेम्पलेट बिल्डर लोगों को हस्तलेखन HTML ईमेल मार्कअप के बजाय ईमेल लेआउट बनाने और बदलने देता है। एक टेम्पलेट * लाइब्रेरी * तैयार डिजाइनों को शिप करता है; एक टेम्पलेट * बिल्डर * उन्हें बनाने की क्षमता को शिप करता है - और आपके द्वारा शिप किए जाने के बाद उन्हें बनाते रहने के लिए।
HTML लिखें
तालिकाएँ, इनलाइन शैलियाँ, सशर्त टिप्पणियाँ
ग्राहकों के बीच परीक्षण करें
लिखते समय आप परिणाम नहीं देख सकते
इसे मार्केटिंग के लिए सौंप दें
एक फ़ाइल के रूप में, या एक उपकरण में चिपकाया गया
हर बदलाव आपके पास वापस आता है
एक डेवलपर टिकट प्रति ट्वीक
एक टेम्पलेट, एक मालिक, एक अड़चन।
एक प्रारंभिक बिंदु खोलें
शेल्फ से, या रिक्त
विज़ुअल रूप से संपादित करें
परिणाम पूरे समय स्क्रीन पर रहता है
इसे टेम्पलेट के रूप में सहेजें
एक पंक्ति जो आपके ग्राहक के पास है
इसका पुनः उपयोग और संस्करण करें
कोई टिकट नहीं, कोई डेवलपर नहीं
कई टेम्पलेट, जो उन्हें भेजने वाले लोगों के स्वामित्व में हैं।
टेम्प्लेट आपके उपयोगकर्ताओं को एक प्रारंभिक बिंदु देते हैं। एक बिल्डर उन्हें नियंत्रण देता है।
एक पुस्तकालय एक छत के साथ एक शेल्फ है: यह कवर करता है कि इसे कवर करने के लिए क्या बनाया गया था, और उस लाइन के ऊपर के अनुरोधों में कहीं नहीं जाना है। एक बिल्डर एक लूप है - और शेल्फ हर बार बढ़ता है जब कोई इसके चारों ओर जाता है।
"हमें शुक्रवार तक एक स्वच्छ स्वागत ईमेल की आवश्यकता है।
टेम्पलेट लाइब्रेरी
हल किया। यह वही है जो एक अच्छी लाइब्रेरी के लिए है - एक चुनें, शब्दों को बदलें, भेजें।
टेम्पलेट बिल्डर
उसी शुरुआती बिंदुओं से भी हल किया गया। एक बिल्डर इसके अंदर एक पुस्तकालय के साथ जहाज करता है।
"प्रत्येक किरायेदार को अपने स्वयं के कानूनी पाद लेख की आवश्यकता होती है।
टेम्पलेट लाइब्रेरी
एक साझा पाद लेख, या प्रति किरायेदार प्रत्येक टेम्पलेट का एक कांटा।
टेम्पलेट बिल्डर
एक पाद लेख ब्लॉक, प्रति किरायेदार एक बार सहेजा गया और उनके टेम्पलेट्स में पुनः उपयोग किया गया।
"ग्राहक के वास्तविक ऑर्डर को रसीद में रखें।
टेम्पलेट लाइब्रेरी
स्टेटिक प्लेसहोल्डर टेक्स्ट। डेटा को डाउनस्ट्रीम में विभाजित किया जाना है।
टेम्पलेट बिल्डर
आपके ऑर्डर मॉडल से बंधा एक घटक, एक ब्लॉक के रूप में संपादन योग्य और भेजने के समय हल किया गया।
"पिछले मंगलवार को हमारे द्वारा भेजे गए संस्करण को पुनर्स्थापित करें।
टेम्पलेट लाइब्रेरी
जो कुछ भी फ़ाइल के साथ अधिलेखित किया गया था वह आपके पास है।
टेम्पलेट बिल्डर
एक संस्करण पंक्ति। पुनर्स्थापित करना एक क्वेरी है, पुरातत्व परियोजना नहीं।
"हमारे ग्राहकों को हमें ईमेल किए बिना अपना खुद का निर्माण करने दें।
टेम्पलेट लाइब्रेरी
वह नहीं जो एक पुस्तकालय करता है - इसकी कोई संलेखन सतह नहीं है।
टेम्पलेट बिल्डर
पूरी बात। आपके उपयोगकर्ता ऐसे टेम्पलेट बनाते और रखते हैं जिन्हें आप कभी नहीं देखते हैं।
पुस्तकालय भेजें। फिर उस चीज़ को शिप करें जो उनमें से अधिक बनाती है।
आपके उपयोगकर्ताओं को मिलने वाली संपादन सतह और उसके कुछ हिस्सों को आप नियंत्रित करते हैं।
उपयोगकर्ता कैनवास पर ब्लॉक को स्थानांतरित करके लेआउट बनाते हैं, जिस क्रम में वे उन्हें चाहते हैं।
पाठ, छवियों और लिंक को पूरे समय स्क्रीन पर प्रदान किए गए परिणाम के साथ संपादित किया जाता है।
आपके उपयोगकर्ता एक बार सहेजते हैं और बाद में किसी भी टेम्पलेट में छोड़ देते हैं।
पूर्वावलोकन और समायोजन पर लेआउट चौड़ाई है कि ईमेल के लिए मायने रखता है, जबकि संपादन.
mjml के खिलाफ लेखक जहां आप चाहते हैं कि आप हाथ से बनाए रखने के बजाय आपके लिए उत्तरदायी मार्कअप उत्पन्न करें।
वह ईमेल HTML तैयार करें जिसकी आपका डिलीवरी वर्कफ़्लो पहले से ही अपेक्षा करता है।
छवियों को एक टेम्पलेट संदर्भ में प्रबंधित करें, जो भी स्टोर आप पहले से उपयोग करते हैं।
संपादन योग्य घटक जोड़ें जो आपके स्वयं के उत्पाद के डेटा और वर्कफ़्लो को प्रतिबिंबित करते हैं।
एक पूर्ण इतिहास स्टैक, इसलिए किसी और के टेम्पलेट के साथ प्रयोग करना सुरक्षित है।
उपयोगकर्ताओं को इकट्ठा करने के लिए अनुभागों की एक लाइब्रेरी दें, बजाय इसके कि वे हर ईमेल को एक खाली कैनवास से शुरू करें। प्रत्येक एक ब्लॉक परिभाषा है जिसे आप एक बार पंजीकृत करते हैं।
लोगो, प्रीहेडर टेक्स्ट और नेविगेशन पंक्ति, यदि आप एक का उपयोग करते हैं।
प्रारंभिक वक्तव्य और कार्रवाई के लिए पहला कॉल।
वस्तुओं की एक पंक्ति या ग्रिड, आपके कैटलॉग से बंधा हुआ है जहां आप इसे लाइव चाहते हैं।
रिलीज़ नोट्स और ऑनबोर्डिंग के लिए लघु आइकन-और-टेक्स्ट पंक्तियाँ।
एक टेबल-आधारित रेंडरर से बचने के लिए योजना तुलना की गई है।
एक उद्धरण, एक एट्रिब्यूशन और एक वैकल्पिक अवतार।
एक बुलेटप्रूफ बटन जो पृष्ठभूमि छवियों के बिना प्रस्तुत करता है।
पता, प्राथमिकताएं लिंक और सदस्यता समाप्त करने वाला लिंक जिसे आपको कानूनी रूप से शामिल करना आवश्यक है।
मानक ब्लॉक लेआउट को कवर करते हैं। जो चीज बिल्डर को अपना बनाती है, वह है वे घटक जो आपके डेटा के बारे में जानते हैं - एक ऑर्डर, एक सदस्यता, एक बुकिंग, एक सिफारिश।
स्टैंडर्ड
आदिम हर ईमेल की जरूरत होती है। वे संपादक के साथ आते हैं।
संयत
आपके मानक ब्लॉक, एक बार इकट्ठे हुए और पुनः उपयोग के लिए पंजीकृत।
और रूप
Components traits के साथ आपके उपयोगकर्ता टैग सेट और मर्ज करते हैं जो आपका रेंडरर प्रति प्राप्तकर्ता हल करता है।
टेम्पलेट लिखे जाने के दौरान संपादक एक प्लेसहोल्डर प्रस्तुत करता है। आपका बैकएंड भेजने के समय वास्तविक मानों में स्वैप करता है।
// A component bound to your own model. The editor renders a placeholder; your
// backend swaps in the real order at send time, per recipient.
editor.DomComponents.addType('order-summary', {
model: {
defaults: {
droppable: false,
// Traits are the fields the person editing the template can set.
traits: [
{ name: 'orderId', label: 'Order', type: 'text' },
{ name: 'showTax', label: 'Show tax line', type: 'checkbox' },
],
// Merge tags survive export untouched and are resolved by your renderer.
components: '<mj-text>{{ order.total }}</mj-text>',
},
},
});एक टेम्पलेट सिस्टम में, टेम्पलेट इस बात से भिन्न होते हैं कि उनका मालिक कौन है और कौन उन्हें बदल सकता है - न केवल वे जो कहते हैं। ये पहले दिन से मॉडलिंग के लायक कक्षाएं हैं।
स्वामित्व वर्ग
ये एक टेम्पलेट सिस्टम में स्वामित्व वर्ग हैं, बिक्री के लिए उत्पाद नहीं। GJS.Market संपादक प्लगइन्स और प्रीसेट सूचीबद्ध करता है; यह ईमेल टेम्पलेट नहीं बेचता है।
चौड़ाई ईमेल वास्तव में प्रस्तुत करता है, जबकि आप अभी भी इसे संपादित कर रहे हैं, पर लेआउट का पूर्वावलोकन करें। 600px बॉडी कॉलम के लिए लंबे समय से चली आ रही परंपरा है - एक सम्मेलन, विनिर्देश नहीं।
उपयोगकर्ता प्रति चौड़ाई क्या बदल सकते हैं
एक डेस्कटॉप क्लाइंट पर दो कॉलम, एक फोन पर स्टैक्ड - टेम्पलेट में तय किया जाता है, न कि प्राप्तकर्ता के ग्राहक के अनुमान से।
ईमेल क्लाइंट HTML और CSS को अलग-अलग तरीके से लागू करते हैं, और हमेशा करते हैं। एक विज़ुअल बिल्डर इसे नहीं हटाता है - यह संलेखन चरण को मानकीकृत करता है ताकि हर बार एक ही ज्ञात-अच्छा मार्कअप सामने आए।
| ग्राहक | यह अलग तरीके से क्या करता है | बिल्डर इसके बारे में क्या करता है |
|---|---|---|
| Gmail | स्ट्रिप्स <style> कुछ संदर्भों में ब्लॉक करता है, जिसमें गैर-Gmail खातों वाले Gmail मोबाइल ऐप भी शामिल हैं। | यात्रा में जीवित रहने वाली स्टाइलशीट पर भरोसा करने के बजाय इनलाइन की गई शैलियों का उत्सर्जन करें। |
| Outlook (विंडोज़) | Word इंजन के साथ रेंडर करता है: कोई flexbox, कोई ग्रिड नहीं, और किसी तालिका कक्ष पर सीमा-त्रिज्या ड्रॉप किया जाता है। | CSS लेआउट के बजाय टेबल-आधारित लेआउट और बुलेटप्रूफ बटन उत्पन्न करें। |
| Apple Mail | चार में से सबसे अधिक मानक-पूर्ण; इसके अलावा एक लेआउट को उजागर करने की सबसे अधिक संभावना है जो केवल कहीं और दुर्घटना से काम करता है। | संपादन करते समय प्रत्येक चौड़ाई पर पूर्वावलोकन करें, इसलिए लेआउट आकस्मिक के बजाय जानबूझकर किया गया है। |
| Yahoo Mail | मीडिया प्रश्नों के साथ ऐतिहासिक रूप से असंगत; वर्तमान व्यवहार Not publicly documented है। | ऐसे लेआउट को प्राथमिकता दें जो मीडिया क्वेरी के बिना एकल पठनीय कॉलम में डिग्रेड हों। |
2026-08-28 पर सत्यापित बाधाएं। व्यवहार में परिवर्तन; वर्तमान स्थिति के लिए caniemail.com की जाँच करें, और उन ग्राहकों के विरुद्ध उत्पादन ईमेल का परीक्षण करें जिनका आपके अपने दर्शक वास्तव में उपयोग करते हैं।
mjml उत्तरदायी ईमेल मार्कअप को कुछ ऐसा बनाने के लिए मौजूद है जिसे आप हाथ से बनाए रखने के बजाय उत्पन्न करते हैं। GrapesJS को इसके ऊपर एक दृश्य संपादन सतह डालने के लिए grapesjs-mjml के साथ बढ़ाया जा सकता है।
MJML पुल अनुरोध में समीक्षा करने के लिए पर्याप्त कॉम्पैक्ट है, जो कच्चा ईमेल HTML नहीं है।
कंपाइलर टेबल मचान और मीडिया प्रश्नों का उत्सर्जन करता है, इसलिए कोई भी उन्हें हाथ से नहीं लिखता है।
MJML को प्रोजेक्ट JSON के साथ रखें, ताकि एक टेम्पलेट स्रोत के रूप में संपादन योग्य रहे।
वह प्रश्न जो यह तय करता है कि आपके पास बिल्डर है या दर्शक: उपयोगकर्ता द्वारा सहेजें पर क्लिक करने के बाद कौन सी पंक्तियाँ मौजूद हैं? तीन तालिकाएँ इसे कवर करती हैं.
templates
प्रति टेम्पलेट एक पंक्ति, एक किरायेदार के लिए स्कोप।
template_versions
केवल जोड़ें। पिछले मंगलवार के ईमेल को पुनर्स्थापित करना एक प्रश्न है।
blocks
एक बार सहेजा गया, बाद में किसी भी टेम्पलेट में छोड़ दिया गया।
एक संस्करण पंक्ति में तीनों शामिल हैं
JSON
परियोजना डेटा
क्या आप संपादक में वापस लोड करते हैं। इसके बिना एक टेम्पलेट हमेशा के लिए केवल पढ़ने के लिए है।
MJML
संपादन योग्य स्रोत
कंपाइलर में सुधार होने पर विस्थापित, समीक्षा योग्य और पुनः संकलित करने योग्य।
HTML
आप क्या भेजते हैं
प्रदान किया गया और इनलाइन, आपके प्रदाता को अपरिवर्तित सौंप दिया गया।
तीनों को स्टोर करें। प्रत्येक एक अलग प्रश्न का उत्तर देता है, और उनमें से किसी एक को दूसरों से पुनर्निर्माण करना नुकसानदेह है।
तीनों प्रारूप कैसे संबंधित हैंसंपादक एक ग्राहक है। यह आपके API से एक टेम्पलेट मांगता है और एक को वापस सौंपता है; यह कभी नहीं सीखता कि आपके किरायेदार कौन हैं, और इसमें कभी भी किसी भी चीज़ की एकमात्र प्रति नहीं होती है।
एक टेम्पलेट कहाँ जाता है
// Storage scoped to the tenant AND the template. The editor never learns who
// the tenant is — your API does, from the session, and refuses everything else.
editor.Storage.add('remote', {
async load({ templateId }) {
const res = await fetch(`/api/templates/${templateId}/project`);
return res.json();
},
async store(project, { templateId }) {
await fetch(`/api/templates/${templateId}/project`, {
method: 'PUT',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(project),
});
},
});संपादक को आपके द्वारा पहले से चलाए जा रहे बैकएंड के साथ एकीकृत करें, बजाय इसके कि आप अपने ईमेल वर्कफ़्लो को किसी और के प्लेटफ़ॉर्म पर ले जाएं। GJS.Market संपादक प्लगइन्स बेचता है - यह आपके टेम्प्लेट को होस्ट नहीं करता है और आपका ईमेल नहीं भेजता है।
जिस क्षण कोई दूसरा ग्राहक एक टेम्पलेट सहेजता है, स्वामित्व एक विवरण होना बंद हो जाता है। तीन स्तर लगभग हर उत्पाद को कवर करते हैं।
आपका। हर किरायेदार को दिखाई देता है, उनमें से किसी के द्वारा भी संपादन योग्य नहीं है - शुरुआती बिंदु जो आप बनाए रखते हैं।
एक ग्राहक द्वारा सहेजा गया, उनकी पूरी टीम को दिखाई देता है, बाकी सभी के लिए अदृश्य।
कार्य प्रगति पर है. निजी जब तक कोई इसे किसी टैनेंट टेम्पलेट में प्रचारित नहीं करता है.
एक ही टेम्पलेट प्रणाली, अलग-अलग नौकरियों की ओर इशारा करती है।
ग्राहकों को विज़ुअल रूप से अभियान बनाने दें और प्रत्येक भेजें को एक संस्करण टेम्पलेट के रूप में रखें।
संपादक को एम्बेड करनापुनः प्रयोज्य आउटरीच टेम्पलेट एक पूरी टीम साझा करती है, लूप में एक डिजाइनर के बिना।
ड्रैग-एंड-ड्रॉप ईमेल बिल्डरस्वचालित यात्राओं के लिए टेम्पलेट, उस घटना से बंधे घटकों के साथ जिसने उन्हें ट्रिगर किया।
React ईमेल बिल्डरउन लेखकों के लिए एक नो-कोड डिज़ाइन वर्कफ़्लो जिन्हें कभी भी टेबल लेआउट नहीं देखना चाहिए।
हेडलेस CMS संपादकउत्पाद के अंदर ईमेल निर्माण लोगों के पास पहले से ही खुला है, एक अलग टूल में नहीं।
व्हाइट-लेबल पेज बिल्डरनियंत्रित संपादन: ब्रांड-लॉक किए गए क्षेत्र, संपादन योग्य कॉपी, मर्ज टैग जिन्हें तोड़ा नहीं जा सकता।
एम्बेड करने योग्य पेज बिल्डरसंपादन कैनवास दृश्यमान हिस्सा है। एक टेम्पलेट सिस्टम इसका बाकी हिस्सा है - और बाकी वह जगह है जहां समय जाता है।
टेम्पलेट सिस्टम किस चीज से बना है
खरोंच से
यह सब
GrapesJS के साथ
संपादन परत, पहले से ही निर्मित है
GrapesJS आपको संपादन परत देता है। इसके ऊपर टेम्पलेट सिस्टम - स्वामित्व, संस्करण, किरायेदारी - आपका है, और होना चाहिए: यह वह हिस्सा है जो आपके उत्पाद से मेल खाता है।
कैटलॉग से वास्तविक लिस्टिंग, एक टेम्पलेट सिस्टम के अंदर उनके द्वारा किए गए काम से समूहीकृत। नाम और कीमतें सीधे बाजार से आती हैं, इसलिए यहां कुछ भी वास्तव में बिक्री के लिए नहीं हो सकता है।
टेम्पलेट्स को सहेजना, सूचीबद्ध करना और फिर से खोलना - इस पृष्ठ का विषय।
इस श्रेणी को ब्राउज़ करेंएक नया टेम्पलेट क्या शुरू होता है, इससे पहले कि कोई एक को सहेज ले।
इस श्रेणी को ब्राउज़ करेंसंपादक में MJML घटकों को लाता है, लाइव संकलित किया जाता है, इसलिए हाथ से लिखे जाने के बजाय उत्तरदायी मार्कअप उत्पन्न होता है।
प्री-MJML पथ: टेबल-आधारित ईमेल ब्लॉक और एक CSS इनलाइनर, जिसके बीच में कोई संकलन चरण नहीं है।
जिन अनुभागों में एक टेम्पलेट इकट्ठा किया जाता है और फिर से इकट्ठा किया जाता है।
इस श्रेणी को ब्राउज़ करेंसंपादक के भंडारण को आपके द्वारा नियंत्रित बैकएंड में वायरिंग करना।
इस श्रेणी को ब्राउज़ करेंप्रोजेक्ट डेटा को Firebase तक बनाए रखता है, हालांकि आपका ऐप अपने टेम्पलेट्स को कुंजीकृत करता है।
प्रोजेक्ट डेटा को Directus तक बनाए रखता है, जो तब सुविधाजनक होता है जब टेम्पलेट आपकी अन्य सामग्री के बगल में रहते हैं।
छवियों को एक टेम्पलेट संदर्भित करता है, जो टेम्पलेट से आगे निकल जाना चाहिए।
इस श्रेणी को ब्राउज़ करेंपरिसंपत्ति प्रबंधक को Cloudinary पर इंगित करता है, इसलिए टेम्पलेट छवियों को एक ही स्थान से रूपांतरित और परोसा जाता है।
उन छवियों के लिए एक पूर्ण अपलोड प्रवाह जोड़ता है जिन्हें आपके उपयोगकर्ता टेम्पलेट में छोड़ते हैं।
चार संयोजन जो पहले से ही एक साथ काम करते हैं, जिन्हें आप किसके टेम्पलेट लाइब्रेरी के आधार पर बना रहे हैं।
उन ग्राहकों के लिए जो प्रत्येक अपनी स्वयं की लाइब्रेरी रखते हैं
SaaS में एम्बेड करनाएक टीम के लिए बहुत सारे अभियान
उन टेम्प्लेट के लिए जो आपकी अन्य सामग्री के बगल में रहते हैं
हेडलेस CMS संपादकएक संपादक के लिए एक React ऐप के अंदर घुड़सवार
कीमतें निर्माण समय पर कैटलॉग से लाइव पढ़ी जाती हैं।
GrapesJS संपादन परत है और HTML पर रुकती है। उसके बाद सब कुछ आपका बैकएंड और प्रदाता है जिसका आप पहले से भुगतान करते हैं - संपादक में कोई भी प्रेषण अंतर्निहित नहीं है, और यहां कोई भी निहित नहीं है।
चरण 01
भेजें एक विशिष्ट संस्करण का संदर्भ देता है, इसलिए जो बाहर गया वह टेम्पलेट के आगे बढ़ने के बाद प्रतिलिपि प्रस्तुत करने योग्य रहता है।
template_versions.idचरण 02
आपका रेंडरर प्रति प्राप्तकर्ता मर्ज टैग का समाधान करता है. संपादक कभी भी ग्राहक डेटा नहीं देखता है.
{{ order.total }}चरण 03
तालिका-आधारित और इनलाइनर्ड, जो कि प्रत्येक प्रदाता को सौंपे जाने की उम्मीद है।
text/htmlचरण 04
जो भी ESP आप पहले से ही उपयोग कर रहे हैं। इसे स्वैप करने से टेम्पलेट सिस्टम के बारे में कुछ भी नहीं बदलता है।
POST /messagesचरण 05
खुलता है, क्लिक करता है और बाउंस उस संस्करण से जुड़ता है जिसने उन्हें उत्पादित किया है, जो उन्हें तुलनीय बनाता है।
webhookसंपादक कोर प्लस आधिकारिक MJML प्लगइन। दोनों BSD-3-Clause हैं।
npm install grapesjs grapesjs-mjmlimport grapesjs from 'grapesjs';
import grapesjsMjml from 'grapesjs-mjml';
import 'grapesjs/dist/css/grapes.min.css';
// One editor instance per template being edited. The template id — not a page
// id — is what every load and store call is keyed by.
const editor = grapesjs.init({
container: '#template-editor',
plugins: [grapesjsMjml],
pluginsOpts: {
[grapesjsMjml]: {
imagePlaceholderSrc: 'https://cdn.your-app.com/email/placeholder.png',
},
},
storageManager: {
type: 'remote',
autosave: true,
stepsBeforeSave: 10,
},
});सहेजना वह जगह है जहां एक टेम्पलेट बिल्डर संपादक बनना बंद कर देता है। "टेम्पलेट के रूप में सहेजें" एक पंक्ति बनाता है जो आपके ग्राहक के पास है; फिर से सहेजना एक संस्करण को अधिलेखित करने के बजाय जोड़ता है।
// "Save as new template" — a row your customer owns from now on.
async function saveAsTemplate(name) {
const res = await fetch('/api/templates', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
name,
project: editor.getProjectData(), // re-openable in the editor
}),
});
return res.json(); // { id, name, version: 1 }
}
// Editing an existing template appends a version rather than overwriting it,
// so "restore the version we sent last Tuesday" stays a query, not a restore.
async function saveVersion(templateId) {
await fetch(`/api/templates/${templateId}/versions`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ project: editor.getProjectData() }),
});
}फ्रेमवर्क की बारीकियां अपने स्वयं के पृष्ठों पर रहती हैं - यह पृष्ठ उद्देश्य पर फ्रेमवर्क-तटस्थ रहता है।
जिन टीमों को ईमेल निर्माण की आवश्यकता होती है, वे अपने उत्पाद के बजाय इसके अंदर होते हैं।
अपने अनुप्रयोग में विज़ुअल ईमेल संपादन एम्बेड करें, ताकि ग्राहक किसी अलग टूल पर निर्यात करना बंद कर दें.
ग्राहकों को एक अभियान बिल्डर दें जिसके टेम्पलेट का आप संस्करण, ऑडिट और समर्थन कर सकते हैं।
कैनवास और इतिहास स्टैक लिखने के बजाय एक एक्स्टेंसिबल संपादन फाउंडेशन से शुरू करें।
प्रति क्लाइंट एक पुनः प्रयोज्य ईमेल सिस्टम बनाएं, जिसे ब्लॉक और लॉक किए गए टेम्पलेट्स के रूप में सौंप दिया गया है।
संपादक कोर और उसके रखरखाव के बिना ईमेल निर्माण को हमेशा के लिए जोड़ें।
उपयोगकर्ताओं को मार्कअप लिखे बिना या टिकट दाखिल किए बिना ऑन-ब्रांड ईमेल बनाने दें।
यह पृष्ठ टेम्पलेट सिस्टम के बारे में है। ये पड़ोसी प्रश्नों को कवर करते हैं।
MJML अंदर, इनलाइन टेबल-आधारित HTML बाहर, एक भेजने वाले प्रदाता को सौंप दिया गया। प्रारूप और वितरण तर्क पूर्ण रूप से।
GrapesJS ईमेल बिल्डरइसके नीचे डेटा मॉडल के बजाय बाज़ारिया की ओर से संपादन अनुभव।
ड्रैग-एंड-ड्रॉप ईमेल बिल्डरReact एप्लिकेशन से संपादक को माउंट और नियंत्रित करना।
React ईमेल बिल्डरईमेल के बजाय पृष्ठों के लिए एक ही एम्बेडिंग प्रश्न।
SaaS पेज बिल्डरGrapesJS से शुरू करें, अपने उत्पाद के आसपास संपादन अनुभव को आकार दें, और इसे उन प्लगइन्स के साथ बढ़ाएं जिनकी आपके टेम्पलेट सिस्टम को आवश्यकता है।
कोर स्थापित करें, संपादक और तार भंडारण को अपने API पर माउंट करें।
त्वरित प्रारंभ पढ़ेंप्रीसेट, ब्लॉक, भंडारण और निर्यात - लाइव कीमतों के साथ वास्तविक लिस्टिंग।
ईमेल प्लगइन्स ब्राउज़ करेंहमें बताएं कि आपके टेम्पलेट सिस्टम को क्या करना है, और हम बिल्ड को स्कोप करेंगे।
एक संक्षिप्त प्रारंभ करेंसंबंधित पढ़ना