10

テキストを HTML 形式で送信する単純な MailApp があります。私が持っている小さな質問は、そのテキストにインライン画像を挿入するにはどうすればよいですか? たとえば、オランダ語のテキストにはオランダのフラグを追加し、フランス語のコンテンツにはフランスのフラグを追加したいと考えています。

HTMLコードを使用するだけでうまくいくと思いました。しかし、残念ながら、そのような運はありません。これは私が必要とする小さな画像であり、コンテンツの下に大きな画像はありません。どうすればこれを達成できますか?

MailApp.sendEmail(mailaddress, subject, "" ,
              { htmlBody: bodyNL + bodyFR })
4

2 に答える 2

16

のドキュメントでsendEmail(message)は、2 つのロゴをインライン画像としてメールに追加する方法を示しています。

これは、テキスト ブロックの先頭にロケール フラグを追加する Google の例からの適応です。クリエイティブ コモンズの下で自由にライセンスされているウィキメディアの画像を使用しています。

スクリーンショット

これがどのように機能するかの鍵は次のとおりです。

  • <img>電子メール本文のHTMLタグは、src='cid:[name]'添付された画像を参照するために使用されます。これらはContent-ID Universal Resource Locator で、マルチパート電子メール メッセージの一部を参照します。
  • タグでインラインstyleを使用<img>して、メール クライアントにタグの表示方法を伝えることができます。たとえば、添付の画像を拡大縮小しました。(注: 必要な正確なサイズのカスタム イメージを使用する方が無駄が少なくなります。)
  • メールが送信用にエンコードされると、添付された各画像は、オブジェクトで指定した でラベル付けされた独自の部分になります。このオブジェクトは、メソッドの高度なパラメーター オブジェクトの一部です。cidinlineImagessendMail()

    ここでは、2 つcidの と がnlFlagあり、それぞれがファイルfrFlagに関連付けられています。Blob

    inlineImages:
    {
      nlFlag: nlFlagBlob,
      frFlag: frFlagBlob
    }
    
  • ファイル BLOB はさまざまな方法で取得できます。ここではUrlFetchApp.fetch()、WikiMedia からバイナリ イメージを取得し、それらを BLOB に変換して、添付する BLOB の名前を設定しました。

コード:

/**
 * Example of sending an HTML email message with inline images.
 * From: http://stackoverflow.com/a/37688529/1677912
 */
function sendInlineImages() {
  var mailaddress = Session.getActiveUser().getEmail();
  var subject = "test inline images";
  var bodyNL = "This is <B>DUTCH</B> text.";
  var bodyFR = "This is <B>FRENCH</B> text.";

  // Image URLs, under CC license
  var nlFlagUrl = "https://upload.wikimedia.org/wikipedia/commons/thumb/b/b2/Flag_of_the_Netherlands.png/320px-Flag_of_the_Netherlands.png";
  var frFlagUrl = "https://upload.wikimedia.org/wikipedia/en/thumb/c/c3/Flag_of_France.svg/320px-Flag_of_France.svg.png";

  // Fetch images as blobs, set names for attachments
  var nlFlagBlob = UrlFetchApp
                            .fetch(nlFlagUrl)
                            .getBlob()
                            .setName("nlFlagBlob");
  var frFlagBlob = UrlFetchApp
                            .fetch(frFlagUrl)
                            .getBlob()
                            .setName("frFlagBlob");

  // Prepend embeded image tags for email
  bodyNL = "<img src='cid:nlFlag' style='width:24px; height:16px;'/>" + bodyNL;
  bodyFR = "<img src='cid:frFlag' style='width:24px; height:16px;'/>" + bodyFR;

  // Send message with inlineImages object, matching embedded tags.
  MailApp.sendEmail(mailaddress, subject, "",
                    { htmlBody: bodyNL + "<BR/><BR/>" + bodyFR,
                      inlineImages:
                      {
                        nlFlag: nlFlagBlob,
                        frFlag: frFlagBlob
                      }
                    });

}
于 2016-06-07T20:17:22.227 に答える
0

MailApp ドキュメントから:

htmlBody String 設定されている場合、HTML をレンダリングできるデバイスは、必須の body 引数の代わりにそれを使用します。メールにインライン画像がある場合は、オプションの inlineImages フィールドを HTML 本文に追加できます

inlineImages オブジェクト 画像キー (文字列) から画像データ (BlobSource) へのマッピングを含む JavaScript オブジェクト。これは、htmlBody パラメータが使用され、これらの画像への参照が次の形式で含まれていることを前提としています。

そのため、画像を inlineImages 詳細パラメーターに追加し、HTML メッセージを作成するときに画像キーを参照する必要があります。

于 2016-03-23T22:17:10.197 に答える