Gmail로 GAS 달력 예약 알림
20154 단어 GmailGoogle Apps Scripttech
개시하다
내가 속한 연구실은 매주 월요일마다 실험실 구성원들에게 이번 주 계획을 알리는 메일을 보낸다.
예를 들어 세미나의 내용, 윤강의 내용, 담당자가 메일에 실린다.
통지란 우편으로 이뤄지는 것이다.
이 메일의 내용은 매번 사용(GAS)할 때마다 자동으로 생성된다.
또 가장 중요한 예정 내용과 시간 등은 연구실 달력에서 확보해 삽입했다.
본고는 GAS에서 달력 정보를 얻고 메일을 보내는 방법을 총괄하였다.
Google Apps Script
Google Apps Scripts는 JavaScript의 함수로서 트리거를 계기로 서버가 실행되지 않는 환경입니다.
FaaS의 일종이지만 Google Cloud Function과 크게 다릅니다.
먼저, GAS에서 사용할 수 있는 언어는 JavaScript뿐입니다.
그 다음으로 트리거는 마이크로소프트와 수동 등 사용자를 대상으로 하는 것으로 주로 소규모를 대상으로 한다.
그리고 Gmail과 Google Calender 등은 Google 서비스와 쉽게 협업할 수 있는 특징이 있습니다.
이번에는 Google Calender와 Gmail을 연결하는 GAS를 사용합니다.
차리다
다음 사이트에서 새 프로젝트를 만듭니다.
아래 그림과 같이 기본적으로
Google Apps Scripts
의 이름으로 설정되어 있습니다.따라서 프로젝트의 용도를 이해하기 위해
無題のプロジェクト
등 항목의 이름을 변경할 수 있다.편집기에서 함수를 새로 만들고 함수 이름을 지정하고
LabGmail
단추 (또는 Command+R) 를 누르면 함수를 실행할 수 있습니다.이처럼 GAS는 어떤 트리거를 바탕으로 함수를 실행하는 서비스다.
비용이 걱정되지만 무료 서비스가 많아 안심이 된다.
방금 모호하게 썼어요
実行
.트리거를 자유롭게 설정할 수 있다는 것이다.
예를 들어, 시간과 Http(API 요청)를 트리거로 설정할 수 있습니다.
다음 그림에 따라 함수를 지정하면 매일 오후 5, 6시에 함수 테스트를 실행합니다.
따라서 함수를 더 자세히 작성하면 달력과 Google Docoment 등 Google 애플리케이션을 자유롭게 조작할 수 있습니다.
Gmail 및 Calender 발송 예
지금까지의 연구실 우편 송신 이하 코드가 진행됐다.
급하게 써서 예쁘지 않은 점 양해해 주세요.
function sendWeeklyLabEvents() {
function getTime(date){
return Utilities.formatDate(date, 'JST', 'HH:mm');
}
function getDayString(date){
return Utilities.formatDate(date, 'JST', 'YYYY/MM/dd (E)')
}
function getEachEventString(event){
const title = event.getTitle()
const dayString = getDayString(event.getStartTime());
const hourString = `${getTime(event.getStartTime())} ~ ${getTime(event.getEndTime())}`;
const description = `${event.getDescription()}`;
const body = `
${dayString} ${hourString}
${title}
${description}\n
`
return body
}
const calenders = [
CalendarApp.getCalendarById('YourCalenderID'),
]
const today = new Date();
const nextWeekDay = new Date();
nextWeekDay.setDate(nextWeekDay.getDate() + 7);
let all_events = []
for (const calendar of calenders){
const events = calendar.getEvents(today, nextWeekDay);
all_events = all_events.concat(events);
}
all_events.sort((a, b) => {
return a.getStartTime() - b.getStartTime()
});
const eventsBody = all_events.reduce((previous, event) => {
return previous + getEachEventString(event);
}, ``);
const emailBody = `
研究室の皆様.
お世話になっております.
研究室の今週の予定について通知いたします.
===============================================
${eventsBody}
===============================================
このような予定になっております.
ご確認のほどよろしくお願いいたします.
`;
const addresses = [
'[email protected]',
'[email protected]',
'[email protected]',
];
MailApp.sendEmail({
to: addresses.join(","),
subject: '今週のゼミの予定について(リマインド)',
body: emailBody
})
}
코드의 설명은 대체로 다음과 같다.何らかのトリガー
함수를 시간 기반 트리거로 설정합니다.이에 따라 매주 우편물이 발송된다.
sendWeeklyLabEvents
에서 연구실 달력 대상을 획득한다.이 ID는 다음 그림과 같이 캘린더별 세부 내용
CalendarApp.getCalendarById('YourCalenderID')
을 나타냅니다.다음 코드는 먼저 달력 배열에서 달력 대상을 가져옵니다.
그리고
カレンダー ID
에서 달력에서 일주일 동안 예정된 이벤트를 꺼내 정렬합니다.이 처리는 Reduce를 사용하면 매우 수월할 것이다.
그리고sort 함수에 던지고 시작 시간 순서대로 다시 배열합니다.
let all_events = []
for (const calendar of calenders){
const events = calendar.getEvents(today, nextWeekDay);
all_events = all_events.concat(events);
}
all_events.sort((a, b) => {
return a.getStartTime() - b.getStartTime()
});
다음 코드는 가져온 이벤트를 문자열에 연결합니다.getEvents
함수는 제목, 날짜, 세부 사항을 문자열로 되돌려줍니다. const eventsBody = all_events.reduce((previous, event) => {
return previous + getEachEventString(event);
}, ``);
이후 MailApp으로 지정한 메일 주소를 배열에 보냅니다.이러한 MailApp과 CalenderApp 등이 실행을 시도하면 구글의 통상적인 인증 화면이 나오기 때문에 OK를 눌러야 한다.
이렇게 하면 매주 달력 계획을 대체적으로 발송할 수 있다.
지금까지는 모두 월요일 오전 5시께 발표됐다.
주의점
구글은 미국의 기업이니 당연히 JST가 아니다.
이를 위해서는 편집
getEachEventString
이 필요합니다.왜 applscript가json은 기본적으로 편집기에 표시되지 않기 때문에 아래 그림처럼 표시됩니다.
그 다음에 편집기입니다. 다음과 같이 json을 설정하면 JST입니다.
{
"timeZone": "Asia/Tokyo",
"dependencies": {
},
"exceptionLogging": "STACKDRIVER",
"runtimeVersion": "V8"
}
최후
매주 달력을 Gmail로 보낼 예정인 GAS를 정리했다.
이번 코드는 다음과 같은 결점이 있다.
이번엔 4학년 사람이 메일을 쓰는 것 같아요.(세대교체)
오리지널 메일 발송과 서비스가 기대됩니다.
Reference
이 문제에 관하여(Gmail로 GAS 달력 예약 알림), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/ganariya/articles/gas-mail-auto-deliver텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)