تقنية

كيفية إرسال صور Base64 عبر البريد الإلكتروني باستخدام Google Apps Script


لن يعرض Gmail صور Base64 المضمنة داخل رسائل البريد الإلكتروني بتنسيق HTML، ولكن باستخدام Google Apps Script، يمكنك استخدام blobs لإرسال الصور المشفرة base64

يمكن تضمين الصور المشفرة بـ Base64 مباشرة داخل رسائل البريد الإلكتروني بتنسيق HTML دون الحاجة إلى استضافة الصورة على خادم بعيد. وهذا يوفر العديد من المزايا:

  1. يتجنب التتبع – غالبًا ما يستخدم مسوقو البريد الإلكتروني الصور الخارجية لتتبع عمليات فتح البريد الإلكتروني.
  2. انخفاض احتمالية البريد العشوائي – قد ترفض بعض خوادم البريد الإلكتروني رسائل البريد الإلكتروني التي تحتوي على صور خارجية.
  3. لا توجد صور مكسورة – إذا تمت استضافة الصورة على خادم بعيد، فقد لا يتم تحميلها إذا كان الخادم معطلاً.

ومع ذلك، لا يدعم Gmail صور base64 في رسائل البريد الإلكتروني بتنسيق HTML. إذا حاولت إرسال بريد إلكتروني يحتوي على صور base64 إلى حساب Gmail أو Google Workspace، فلن يتم عرض الصورة في نص البريد الإلكتروني ولكن سيتم عرضها كمرفق بدلاً من ذلك.

الحل البديل هو تحويل صورة base64 إلى كائن ثنائي كبير الحجم ثم تضمين الكائن الثنائي الكبير في البريد الإلكتروني. نحن نستخدم تقنية مشابهة لتضمين الصور المشفرة باستخدام Base64 في رسائل البريد الإلكتروني المرسلة من Mail Merge وDocument Studio.

ستعمل وظيفة Google Apps Script التالية على تحويل جميع صور base64 في بريد إلكتروني بتنسيق HTML إلى blobs ثم إرسال البريد الإلكتروني باستخدام خدمة Gmail.

// The original HtmlMessage may contain base64 images in the <img> tags.
// <img src="data:image/png;base64,R0lGODlhQABAAMQAAJSWl..." />

const sendEmailWithGmail = ({ to, subject, htmlMessage }) => {
  let htmlBody = htmlMessage;
  const inlineImages = {};

  // Find all base64 image tags in the html message.
  const base64ImageTags = htmlBody.match(/<img src="data:image\/(png|jpeg|gif);base64,([^"]+)"[^>]*>/gm) || [];

  base64ImageTags.forEach((base64ImageTag) => {
    // Extract the base64-encoded image data from the tag.
    const [, format, base64Data] = base64ImageTag.match(/data:image\/(png|jpeg|gif);base64,([^"]+)/);

    // Convert the base64 data to binary.
    const imageByte = Utilities.base64Decode(base64Data);

    // Create a blob containing the image data.
    const imageName = Utilities.getUuid();
    const imageBlob = Utilities.newBlob(imageByte, `image/${format}`, imageName);

    // Replace the base64 image tag with cid: image tag.
    const newImageTag = base64ImageTag.replace(/src="[^"]+"/, `src="cid:${imageName}"`);
    htmlBody = htmlBody.replace(base64ImageTag, newImageTag);

    inlineImages[imageName] = imageBlob;
  });

  MailApp.sendEmail({
    to: to,
    subject: subject,
    htmlBody: htmlBody,
    inlineImages: inlineImages,
  });
};

انظر أيضًا: إرسال رسائل البريد الإلكتروني باستخدام Gmail API



Source link

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *

زر الذهاب إلى الأعلى