GASで、メールを送信するプログラムを作っています。
spreadsheet上に空欄があれば、popupAttached(関数)により処理が止まるようにしたいのですが、どうも機能していません。一度、個々のプログラムで動作確認してから関数として入れています。(途中で元のプログラムから変更していますが)
送信先のメールアドレスを一か所、空欄にしているのですが、動いておらず
Exception: メールを送信できませんでした: 受信者が指定されていません
と表示されます。タイトルも空欄にして試したのですが、エラーとなりませんでした。
GAS
1function mail(){ 2 3 /*下準備 spreadsheet、document,driveの指定を行う*/ 4 const sheet = SpreadsheetApp.getActiveSheet(); //spreadsheetをアクティブ化 5 const lastRow = sheet.getLastRow(); //最終行の取得 6 const document_id = 'xxxxxxx'; //dcumentのid 7 const doc = DocumentApp.openById(document_id); 8 const docText = doc.getBody().getText(); 9 const drive_id ='xxxxxxxx' //ファルダ―ID 10 const folder = DriveApp.getFolderById(drive_id); //driveのフォルダー指定 11 12 13 /*spreadsheetData*/ 14 const todayDate = sheet.getRange('H1').getValue();//NOW()関数で自動入力 15 const senderName = sheet.getRange('H2').getValue();//差出⼈名 16 const subject = sheet.getRange('H3').getValue();//タイトルが空であればエラーを吐く。(関数で判断) 17 const CC = sheet.getRange('H4').getValue();//CCの指定 18 const BCC = sheet.getRange('H5').getValue();//BCCの指定 19 const mailReplayIsok = sheet.getRange('H6').getValue();//replayの有無 20 const mailReplayTo = sheet.getRange('H7').getValue();//replay先の変更 21 const extention = sheet.getRange('H8').getValue();//ファイルの拡張子指定 22 const arrayData = ['B','C','D','F']; 23 24 try{ 25 /*メール送信前にspreadsheetに抜けがないかの確認。もし、抜けていたら。処理を終了させる。*/ 26 for(let j = 0; j < 4; j++){ 27 let contentArr = arrayData[j] + ':' + arrayData[j] 28 let Length = sheet.getRange(contentArr).getValues().filter(String).length; 29 let zero =Istrue(Length,lastRow) 30 if(zero ==0); 31 else{ 32 for(;Length < lastRow; Length++){ 33 let ans = sheet.getRange(j + 2, Length).isBlank(); 34 if(ans =='true'){ 35 popupAttached(arrayData[j] + Length,'を入力してください。'); 36 } 37 } 38 } 39 } 40 41 /*添付ファイルと拡張子の両方が入力されているか?*/ 42 XOR(recognize(sheet.getRange(3, 6).getValue()),recognize(extention)); 43 44 /*メール送信。 forLoopでdocumentの置換を行い、個々のdocument作成。その後送信。*/ 45 for(let i = 2; i <= lastRow; i++){ 46 /*spreadsheetからデータを取得*/ 47 const lastName = sheet.getRange(i, 2).getValue(); //姓 48 const firstName = sheet.getRange(i, 3).getValue(); //名 49 const score = sheet.getRange(i, 4).getValue(); //通知する点数 50 const recipientName = sheet.getRange(i, 5).getValue();//宛先 51 const attached = sheet.getRange(i, 6).getValue(); //添付ファイル 52 const body = docText //置換置換処理 53 .replace('{送信日}',todayDate) 54 .replace('{姓}',lastName) 55 .replace('{名}',firstName) 56 .replace('{点数}',score); 57 const attachedFile = attached + '.' + extention 58// const data = folder.getFilesByName('attachedFile').next().getBlob(); 59 60// const options = {name: senderName, cc: CC,bcc: BCC,noReply: mailReplayIsok,replyTo: mailReplayTo};//差出人、CC、BCC、replayの有無、replay先の変更を設定 61 GmailApp.sendEmail(recipientName,subject,body);//メール送信 ,options 62 } 63 }catch(e){ 64 console.error("エラー:", e.message); 65 } 66} 67 68 69function recognize(value){ //空であるか確認。 70 if(value == null){ 71 return 1; 72 }else{ 73 return 0; 74 } 75} 76 77 78function XOR(x, y){ 79 const ans = x*1-y*1; 80 if(ans == 0){ 81 return ; 82 }else{ 83 if(x == 0){ 84 popupAttached('添付ファイル名','を入力してから実行ボタンを押してください。n\添付ファイルを送信するには、ファイルの拡張子','添付ファイル名の両方の入力が必要です。'); 85 }else{ 86 popupAttached('ファイルの拡張子','を入力してから実行ボタンを押してください。n\添付ファイルを送信するには、ファイルの拡張子','添付ファイル名の両方の入力が必要です。'); 87 } 88 } 89} 90 91 //ポップアップ警告処理。タイトル 92function popupTitle(){ 93 const rezult = Browser.msgBox("タイトルが入力されていません。\nタイトルなしで送信されますか?", Browser.Buttons.YES_NO); 94 if(rezult == "yes"){ 95 const flag = Browser.msgBox("本当によろしいでしょうか?", Browser.Buttons.YES_NO); 96 if(flag == "no"){ 97 Browser.msgBox("タイトルを再入力してから実行してください。", Browser.Buttons); 98 throw new Error('終了します。タイトルのミス'); 99 }else;//実行される。 100 }else{ 101 Browser.msgBox("タイトルを再入力してから実行してください。", Browser.Buttons); 102 throw new Error('終了します。タイトルのミス'); 103 } 104} 105 106 //ポップアップで終了のお知らせ。 107function popupAttached(message1, message2){ 108 Browser.msgBox( message1 + 'がemptyです。n\' + message1 + message2, Browser.Buttons); 109 throw new Error('終了します' + message1 +'のミス'); 110} 111 112 113function Istrue(sheet,lastraw){ 114 if(sheet == lastraw ) { 115 return 0; 116 }else{ 117 return 1; 118 } 119}