はじめに
akamiと申します。趣味で短歌をやっていて、新聞歌壇に応募しています。
新聞歌壇にはメールで短歌を送れば応募できるのですが、これが意外と難しい……。
自分が送っている日経歌壇は、一週間に3首までという制約があり、それなら毎週固定の曜日にメールを送ろう!! とは思うのですが……。
送ったか送ってないか思い出せないし、送った歌も管理できない……。
よし、なら自動化しよう!!
使うもの
- Googleスプレッドシート
- 短歌の管理に使用
- GAS
- 起動時、短歌を取得し、メールを送信する
Googleスプレッドシートを準備する
Googleスプレッドシートを作成する
1行目に各行の役割を書いておく。
「あ」「い」「う」など書いてあるところは、使用時は短歌に置き換えてください。
※注意:メールの送信元となるGoogleアカウントで作成してください。
GoogleスプレッドシートのIDを取得する
作成したGoogleスプレッドシートのURLからIDを取得する
https://docs.google.com/spreadsheets/d/[この部分がID]/edit#gid=0
GAS(Google App Script)を作成
GASのページにアクセスし、「新しいプロジェクト」を選択
下記ソースコードを貼り付ける
function myFunction() {
// スプレッドシートのシート名を指定します
var sheetName = "シート1"; // シート名を変えている場合はここも書き換える
var textColumn = 1; // テキスト列の列番号(A列なら1)
var statusColumn = 2; // 状態列の列番号(B列なら2)
var dateColumn = 3; // 送信日列の列番号(C列なら3)
// スプレッドシートを取得します
var ss = SpreadsheetApp.openById("[スプレッドシートのID]");
var sheet = ss.getSheetByName(sheetName);
var dataRange = sheet.getDataRange();
var values = dataRange.getValues();
// 未送信の行を抽出
var latestRows = [];
for (var i = 1; i < values.length; i++) {
if (values[i][statusColumn - 1] === "") {
latestRows.push(i + 1); // 行番号を1-indexedから0-indexedに変換
if (latestRows.length >= 3) break; // 3件以上見つかったらループを抜ける
}
}
Logger.log(latestRows);
// テキストがすべて空欄でないかチェック
var textNotEmpty = latestRows.some(function(row) {
return values[row - 1][textColumn - 1] !== ""; // テキストが空欄でない場合はtrueを返す
});
// テキストがすべて空欄でない場合のみメール送信
if (textNotEmpty) {
// メール本文の作成
// \nは改行記号です。メール本文の内容は適当にカスタマイズしてください。(内容変えたり行数減らしたり増やしたり)
var body1 = "メール本文1行目\n" +
"メール本文2行目\n" +
"メール本文3行目\n" +
"メール本文4行目\n" +
"メール本文5行目\n" +
"\n" +
"短歌:\n";
var body2= "\n\n以上、よろしくお願い致します。\n"; // テキストの後の部分
var emailBody = body1; // メール本文の初期化
// 最新の3件のテキストをメール本文に追加
latestRows.forEach(function(row) {
var text = values[row - 1][textColumn - 1];
emailBody += text + "\n"; // テキストをメール本文に追加
});
emailBody += body2; // テキストの後の部分をメール本文に追加
var recipient1 = "[送り先のメールアドレス]"; // 送信先のメールアドレスを指定
var subject1 = "メールの件名をここに記入";
MailApp.sendEmail(recipient1, subject1, emailBody);
var recipient2 = "[転送先のメールアドレス]"; // 転送先のメールアドレスを指定
var subject2 = "転送:メールの件名をここに記入";
MailApp.sendEmail(recipient2, subject2, emailBody);
// 送信日を記入し、状態を「済」に更新
var today = new Date().toLocaleDateString(); // 今日の日付を取得
latestRows.forEach(function(row) {
sheet.getRange(row, dateColumn).setValue(today);
sheet.getRange(row, statusColumn).setValue("済");
});
}
}
実行ボタンを押してみる
最初は[送り先アドレス]と[転送先のメールアドレス]に自分のアドレスを設定してテストしてみましょう。
※実行ボタンが押せない場合はCtrl+sで保存してから押してみてください
すると、「承認が必要です」ダイアログが出ます。
「権限を確認」を押す。
自分のGoogleアカウントを選択し、次に進む。
「詳細」を押す
「[プロジェクト名](安全ではないページ)に移動」を押す。
スプレッドシートへのアクセス(書き換えたり削除したり作成したり)、メールを送信したりを許可しますか?
という確認のダイアログです。
問題なければ「許可」を押します。
これでGASを実行できるようになりました。
再度実行を押します。
実行結果(GAS)
実行結果(Googleスプレッドシート)
実行結果(Gmail)
GASのトリガーを設定する
実行して問題なければ、トリガーを設定します。
「+新しいトリガーを追加」からトリガーを追加する。
今回は、週に1回実行したいので、毎週金曜日の午後4時〜5時に実行されるように設定する。
おわり
これで、スプレッドシートさえ更新しておけば自動で週に1度送ってくれるはずです。
ちなみに、短歌が1~2首の場合は1~2首で送付、送る短歌が0首のときはメールが送信されない動作になっています。
同じ悩みを持つ方の役に立てれば幸いです。