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

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

ただいまの
回答率

90.32%

  • API

    1609questions

    APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

  • Google Apps Script

    957questions

    Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

  • Google

    661questions

    Googleは、アメリカ合衆国に位置する、インターネット関連のサービスや製品を提供している企業です。検索エンジンからアプリケーションの提供まで、多岐にわたるサービスを提供しています。

【GAS】スプレッドシート一覧からメール送信

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 397

HUTURI

score 1

 前提・実現したいこと

【GAS】スプレッドシートのメルアド一覧から各々にGmail(メール)を送信する方法について

GoogleAppScript初心者です。 
スプレッドシートファイルのセルには、以下のセルに値を入れておきます。
A1からA26のセルの範囲に下記の通りにメールアドレスの値が入っております。
■例
A1セル :aaaaaaaa@gmail.com
A26セル:zzzzzzzz@gmail.com

B1からB26のセルの範囲に下記の通りにURLのリンクの値が入っております。
■例
B1セル  :aaaaaaaa.html
B26セル :zzzzzzzz.html

上記のA1~A26のメールアドレスの値を取得して
上記のB1~B26のURL(リンク)の値を取得して、
スプレッドシートから各々にメール(GMAIL)を送信する機能を作成しております。

GoogleAppScriptにてGmailを下記の通りにメール送信出来るようにしたいです。
私が書いた拙いソースコードをScriptにて実行すると無効なメールと
エラーメッセージが表示されてしまい、送信できない状況です。
原因が全く分からない為、ご教授の程、よろしくお願いいたします。


宛先:aaaaaaaa@gmail.com 
本文
お疲れ様です。

下記urlご覧ください。
aaaaaaaa.html

 該当のソースコード

    function sub1() {
        var sheet = SpreadsheetApp.getActiveSpreadsheet();
        var url   = sheet.getUrl();
        var id    = sheet.getSheetId();
//列を取得
       var data = sheet.getRange("B1:B26").getValues();
             for (var j =1; < 26; j++) {
//列を取得
         var mail_address = sheet.getRange("A1:A26").getValues();
             for (var i =1; < 26; i++ ) {
        sendMail(mail_address[i], data[j]);
      }
        }
// メールを送る
     function sendMail(mail_address) {
        var subject1 = "○○について";
        var body = "お疲れ様です。。\n下記urlご覧ください。\n";
        var message= data ;
      MailApp.sendEmail({to:mail_address , subject:subject1, body:body + message });
    }
        }

 試したこと

私が書いた拙いソースコードをScriptにて実行すると無効なメールとですと
エラーメッセージが表示されてしまい、送信できない状況です。
原因が全く分からない為、ご教授の程、よろしくお願いいたします。

 補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 2

checkベストアンサー

+1

ループが2重で回っているので、1人の人に何件もメールを送る形になってしまっていますね。
実現したいのは、行ごとにA列のアドレスにB列のURLを送付ですよね。
下記でいかがでしょうか。

function sub1() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet();
  var url   = sheet.getUrl();
  var id    = sheet.getSheetId();
  var data  = sheet.getRange("A1:B26").getValues();

  for (var i in data) {
    sendMail(data[i]);
  }
}

// メールを送る
function sendMail(data) {
  var subject = "○○について";
  var message = "お疲れ様です。。\n下記urlご覧ください。\n";
  var toAddress = data[0];
  var url = data[1];

  MailApp.sendEmail(toAddress, subject, message + url);
}

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2018/07/07 01:35

    ご回答ありがとうございます。
    コードと解説までして頂きまして、ありがとうございました。
    私の環境に合わせてコードを少し変更しましたが、
    ほぼご紹介のコードで思った形となりました。

    自分では思いつかなかったので大変勉強になりました。

    キャンセル

0

該当のソースコードに記載のものはエラーで保存すらできないので、とりあえず↓にしてみてください。(保存はできます)
これでどうダメか教えてください。

    function sub1() {
        var sheet = SpreadsheetApp.getActiveSpreadsheet();
        var url   = sheet.getUrl();
        var id    = sheet.getSheetId();
       var data = sheet.getRange("B1:B26").getValues();
      var mail_address = sheet.getRange("A1:A26").getValues();
        for (var j =0; j< 26; j++) { 
          for (var i =0; i< 26; i++ ) {
            sendMail(mail_address[i], data[j]);
          }
        }
    }
// メールを送る
     function sendMail(mail_address, data) {
        var subject1 = "○○について";
        var body = "お疲れ様です。。\n下記urlご覧ください。\n";
        var message= data ;
      MailApp.sendEmail({to:mail_address , subject:subject1, body:body + message });
    }

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

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

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

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

  • API

    1609questions

    APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

  • Google Apps Script

    957questions

    Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

  • Google

    661questions

    Googleは、アメリカ合衆国に位置する、インターネット関連のサービスや製品を提供している企業です。検索エンジンからアプリケーションの提供まで、多岐にわたるサービスを提供しています。