質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.60%

HTMLでのGメール送信について

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,059

score 21

GASで承認フローを作成しております。
とりあえず完成したのですが、GASから送信しているGメールが
単調なテキスト表示なのでポイントが目立つように装飾してほしいと要望があり、
html形式で表示するように色々と試しながら修正したら、URLにアクセスできなくなりました。

//scriptの所在
var URL = "https://script.google.com/a/****co.jp/macros/s/**fycbySKnk0-djE**1L_b9bym4eZ0he-0**qE/exec";

function sendFormMail(e) {

  // 追加行
  var row = e.range.getRow();   
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = spreadsheet.getSheetByName(sheetName);
  var name = e.namedValues["申請者"];
  var root = e.namedValues["申請ルート選択"];
  var drv = e.namedValues["共有ドライブのリンク先"];
  var user = getUserBy("name", name ,root);
  // 承認者
  var authorizer = getUserBy("id", user['authorizer_id'], root);
  var address = authorizer['mail'];
  var authorizer_nm = authorizer['name'];


  var cols = ["タイムスタンプ","申請日","申請者","申請ルート選択","稟議案件名","コメント"];
  var body="";
      body += "<h4>---------------------------------------------------------</h4>"
      cols.forEach(function(col){
          body +=  col ;
          body += " : " ;
          body += '<b><font color="#FF00FF">' + e.namedValues[col] + '</font></b>';
          body += '<br>';
      })
      body += "<h4>---------------------------------------------------------</h4>";
      body += '<br>';
      body += "<b>下記URLをクリックして内容をご確認ください。</b>";
      body += '<br>';
      body += '<font color="#FF00FF">' + URL + '</font>';
      body += '<br>';
      body += "?row=" + row;
      body += "&name=" + encodeURI(authorizer['name']);
      body += "&root=" + encodeURI(root);
      body += "&drv=" + encodeURI(drv);
    //  Logger.log('drv :%s', drv); 

      GmailApp.sendEmail(address,         //宛先
                     '設備投資稟議:承認依頼', //件名
                     body ,                  //本文
                    {htmlBody: body}
      );
}

// 承認ページ表示時
function doGet(e) {

  //必要な値を画面に持たせておく
  var html = HtmlService.createTemplateFromFile("shonin");
  Logger.log('html  :%s', html);

  var row = e.parameter.row;
  var name = e.parameter.name;
  var root = e.parameter.root; 
  var drv = e.parameter.drv;
  var url = e.parameter.URL;
  Logger.log('url :%s', e.parameter.URL);

  html.row = row;
  html.name = name;
  html.root = root;  
  html.url = url;
  html.drv = drv;

  html.method = "get";
  return html.evaluate();

}

※黒字テキストだけだったのをピンク太字で表示するように変更。
まず、ここまではOKでした。

<追記>下記メールを開いたときのアドレスは以下の通りです。
https://script.google.com/a/****.co.jp/macros/s/*fyc***Knk0-djEP4dks931L*_b9bym4eZ0he-0**4px8fRvWqE/exec

イメージ説明

以下、問題の承認画面。
ここでの画面のURLの部分をクリックすることで共有ドライブを表示していたが、
エラーになる。
URLにはdrvの値が入ってほしかったのですがセットされていない様子。

(shonin.html)
<!-- 承認リンクURLが押されたときに表示する画面 -->
<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
    <style>
        h1 {
         font-weight: normal;
        }
        h2 {
        font-weight: normal;
        }
        h3 {
        font-weight: normal;
        }
        h4 {
        font-weight: normal;
        }
        h5 {
        font-weight: normal;
        }
    </style>
  </head>
  <body>
    <h4>---------------------------------------------------------</h4>
    <h3><b>    設備投資稟議:承認依頼画面</b></h3>
    <h4>---------------------------------------------------------</h4>     
        <h4>  下記<font color="#FF00FF">URL</font>より稟議書の内容をご確認いただき、承認印・コメント入力をお願いします。</h4>
        <h4>  <a href="<?= drv ?>"><font color="#FF00FF">URL</font></a></h4>
        <h4>  終わりましたら、下の<font color="#0033FF">承認</font>或いは<font color="#0033FF">却下</font>を選択して<font color="#0033FF">送信</font>してください。</h4>
    <form action="<?= url ?>" method="post">
      <h3><b>  <input type="radio" name="shonin" value="1" checked="checked">承認
      <input type="radio" name="shonin" value="0">却下
      <input type="radio" name="row" value="<?= row ?>">
      <input type="radio" name="name" value="<?= name ?>">
      <input type="radio" name="root" value="<?= root ?>">
      <input type="radio" name="drv" value="<?= drv ?>">
      <input type="submit" value="送信"></b></h3>
        <h5>  ◆承認のとき ・・・次の承認者へ承認依頼メールが送られます。</h5> 
        <h5>  ◆却下のとき ・・・申請者へ却下通知メールが送られます。</h5> 
    </form>
  </body>
</html>
(※一部、無駄にtype=radio表記しています)


イメージ説明

<追記>
上記赤四角部分のURLをクリックしたときのアドレス
https://accounts.google.com/ServiceLogin?service=wise&passive=*2*960continue=https://n-oiqn43fr5t3v2n5h**73vxdt2rkn5i5x5jsa-0lu-script.googleusercontent.com/undefined&followup=https://n-o*n43fr5t*n5hvxd73vx***jsa-0lu-script.googleusercontent.com/undefined

こんなアドレスでError 400で表示されます。


変更したのは、function sendFormMail(e)内で、Gメール送信するときに
bodyをhtml形式に変更した点と、それに合わせてshonin.htmlを修正したことです。

それまでは、

var cols = ["タイムスタンプ","申請日","申請者","申請ルート選択","稟議案件名","コメント"];
var body="";
cols.forEach(function(col){
body += col;
body += ":"
body += e.namedValues[col];
body += "\n";
})
body += "\n";
body += "-------------------------------------------------\n";
body += "下記URLをクリックして内容をご確認ください。\n";
body += URL;
body += "\n";
body += "?row=" + row;
body += "&name=" + encodeURI(authorizer['name']);
body += "&cc_man=" + encodeURI(cc_man);
body += "&root=" + encodeURI(root); 
GmailApp.sendEmail(address,         //宛先
'設備投資稟議:承認依頼', //件名
body                   //本文
);
}

という表記をしていました。

長い質問ページとなってしまい申し訳ございません。
ご指摘のほどよろしくお願いします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+1

      body += "&root=" + encodeURI(root);
//  body += "&drv=" + encodeURI(drv);
//  Logger.log('drv :%s', drv); 

質問文を拝見する限り、drvの箇所はコメントアウトされているので、反映されないのはやむを得ません。

ところで、urlをfontでかこっていると思うのですが、実際クリックして400になったときのアドレス(データ部分は隠蔽可)を開示可能でしょうか?

--追加
<BR>タグをおいたことでメールアドレスが改行されて、後半のパラメータをわたす部分がとぎれています。

      body += '<br>';
      body += '<font color="#FF00FF">' + URL + '</font>';
//      body += '<br>'; //(*)
      body += "?row=" + row;
      body += "&name=" + encodeURI(authorizer['name']);
      body += "&root=" + encodeURI(root);
      body += "&drv=" + encodeURI(drv);


(*)のBRをやめるか、できるかどうか分かりませんが

      body += '<br>';
      body += '<a href="'+URL+ "?row=" + row +"&name=" + encodeURI(authorizer['name']) + "&root=" + encodeURI(root) + "&drv=" + encodeURI(drv);
      body += '"><font color="#FF00FF">承認ページ</font></a>';


みたいにaタグで書くか、で、どうでしょうか?

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/01/09 12:04

    早々のご回答ありがとうございます。
    // body += "&drv=" + encodeURI(drv);
    ですが、実際はコメント外しています。
    ややこしくしてしまいました。大変申し訳ございません。

    https://accounts.google.com/ServiceLogin?service=wise&passive=*2*960**continue=https://n-oiq**n43fr5t3v2n5h****73vxdt2rkn5i5x5jsa-0lu-script.googleusercontent.com/undefined&followup=https://n-o***n43fr5t***n5hvxd73vx*****jsa-0lu-script.googleusercontent.com/undefined

    こんなアドレスでError 400で表示されます。

    キャンセル

  • 2019/01/09 12:12

    認証が走ってる風ですね。メールから開いた直後のものはどうでしょうか?あとここだと他の人が見ないので、質問に追記していただいたほうが良いと思います。

    キャンセル

  • 2019/01/09 12:30

    ご指摘ありがとうございます。質問に追記、更新してみました。

    キャンセル

  • 2019/01/10 08:48

    ご指摘の通りでした。本当にありがとうございます。
    無事解決できました。助かりました!

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.60%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る