メールエンティティでの本文の取付方

以下のようにメール本文をHTMLに直書きするとロボット(クローラー)が自動的にメールアドレスを取得して広告メールなんかが爆裂に飛んできてしまう。

<a href="mailto:abc@abc.com">Mail</a>

そこで、以下のようなサイト

https://www.luft.co.jp/cgi/coding.php

を利用してメールエンティティ化する。こうするとメールアドレスが直接HTMLにかかれていないため、拾われることがない。

<script type="text/javascript">
<!--
function converter(M){
var str="", str_as="";
for(var i=0;i<M.length;i++){
str_as = M.charCodeAt(i);
str += String.fromCharCode(str_as + 1);
}
return str;
}
function mail_to(k_1,k_2)
{eval(String.fromCharCode(108,111,99,97,116,105,111,110,46,104,114,101,102,32,
61,32,39,109,97,105,108,116,111,58) 
+ escape(k_1) + 
converter(String.fromCharCode(96,97,98,63,102,108,96,104,107,45,98,110,108,
62,114,116,97,105,100,98,115,60)) 
+ escape(k_2) + "'");} 
document.write('<a href=JavaScript:mail_to("","")>(必ずお問い合わせなどの文字を入力してください)<\/a>');
//-->
</script>
<noscript>(画像などを設置)</noscript>

このメールエンティティ化したリンクをクリックしたとき、メールタイトルやメール本文などをどうするか?というと、こうする

<script type="text/javascript">
<!--
function converter(M){
var str="", str_as="";
for(var i=0;i<M.length;i++){
str_as = M.charCodeAt(i);
str += String.fromCharCode(str_as + 1);
}
return str;
}
function mail_to(k_1,k_2)
{eval(String.fromCharCode(108,111,99,97,116,105,111,110,46,104,114,101,102,32,
61,32,39,109,97,105,108,116,111,58) 
+ escape(k_1) + 
converter(String.fromCharCode(117,104,107,107,96,102,100,111,113,110,108,63,102,108,96,104,107,45,98,110,108,
62,114,116,97,105,100,98,115,60)) 
+ escape(k_2) + "メールタイトル&body=下記項目を入力してください%0D%0A%0D%0A名前→%0D%0A年齢→%0D%0A住所→%0D%0A電話番号→%0D%0A身長→%0D%0A体重→%0D%0A%0D%0A本文本文本文本文本文本文%0D%0A'");} 
document.write('<a href=JavaScript:mail_to("","") class="btn btn-primary btn-block btn-entry">メール送信する<\/a>');
//-->
</script>
<a href="JavaScript:mail_to(&quot;&quot;,&quot;&quot;)" class="btn btn-primary btn-block btn-entry">メール送信する</a>

body内にある

%0D%0A

は改行できる。メールリンクはスマホからだと送信する方も、受信して返信する方も、楽である。サーバー上にプログラムを置く必要もない。

google スプレッドシートを利用してJSONをAPIで発行

基本はJavascript。

doOutput(e)関数で吐き出すらしい。これをAPIにすると、超便利である。

まず、
var summaryData = sh.getDataRange().getValues();
がミソ。これで一度すべてのシート内容を読む。シートが巨大な時はこれをつかう。早いから。

リターンで返す時は、
return ContentService.createTextOutput(JSON.stringify(json)).setMimeType(ContentService.MimeType.JSON);
などなど。単純に文字列を返してもだめっすよ、怒られます。