Google управлява една от най-големите онлайн платформи за електронна поща. Gmail е платформа за електронна поща с много функции и също така е много разширяема, като се има предвид изключително програмируемата платформа, на която работи.

програма за планиране на gmail

Днес пишем имейл планировчик за gmail. Вие посочвате часа и вашата поща се изпраща на бъдеща дата, без да е необходимо ръчно да щракнете върху бутона за изпращане.

Има много gmail скриптове за планиране там. И тук ще научим и внедрим един за себе си. Да се ​​залавяме за работа.

основна идея

Времето на доставката ще бъде включено в темата. На всеки час скриптът ще търси имейли с определен етикет. Ако пощата трябва да бъде изпратена, тя отива, в противен случай ще стои там във вашите чернови, чакайки времето за доставка.

Тази система е проектирана да бъде вградена в работния процес на Gmail. По този начин все още можете да работите върху вашите чернови, да обработвате имейлите нормално, както бихте направили, без да се налага да се забърквате с други интерфейси.

За този проект ще работим върху скрипта на приложението Google. Това е програмируем интерфейс, базиран на javascript, който поддържа взаимодействието с различни приложения на Google.

подробностите

Има няколко интерфейса за имейл платформата. Конкретният, който ще използваме в този проект, е интерфейсът GmailApp, достъпен чрез Google App Script.

Sidetrack: MailApp може да се използва само за изпращане на имейли. GmailApp, от друга страна, се използва за достъп до вашата поща (чернови, етикети и т.н.).

основната структура

GmailApp има 2 основни нива на абстракция — имейл „нишки“ и „съобщения“. Имейл нишките са основният начин, по който ще използваме GmailApp за идентифициране и категоризиране на поща. Например, резултатите от търсенето ще върнат пощенски нишки, а етикетите ще бъдат маркирани с конкретни нишки.

Тези нишки съдържат съобщения. Всеки обект на съобщение ще бъде отделните имейли (получени, изпратени или чернови). Всяко съобщение ще съдържа типичните полета - тема, до, копие и др

За по-пълна представа как работи цялата структура на GmailApp, прочетете набързо „документацията“. Продължавай, все още ще бъда наоколо, когато се върнеш.

кодът

формиране на низ от дати

Тази част от кода заема няколко реда. Основната причина е, че няма функция за лесно преобразуване на датата във формат YYYYMMDD.HHmm. Този раздел от кода включва функция за допълване за добавяне на 0 към датата за правилния формат.

Този конкретен формат на датата е избран, за да ни позволи да проверим клеймото с помощта на просто сравнение на низове. Това е и причината да имаме дефинирани дата и час в предната част на темата. (Друга причина е, че е по-лесно да видите в потребителския интерфейс на Gmail с един поглед кога всяко писмо трябва да бъде изпратено)

основна логика

Търсим всички имейл нишки с етикет schedule. След това за всяка нишка ще проверим всички съобщения за тези чернови на имейл. Това е мястото, където идва низът с дата.

Ако темата на съобщението е по-малка от текущата дата, ние ще изпратим съобщението. Но защо препращаме съобщението, вместо просто да го изпратим?

Програмируемият интерфейс няма такава поддръжка за изпращане на чернови. Вместо това заобикаляме това, като създаваме ново съобщение със същите подробности и съдържание. След като изпратим съобщението, ние ще преместим оригиналното съобщение и ще премахнем етикета от нишката.

дизайнерски съображения

Има няколко случая, които сме взели предвид в горния код.

наличие на множество чернови

Какво става, ако има няколко чернови на съобщения в нишка, която е маркирана като график? Има някои случаи, в които искате да изпратите конкретен отговор на различни хора.

Оттук и броячът в основната логика. Всяка чернова на съобщение добавя едно към брояча, а всяко изпратено съобщение премахва едно.

Така че в случай, че един от тях е изпратен, оставяйки един все още в чернова, етикетът все още ще бъде запазен и скриптът ще продължи да обработва нишката в следващия кръг.

проектът все още не е завършен

Да приемем, че сте написали черновата си наполовина, маркирали сте нишката с етикета schedule, но не сте я завършили, така че не сте поставили дата в темата, какво тогава?

По природа на сравнението на низове числата са на първо място. Тъй като нашият низ от дати е изцяло от числа, тема без формат на датата отпред винаги ще бъде по-голяма (по отношение на сравнение на низове).

Тема без валиден формат на датата отпред няма да задейства действието за изпращане. Така че няма да изпращате незавършени имейли.

Забележка: това е при предположението, че темата на вашия имейл не започва с куп числа. Това предположение важи доста добре за целите на ежедневните имейли.

бъг: темата съдържа клеймо за време

Използвам го от известно време и изглежда, че когато се отговори на насрочения имейл, клеймото за време ще бъде включено в темата на нишката на имейла. Но след известно отстраняване на грешки открих проблема и решението е просто едноредово — msg.markRead().

Защо тази функция markRead() е толкова важна? Темата на нишката се определя от последното съобщение в нишката на имейла. В предишна ревизия на скрипта просто преместих съобщението в кошчето. Тъй като непрочетената изтрита чернова се разпознава като последното съобщение в нишката, нишката ще вземе темата с клеймото за време.

Чрез маркиране на отхвърленото съобщение като прочетено, изпратеното имейл съобщение (препратеното съобщение) се разпознава като последното в нишката. Това коригира проблема с времето, което се показва във входящата ви поща.

Е… не е толкова лесно

Изглежда, че четенето не е достатъчно. Трябва да изтриете цялото съобщение, за да сте сигурни, че то не разпознава черновата като част от нишката. Маркирането като прочетено работи временно. Но след известно време темата се връща към черновата.

GmailApp не поддържа изтриване на съобщения (кошчето е преместване в кошчето, изтриването е изтриване за постоянно). Следователно вместо това ще използваме API на Gmail с много повече функции (този, който използвахме преди, е GmailApp).

За да изтриете публикацията за постоянно, това е конкретното извикване на функция, което ще използваме Gmail.Users.Messages.remove('me', msg.getId());. За да видите повече подробности относно пълния API на Gmail, можете да прегледате документацията.

Забележка: Ако имате проблеми с изпълнението на кода, вероятно трябва да активирате предварителните услуги. Можете да видите инструкциите в раздела за предварителни услуги.

изпълнявайки го

Последната и най-важна стъпка ще бъде да планирате скрипта да се изпълнява на редовни интервали, за да продължите да проверявате дали има някаква поща за изпращане.

Това се прави под Edit > Current Project's trigger в менюто на скрипта. Създайте нов тригер, базиран на времето. Сега функцията ще работи на фиксиран интервал от време.

Прецизността на тази система зависи от това каква честота задавате да се изпълнява скриптът. Ако нямате нужда системата да бъде твърде прецизна, може би изпълняването на скрипта ежечасно ще свърши работа. Въпреки това можете да настроите скрипта да се изпълнява всяка минута (най-висока честота за задействане, базирано на времето).

Ако искате да разполагате с пълна с функции система за планиране на имейли, можете да разгледате наличните („Бумеранг“, „планировчик на имейли“ и т.н.).