Software for Email notifications from Gmail (maybe Protonmail)?
FossaPup.
Is there a lightweight program for that? Since the Pale Moon Gmail extension became inactive, and who knows if it will come back.
Discussion, talk and tips
https://forum.puppylinux.com/
FossaPup.
Is there a lightweight program for that? Since the Pale Moon Gmail extension became inactive, and who knows if it will come back.
@puppy_apprentice - I just need something lightweight, that works well in FossaPup; do you have a recommendation?
@puppy_apprentice - I don't know how to do that. And these give notifications?
Also - will be good if the program can be added to start.
I don't have Google account. If those scripts will work for you - you get list of messages from console, there will be no problem to make gui app from this script using gtkdialog that will check your account periodically and show proper notification.
PA, mate - there's no testing without a Gmail account.
==
A-Man.. Want something lightweight that works well in FossaPup?
Great!
You first need to go into Gmail and setup an "app password" using Pups hostname.
Once done, dwnld and install this txz pkg. Paul knows his sh!t.
Once opened from your menus Network, you'll find a tray item.
Rt-clk, go to Accounts.
Give it a name, load your FULL Gmail user@gmail.com, "AppPasswd" and OK.
Set your prefs via the same rt-clk method.
If you've done everything right, hoovering over GM's QuickCheck tray icon will pop-up your list of unread emails.
Won and Done!
This is what I use to check gmail.
It will only list the unread subjects & authors, not the whole email.
You'll need something else to read the actual email.
Code: Select all
#!/bin/bash
#Filename: gmail
#Description: Fetch gmail tool
username="usernamehere@gmail.com"
password="passwordhere"
SHOW_COUNT=5 # No of recent unread mails to be shown
echo
curl -u $username:$password --silent "https://mail.google.com/mail/feed/atom" | \
tr -d '\n' | sed 's:</entry>:\n:g' |\
sed 's/.*<title>\(.*\)<\/title.*<author><name>\([^<]*\)<\/name><email>\([^<]*\).*/Author: \2 [\3] \nSubject: \1\n/' | \
head -n $(( $SHOW_COUNT * 3 ))
# gmail
Author: me [blank@gmail.com]
Subject: virus scan results
Author: Walmart [help@walmart.com]
Subject: You placed an order
Author: Clara at Boxdo [support@boxdo.co]
Subject: Your order #xxxxxx has been delivered
Author: SiriusXM [no-reply@e.siriusxm.com]
Subject: NEW NOTIFICATION. Enclosed Your Next ⑦ Days of Listening
Author: Clara at Boxdo [support@boxdo.co]
Subject: Your order #xxxxxx is in transit
@ThruHammer - I don't understand what is "Pups hostname".
Either open your Internet icon from the tray, Interfaces / Hostname or type it into a terminal.
I didn't understand that, but never mind ― I don't want to use the "2-Step Verification" thing; it's a PITA. I thought it's going to be easy, cause I had Gmail Notifier in Pale Moon. I'll just keep Gmail open in my second browser - SeaMonkey; and maybe there will be an extension some day.
Thanks.
Type "hostname" into a terminal.
Google needs to identify the device you'll be connecting with (puppypcxxxxx).
After initial setup there IS NO two-step verification. Simply hoover and read.
Actually... I was able to install X-Notifier; the following file →
I should use "Gmail™ Notifier (restartless) 0.4.4.1" ― but I can't find it online.
It requires the following script:
Code: Select all
/*********************************************************** Gmail ***********************************************************/ var name="Gmail.fix"; var ver="2017-05-11"; var supportInboxOnly=true; var supportShowFolders=true; var supportIncludeSpam=true; function init(){ this.initStage=ST_PRE; this.loginData=["https://accounts.google.com/ServiceLoginAuth?service=mail", "Email","Passwd","PersistentCookie=yes"]; this.baseURL="https://mail.google.com/mail/"; this.viewDomain="(mail|accounts).google.com"; this.dataURL=this.baseURL; this.viewURL=this.baseURL; } function getIconURL(){ return "https://ssl.gstatic.com/ui/v1/icons/mail/images/favicon2.ico"; } function checkLogin(aData){ switch(this.stage){ case ST_CHECK: this.getHtml(this.baseURL); return false; case ST_CHECK+1: var fnd=aData.match(/\"https:\/\/accounts.google.com\/Logout/); if(fnd){//logged in this.stage=ST_LOGIN_RES+1; return this.process(aData); }else{ this.cookieManager.clear(); this.stage=this.initStage; return this.process(""); } } this.onError(); return true; } function isLoggedIn(aData){ var reg=new RegExp("\"\\/mail(?:\\/u\\/(\\d+))?\",\\S+?,\"(\\S+?)\""); var fnd=aData.match(reg); var fnd2=aData.match(/GM_ACTION_TOKEN="(\S+?)"/); if(fnd&&fnd2){ this.viewURL=this.baseURL+(fnd[1]?"u/"+fnd[1]:""); this.dataURL=this.viewURL+"?ui=2&ik="+fnd[2]+"&at="+fnd2[1]+"&view=tl&start=0&num=25&rt=c&as_has=is%3Aunread&as_subset="+(this.inboxOnly?"inbox":"all")+"&search=adv"; var fnd3=aData.match(/"sx_iosc"\s*,\s*"(\S+?)"/); if(fnd3){ if((fnd3[1]=="^u|"||fnd3[1]=="^t|"))this.useInboxCount=true; if(fnd3[1].match(/\^smartlabel_personal\|\S+/))this.smList=fnd3[1].split("|"); } var fnd4=aData.match(/"ix_ioiut"\s*,\s*"(\S+?)"/); if(fnd4&&fnd4[1]=="1")this.useInboxCount=true; this.UI=2; return 1; } //basic HTML fnd=aData.match(/<base href="(\S+?)">/); if(fnd){ this.viewURL=fnd[1]; this.dataURL=fnd[1]+"?s=q&q=is%3Aunread"+(this.inboxOnly?"+in%3Ainbox":""); this.UI=0; return 1; } return -1; } function process(aData,aHttp) { //dout(this.user+" "+this.stage); if(this.debug)dlog(this.id+"\t"+this.user+"\t"+this.stage,aData); switch(this.stage){ case ST_PRE: try{ var s=this.main.prefBranch.getCharPref("accounts.["+this.id+"#"+this.user+"].cookie"); s=s.split("\t"); this.cookieManager.addCookies(s[0],s[1]); }catch(e){} this.getHtml("https://accounts.google.com/ServiceLogin?service=mail&continue=https%3A%2F%2Fmail.google.com%2Fmail%2F&rip=1&nojavascript=1"); return false; case ST_PRE_RES: var form=this.getForm(aData,"gaia_loginform",true); if(form){ this.stage=ST_LOGIN; this.getHtml("https://accounts.google.com/signin/challenge/sl/password",this.loginData[LOGIN_POST]+"&"+form[1]); return false; } break; case ST_LOGIN_RES: var form=this.getForm(aData,"challenge",true); if(form){//2-step verification this.form=form; this.stage=ST_LOGIN_RES+2; this.openAuthDialog(this.id,this.user,null); return true; } ++this.stage; case ST_LOGIN_RES+1: if(this.isLoggedIn(aData)==1){ if(this.enableCategory||this.smList){ var fnd=aData.match(/\["sld",\[(\[[\s\S]+?\])\]/); if(fnd){ var re=/\["(.+?)"\s*,\s*"(.+?)"/g; var o; this.smartlabel={}; while ((o = re.exec(fnd[1])) != null){ var fn=unescape(o[2].replace(/\\u/g,"%u")) this.smartlabel[o[1]]=fn; } } } this.stage=ST_DATA; } break; case (ST_LOGIN_RES+2)://2-step verification if(aData){ this.getHtml("https://accounts.google.com/"+this.form[0],this.form[1]+"&Pin="+encodeURIComponent(aData)+"&TrustDevice=on"); delete this.form; return false; } break; case (ST_LOGIN_RES+3)://2-step verification var ck=this.cookieManager.findCookieString("accounts.google.com","SMSV"); if(ck){ this.main.prefBranch.setCharPref("accounts.["+this.id+"#"+this.user+"].cookie",aHttp.URI.spec+"\t"+ck); } this.stage=ST_LOGIN_RES; return this.process(aData,aHttp); } return this.baseProcess(aData,aHttp); } function getCount(aData){ var fnd; if(this.UI==2){ if(this.inboxOnly)fnd=aData.match(this.useInboxCount||this.enableCategory==2?/"ld",\[[\S\s]*?\["\^i",(\d+)/:/"ld",\[\["\^ig?",(\d+)/); else fnd=aData.match(/\["ti",.+?,(\d+)/); if(fnd){ if(this.includeSpam){ var fnd2=aData.match(/"ld",\[\[[\S\s]+?"\^s",(\d+)/); if(fnd2){ var spam=parseInt(fnd2[1]); if(spam>0){ this.spam=spam; return parseInt(fnd[1])+(this.includeSpam==2?this.spam:0); } } } return fnd[1]; }else return -1; }else{ var spam=0; if(this.includeSpam){ fnd=aData.match(/<a href="\?s=m"\s*\S+?\((\d+)\)/); if(fnd){ spam=parseInt(fnd[1]); if(spam>0){ this.spam=spam; if(this.includeSpam!=2)spam=0; } } } if(this.inboxOnly){ fnd=aData.match(/<\/h2>\s*<tr>\s*<td[\s\S]+?<a[\s\S]+?>.+?(?: \s*\(\s*(\d+)\s*\))?\s*</); return fnd?((fnd[1]?parseInt(fnd[1]):0)+spam):-1; }else{ fnd=aData.match(/nvp_bbu_go[\s\S]+?<\/td>([\s\S]+?)<\/table>/); if(fnd){ var n=0; var fnd2=fnd[1].match(/<b>(\S+)<\/b>(.+?)<b>(\d+)<\/b>(.+?)<b>(\S+)<\/b>/); if(fnd2){ if(fnd2[2].indexOf("-")!=-1)n=isNaN(parseInt(fnd2[5]))?200:fnd2[5]; else if(fnd2[4].indexOf("-")!=-1)n=isNaN(parseInt(fnd2[1]))?200:fnd2[1]; } return parseInt(n)+spam; }else return -1; } } } function getData(aData){ var obj={}; if(!this.showFolders)return obj; var ar=[]; var fnd; if(this.UI==2){ var d=aData; fnd=null; var list=[]; while(fnd=d.match(/\n(\d+?)(\n([\S\s]+))/)){ d=fnd[2].substring(0,fnd[1]); d=d.replace(/\[\s*,/g,"[null,").replace(/,\s*(?=,)/g,",null").replace(/,\s*\]/g,",null]"); var o=JSON.parse(d); list=list.concat(o); d=fnd[3]; } fnd=null; for(var i=0;i<list.length;i++){ if(list[i][0]=="ld"){ fnd=list[i]; break; } } if(fnd){ if(fnd[2]){ var t=fnd[2]; for(var i=0;i<t.length;i++){ var o=t[i]; if(o[1]>0){ ar.push({id:o[0],count:o[1]}); } } } if(this.enableCategory||this.smList){ if(fnd[4]){ var t=fnd[4]; var slb={"social":"social","promo":"promotions","notification":"updates","group":"forums"}; for(var i=0;i<t.length;i++){ var o=t[i]; if(this.enableCategory||this.smList.indexOf(o[0])!=-1){ if(o[1]>0){ ar.push({id:"#category/"+slb[o[0].substring(12)],title:this.smartlabel?this.smartlabel[o[0]]:o[0],count:o[1]}); } } } } } } }else{ fnd=aData.match(/<td class="?lb"?>([\s\S]+?)<a class="ml"/); if(fnd){ var re=/<a href="(\S+?)">\s*<font[\s\S]+?>(.+?)(?: \s*\(\s*(\d+)\s*\))?\s*</g; var o; while ((o = re.exec(fnd[1])) != null){ if(parseInt(o[3])>0){ ar.push({id:o[2],count:o[3]}); } } } } if(this.spam!=null){ ar.push({id:"Spam",count:this.spam}); delete this.spam; } if(ar)obj.folders=ar; return obj; } function getViewURL(aFolder){ if(aFolder){ if(aFolder=="Spam"){ if(this.UI==2)return this.viewURL+"#spam"; else return this.viewURL+"?s=m"; } if(this.UI==2){ if(aFolder.indexOf("#category/")==0)return this.viewURL+aFolder; else return this.viewURL+"#label/"+encodeURIComponent(aFolder); }else return this.viewURL+"?s=l&l="+encodeURIComponent(aFolder); } return this.viewURL; }
Does anyone know how to add the script? I probably didn't do it correctly. I made a file called Gmail.js(cause it recognizes these files); and put the script into it, and added that; it doesn't work.
No.
*YOU* - SHOULD GO WITH THE INSTRUCTIONS I TOOK THE TIME TO WORK THROUGH SO YOU YOUR REQUEST COULD BE FULFILLED.
If there's something I've written that you DON'T understand, SPEAK UP.
@ThruHammer - OK, works. And there really isn't the 2-step etc, every time; it was because I logged-in with Chromium for the first time. Well, there is a reason for my name...
Thank you.
It works? Really?
Drop us a screenshot!
@ThruHammer - actually - one more question ― do you know how to change the browser for GMailQuickCheck only? I mean when I go to mail-box from the program. Cause Pale Moon is always connected to a different Google account, so I don't end in my mail-box; so I prefer to use SeaMonkey for it.
Not much to see:
GMQC is NOT browser based, so, I'm not sure what you're asking.
OK. You don't have a worthy SS app. You need one with a time delay so you can capture your hoover popup.
I have a suggestion..
Nevermind. I see it's running.
Does it in fact list your unopened emails when hoovering?
Yes, it shows the Email messages; I just didn't want to show them.
ThruHammer wrote: ↑Sun May 02, 2021 9:23 pmGMQC is NOT browser based, so, I'm not sure what you're asking.
Actually - it's a confusing thing. I mean - when I double-click GMailQuickCheck, or click "Compose Mail" ― it opens up a new tab in Pale Moon ― but it's the Google account where I don't use Gmail. I don't know why it goes to that account. Maybe it relates to the address of this account - https://accounts.google.com/b/0/AddMailService. Notice the "/b/0/". While when I do Google search (with "g" Keyword) ― it's with the main Google account. Maybe I should ask in Pale Moon's forum?
Now "Compose Mail" is NOT what this thread is about.
You asked for the ability to receive new mail notifications.
This is what was delivered.
If you need to respond to these then you need to be continuously signed in.
OK, solved it - by clearing "google" cookies, and logging-into that Google account.