Rojgar Sangam

Gmail और Google Sheets से Free Newsletter System बनाओ — Mailchimp की ज़रूरत नहीं, एक रुपया नहीं

Mailchimp का free plan 500 subscribers तक है — और उसके बाद $20/month से शुरू होता है। ConvertKit? $29/month। Substack commission लेती है। इन सभी tools का एक common trait है — वो आपकी audience के ऊपर बैठे हैं और आप उनकी pricing के hostage हैं।

free email newsletter gmail google sheets automation — send bulk email free gmail hindi, newsletter without mailchimp, DIY email marketing google sheets apps script hindi guide 2026

लेकिन एक combination है जो ₹0 में वो सब कर सकता है जो यह tools करते हैं — Gmail + Google Sheets + Apps Script। यह Google का built-in automation platform है जो completely free है। Free Gmail account पर प्रति दिन 100 emails, और Google Workspace account पर 1,500 emails।

आज हम step-by-step एक complete newsletter system बनाएंगे — subscriber list, personalized emails, automatic sending, और "Email Sent" tracking — सब कुछ।

{getToc} $title={Table of Contents} $count={true} $width={full}

यह System Actually क्या करता है — Architecture समझो

इससे पहले कि code लिखें, पूरा picture clear करते हैं:

  • Google Sheets — Subscriber database है। Name, Email, अन्य data यहाँ store होगा।
  • Gmail Draft — Email template। आप एक draft लिखो placeholders के साथ — script वो draft automatically सभी subscribers को personalized करके भेजेगा।
  • Google Apps Script — वो brain है जो Sheet से data लेता है, Draft से template लेता है, merge करता है, और Gmail से भेजता है।
  • Time-based Trigger — Automation। Script automatically हर हफ्ते या हर महीने चलेगा।
यह system exactly वैसे काम करता है जैसे Mailchimp करता है — subscriber list, personalized emails, scheduling। फर्क सिर्फ यह है कि यहाँ बीच में कोई third-party company नहीं है जो आपकी audience का data रख रही हो।

Gmail Daily Limits — पहले यह जानना ज़रूरी है

Account Type Daily Email Limit Best For
Free Gmail (@gmail.com) 100 recipients/day Personal blog, small newsletter
Google Workspace (paid) 1,500 recipients/day Small business newsletter

अगर आपकी subscriber list 100 से कम है — free Gmail से शुरू करो। जब grow करो तब सोचना। अभी शुरुआत करना ज़्यादा important है।

Step 1 — Google Sheet Setup: Subscriber Database बनाओ

Google Drive खोलो → New → Google Sheets। Sheet का नाम दो — जैसे "Newsletter Subscribers"।

इन exact headers डालो Row 1 में:

Column A: Recipient
Column B: Name  
Column C: Email Sent

Row 2 से data डालो। Example:

A2: reader@example.com    B2: Rahul Sharma    C2: (खाली छोड़ो)
A3: user2@gmail.com       B3: Priya Singh     C3: (खाली छोड़ो)
A4: contact@website.com   B4: Amit Kumar      C4: (खाली छोड़ो)

Important Notes:

  • Column A का header exactly "Recipient" होना चाहिए — capital R के साथ
  • Column C का header exactly "Email Sent" होना चाहिए
  • "Email Sent" column खाली है — script automatically यहाँ date stamp डालेगा जब email भेजा जाएगा
  • जिन rows में "Email Sent" already filled है — script उन्हें skip करेगा — यह duplicate prevention है

Step 2 — Gmail Draft Template बनाओ

Gmail खोलो → Compose → यह template type करो:

Subject: {{Name}} — इस हफ्ते की Updates आ गईं 🎯

नमस्ते {{Name}},

यह हफ्ते का newsletter आपके लिए:

[यहाँ अपना newsletter content लिखो]

Best regards,
Sanjeev Kumar
sanjeevkumar.rojgarsangam.in

Important:

  • Draft Send मत करो — सिर्फ लिखो और window बंद कर दो। Gmail automatically Drafts folder में save करेगा।
  • Subject line में जो {{Name}} लिखा है — यह placeholder है। Script automatically हर person का actual name यहाँ डालेगा।
  • Body में भी {{Name}} use कर सकते हो — वहाँ भी personalize होगा।
  • {{Recipient}} use करने पर email address आएगी।

Step 3 — Apps Script: वो Code जो सब Connect करता है

Google Sheet पर जाओ → Extensions → Apps Script।

Editor खुलेगा। जो भी default code है उसे delete करो। यह complete code paste करो:

/**
 * Newsletter System — Gmail + Google Sheets
 * Free Email Automation by Sanjeev Kumar
 * sanjeevkumar.rojgarsangam.in
 */

// ये दोनों values अपने Sheet के हिसाब से set करो
const RECIPIENT_COL = "Recipient";   // Column A का header
const EMAIL_SENT_COL = "Email Sent"; // Column C का header

/**
 * Custom Menu बनाता है Google Sheet में
 */
function onOpen() {
  const ui = SpreadsheetApp.getUi();
  ui.createMenu("📧 Newsletter")
    .addItem("Send Newsletter Now", "sendNewsletter")
    .addItem("Test — Send to Me Only", "sendTestEmail")
    .addToUi();
}

/**
 * Main function — Newsletter सभी subscribers को भेजता है
 * जिन rows में Email Sent column filled है — उन्हें skip करता है
 */
function sendNewsletter() {
  
  // Gmail Draft का subject — EXACTLY वही जो draft में लिखा है
  const DRAFT_SUBJECT = "{{Name}} — इस हफ्ते की Updates आ गईं 🎯";
  
  // Sheet से data लो
  const sheet = SpreadsheetApp.getActiveSheet();
  const data = sheet.getDataRange().getValues();
  const headers = data[0];
  
  // Column indexes find करो
  const recipientColIdx = headers.indexOf(RECIPIENT_COL);
  const emailSentColIdx = headers.indexOf(EMAIL_SENT_COL);
  
  if (recipientColIdx === -1 || emailSentColIdx === -1) {
    SpreadsheetApp.getUi().alert(
      "Error: Column headers match नहीं हुए। " +
      "Sheet में 'Recipient' और 'Email Sent' columns होने चाहिए।"
    );
    return;
  }
  
  // Gmail Draft find करो
  const drafts = GmailApp.getDrafts();
  let templateDraft = null;
  
  for (const draft of drafts) {
    const msg = draft.getMessage();
    if (msg.getSubject() === DRAFT_SUBJECT) {
      templateDraft = draft;
      break;
    }
  }
  
  if (!templateDraft) {
    SpreadsheetApp.getUi().alert(
      "Error: Gmail में Draft नहीं मिला। " +
      "Subject exactly: '" + DRAFT_SUBJECT + "' होना चाहिए।"
    );
    return;
  }
  
  // Template का body और subject लो
  const templateMsg = templateDraft.getMessage();
  const templateBody = templateMsg.getBody(); // HTML body
  const templateSubject = templateMsg.getSubject();
  
  let sentCount = 0;
  let skippedCount = 0;
  
  // हर row के लिए email भेजो (Row 1 headers है, Row 2 से start)
  for (let i = 1; i < data.length; i++) {
    const row = data[i];
    
    // अगर Email Sent column पहले से filled है — skip करो
    if (row[emailSentColIdx] !== "") {
      skippedCount++;
      continue;
    }
    
    const recipient = row[recipientColIdx];
    
    // Empty rows skip करो
    if (!recipient || recipient === "") {
      continue;
    }
    
    // Placeholders को actual data से replace करो
    let personalizedSubject = templateSubject;
    let personalizedBody = templateBody;
    
    // हर column header को placeholder की तरह treat करो
    for (let j = 0; j < headers.length; j++) {
      const placeholder = "{{" + headers[j] + "}}";
      const value = row[j] ? row[j].toString() : "";
      personalizedSubject = personalizedSubject.replaceAll(placeholder, value);
      personalizedBody = personalizedBody.replaceAll(placeholder, value);
    }
    
    // Email भेजो
    try {
      GmailApp.sendEmail(recipient, personalizedSubject, "", {
        htmlBody: personalizedBody,
        name: "Sanjeev Kumar — Rojgar Sangam" // Sender का नाम
      });
      
      // Email Sent column में date stamp डालो
      sheet.getRange(i + 1, emailSentColIdx + 1).setValue(
        new Date().toLocaleString("en-IN")
      );
      
      sentCount++;
      
      // Rate limiting — Gmail quota protect करने के लिए
      Utilities.sleep(200); // 200ms pause between emails
      
    } catch (error) {
      console.error("Email send failed for: " + recipient + " — " + error.message);
    }
  }
  
  SpreadsheetApp.getUi().alert(
    `Newsletter भेज दिया! ✅\n\n` +
    `Sent: ${sentCount}\n` +
    `Skipped (already sent): ${skippedCount}`
  );
}

/**
 * Test function — सिर्फ पहले subscriber को email भेजता है
 * Live send से पहले यह run करो
 */
function sendTestEmail() {
  const sheet = SpreadsheetApp.getActiveSheet();
  const data = sheet.getDataRange().getValues();
  const headers = data[0];
  
  if (data.length < 2) {
    SpreadsheetApp.getUi().alert("Sheet में कोई subscriber नहीं है।");
    return;
  }
  
  // पहली subscriber row
  const testRow = data[1];
  const recipientColIdx = headers.indexOf(RECIPIENT_COL);
  const recipient = testRow[recipientColIdx];
  
  SpreadsheetApp.getUi().alert(
    `Test email भेजी जाएगी: ${recipient}\n\nOK करें continue करने के लिए।`
  );
  
  // Main function call करो — लेकिन यह duplicate prevention bypass करेगा
  // इसलिए test email manually भेजते हैं:
  GmailApp.sendEmail(
    recipient,
    "TEST: Newsletter Preview",
    "यह test email है। अगर यह मिल रही है तो system काम कर रहा है! ✅",
    { name: "Sanjeev Kumar — Test" }
  );
  
  SpreadsheetApp.getUi().alert("Test email भेज दी! 📧 अपना inbox check करो।");
}

Step 4 — Script को Authorize करो

Code paste करने के बाद:

  1. Save करो — Ctrl+S
  2. Function dropdown में onOpen select करो
  3. ▶ Run button click करो
  4. Google Authorization popup आएगा — "Review Permissions" → अपना Google account select करो
  5. "Google hasn't verified this app" आएगा — "Advanced" → "Go to Script (unsafe)" click करो
  6. Permissions allow करो — यह आपका खुद का script है, safe है

Google Sheet refresh करो। ऊपर menu में "📧 Newsletter" option आ जाएगा।

Step 5 — Test और Live Send

पहले Test करो

Google Sheet → 📧 Newsletter → "Test — Send to Me Only"
→ Confirmation dialog → OK
→ अपना Gmail inbox check करो

अगर test email आ गई:
→ Subject और body preview करो
→ {{Name}} जैसे placeholders सही replace हुए?
→ HTML formatting correct है?

सब सही है? तो Live send करो।

Live Newsletter Send करो

Google Sheet → 📧 Newsletter → "Send Newsletter Now"
→ Script सभी subscribers को email भेजेगा
→ "Email Sent" column में date stamp आ जाएगा
→ अंत में Summary dialog: "Sent: 45, Skipped: 5"

Next newsletter:
→ New Gmail Draft बनाओ नए content के साथ
→ DRAFT_SUBJECT constant update करो script में
→ Email Sent column clear करो (या नया sheet tab use करो)
→ फिर Send करो

Step 6 — Automatic Weekly/Monthly Schedule

हर बार manually run करने की ज़रूरत नहीं। Time-based trigger set करो:

  1. Apps Script editor में — left sidebar में Clock icon (Triggers) click करो
  2. "Add Trigger" button click करो
  3. Settings:
    • Function to run: sendNewsletter
    • Event source: Time-driven
    • Type: Week timer (weekly newsletter के लिए) या Month timer
    • Day: जिस दिन newsletter भेजना हो — जैसे Monday
    • Time: Morning 9am-10am
  4. Save करो

अब हर हफ्ते Monday morning automatically newsletter जाएगा। आपको सिर्फ नया Gmail Draft बनाना है new content के साथ।

Common Problems और Solutions

Problem 1: "Draft नहीं मिला" error
Solution: DRAFT_SUBJECT constant exactly वैसा ही होना चाहिए
          जैसा Gmail Draft का Subject है — space, punctuation, emoji सब match

Problem 2: {{Name}} replace नहीं हुआ
Solution: Column header exactly "Name" होना चाहिए (capital N)
          Row में Name column empty नहीं होनी चाहिए

Problem 3: Email spam में गई
Solution: - "Unsubscribe" footer add करो
          - Bulk में एक साथ 100 emails न भेजो — script में sleep है, ठीक है
          - Subject में "FREE" और "URGENT" जैसे spam trigger words avoid करो
          - Gmail से वही address use करो जिसमें real activity है

Problem 4: Script timeout हो गया
Solution: Free Gmail limit 100/day है
          Script में already 200ms pause है
          अगर बड़ी list है — multiple days में send करो
          "Email Sent" column duplicate prevention करता है — safe है

Problem 5: Authorization error बार-बार आती है
Solution: Extensions → Apps Script → Re-run onOpen function
          फिर से Authorization flow complete करो

Bonus — Unsubscribe System कैसे Add करें

Professional newsletter में Unsubscribe option होना ज़रूरी है। Simple approach:

Gmail Draft के body में यह line add करो:

---
इस newsletter को unsubscribe करने के लिए
reply करो subject: "UNSUBSCRIBE"

---

Gmail में Filter बनाओ:
Settings → Filters → Create filter
Subject: contains "UNSUBSCRIBE"
Action: Apply label "Unsubscribes"

हर week before send:
1. "Unsubscribes" label check करो
2. उन emails को Sheet से delete करो
3. फिर newsletter send करो

यह System किसके लिए Best है

Use Case Suitable?
Personal blog newsletter — 50-100 subscribers ✅ Perfect
Small business updates — 200-300 customers ✅ Workspace account से fine
10,000+ subscriber newsletter ❌ Proper ESP (Mailchimp/Brevo) use करो
Transactional emails (OTP, receipts) ❌ Dedicated SMTP service use करो

Security Note — अपने Subscribers का Data Safe रखो

जैसे 2FA bypass attacks से accounts compromise होते हैं — वैसे ही subscriber data भी valuable होता है। Google Sheet को public मत करो। Sharing settings में केवल आप ही editor होने चाहिए।

और जैसे Rojgar Sangam Tools में browser-based processing इसीलिए choose किया — ताकि data कहीं upload न हो — वैसे ही यह Gmail + Sheets system आपके subscriber data को third-party servers पर नहीं भेजता। सब आपके Google account में रहता है।

निष्कर्ष

Mailchimp, ConvertKit, Substack — यह सब great tools हैं जब आपकी list बड़ी हो। लेकिन शुरुआत में जब 50-100 subscribers हों और हर महीने ₹2,000-3,000 newsletter tools पर खर्च करना ज़रूरी न हो — Gmail + Google Sheets + Apps Script एक legitimate, powerful, और completely free alternative है।

एक बार setup के बाद यह system months तक बिना किसी intervention के automatically चलता है। आपका काम सिर्फ नया Gmail Draft बनाना है — बाकी automation handle कर लेता है।

इस article से related कोई specific सवाल है — यहाँ contact करो

स्वागत है! आपके विचार हमारे लिए मूल्यवान हैं। कृपया सार्थक Discussion करें और Spam लिंक से बचें। Spam Comments तुरंत हटा दिया जाएगा। Terms & Conditions पढ़ें। धन्यवाद! 🙏

और नया पुराने