Gmailでのメール一括送信スクリプト(スプレッドシートとドキュメントを使って定例文送信)

Googleドキュメントにメールの定例文書く

{名前} 様

お世話になっております。

云々


------------------
株式会社shikaku

URLのIDをメモっておく


Googleスプレッドシートに以下のような感じでリスト作成
f:id:shikaku:20190420215354p:plain

ツール>スクリプトエディタで以下のようにコード書く

function SendMail(){
  
  var MySheet=SpreadsheetApp.getActiveSheet(); //シートを取得
  var RowSheet=MySheet.getDataRange().getLastRow(); //シートの最終行を取得
  var ColSheet=MySheet.getDataRange().getLastColumn(); //シートの最終列を取得
  var StrFrom="test@test.jp"; //差出メールアドレス
  var StrSender="差出人です"; //差出人名
 
  for(var i=2;i<=RowSheet;i++){
    
    var StrName=MySheet.getRange(i,2).getValue(); //名前
    var StrTo=MySheet.getRange(i,3).getValue(); //送付するアドレス
    
    if( StrTo == "" ){
      break;
    }
    
    var StrBcc="bcc@test.jp"
    var StrSubject="メールタイトル"
    var SendDoc="1F6L5jm9WQNOMicSI_5XYFhogehoge4XnuAg-48kY4Y8es"; //ドキュメントID
    var DocMail=DocumentApp.openById(SendDoc); //ドキュメントIDからドキュメントを取得
    var StrDoc=DocMail.getBody().getText(); //ドキュメントの内容を取得
    var StrBody=StrDoc.replace(/{名前}/,StrName); //名前を置換
    
    GmailApp.sendEmail(
      StrTo, //toアドレス
      StrSubject,  //表題
      StrBody, //本文
      {
        bcc: StrBcc,    //BCCアドレス 
        from: StrFrom, //fromアドレス
        name: StrSender //差出人
      }
    ); //Gmailで送信する命令
  }
}

あとは▶で実行。

最初はセキュリティの警告出るけど、許可してあげて下さい。

Google Home のデータを初期化(FDR)する

手放す前に初期化は必須。

Google Home miniだとすごくわかりにくが電源コード指すとの下辺りにリセットボタンがあるので長押し。

するとGoogle Homeからリセットする旨を聞いてくるので、それでも長押しを続ける。
そのうち再起動する。

ワイメールからメルマガ送信したら届かない問題

4/17現在、ブラックリストに載ってしまってワイメールからメールが届かない問題発生中。

メルマガ配信ドメインのIP調べる

こちらから

各種ブラックリストに載ってないかチェック

こちらでチェックできる。

BARRACUDAに直訴

こちらを参考にしましょう

Gmailに直訴

手順はこちら。

SMTPエラーと送信したメールのヘッダが必要。

まともに届くメールアドレスとgmailアドレス宛にダミーのメルマガからダミーメールを送信。
ワイメールの配信履歴一覧から対象メールの「件名」をクリック。
「受信先又は転送先のアカウントが存在しない」の数字部分をクリック
メールログという小さいリンクがあるのでクリック
するとログが表示されるので、これをSMTPエラーとして貼り付ける。

送信したメールのヘッダは、まともに受信できるメールで受信してヘッダ表示して貼り付ける。

C#でタイマにより一定時間間隔で処理を行う

// formstimer.cs

using System;
using System.Windows.Forms;

public class FormsTimerTest {

  static void Main() {
    FormsTimerTest ftt = new FormsTimerTest();
    ftt.Run();
  }

  public void Run() {
    Timer timer = new Timer();
    timer.Tick += new EventHandler(MyClock);
    timer.Interval = 1000;
    timer.Enabled = true; // timer.Start()と同じ

    Application.Run(); // メッセージループを開始
  }

  public void MyClock(object sender, EventArgs e) {
    Console.WriteLine(DateTime.Now);
    // 出力例:
    // 2005/11/08 19:59:10
    // 2005/11/08 19:59:11
    // 2005/11/08 19:59:12
    // ……
  }
}

C#のProgressBarバーのスタイルを変更する

StyleプロパティにProgressBarStyle列挙体の値を指定します。

  • Blocks
    • 分割されたブロックの数を増加させていくことで進行状況を示す
  • Continuous
    • バーのサイズを滑らかに連続的に増加させていくことで進行状況を示す
  • Marquee
    • ProgressBar の上を絶え間なくブロックがスクロールすることで進行状況を示す