Tasker Gmail Sqlite3 按标签获取电子邮件(收件箱)returns 无

Tasker Gmail Sqlite3 get emails by label (inbox) returns nothing

我是 运行 Tasker (Android) 中的一个 shell 脚本,用于查询我的电子邮件,但它总是 returns 没有。

sqlite3 /data/data/com.google.android.gm/databases/mailstore.MYEMAIL@gmail.com.db "SELECT fromAddress || '@|@' || dateSentMs || '@|@' || Subject || '@|@' || snippet FROM messages m LEFT JOIN message_labels ml ON m._id = ml.message_messageId JOIN labels l ON l._id = ml.labels_id WHERE l.name = ‘^i’ ORDER BY m._id DESC;"

这样的代码有效 ->

sqlite3 /data/data/com.google.android.gm/databases/mailstore.MYEMAIL@gmail.com.db "SELECT fromAddress || '@|@' || dateSentMs || '@|@' || Subject || '@|@' || snippet FROM messages ORDER BY _id DESC LIMIT %GMAILcount;"

我怎样才能让它工作?

表格是这样构成的

MESSAGE_LABELS 0|_id|INTEGER|0||1 1|labels_id|INTEGER|1||0 2|message_messageId|INTEGER|1||0 3|message_conversation|INTEGER|0||0

LABELS 0|_id|INTEGER|0||1 1|canonicalName|TEXT|0||0 2|name|TEXT|0||0 3|numConversations|TEXT|0||0 4|numUnreadConversations|TEXT|0||0 5|color|INTEGER|0|2147483647|0 6|systemLabel|INTEGER|0|0|0 7|systemLabelOrder|INTEGER|0|0|0 8|hidden|INTEGER|0|0|0 9|labelCountDisplayBehavior|INTEGER|0|0|0 10|labelSyncPolicy|INTEGER|0|0|0 11|visibility|TEXT|0||0 12|lastTouched|INTEGER|0|0|0 13|numUnseenConversations|INTEGER|0|0|0 14|lastMessageTimestamp|INTEGER|1|0|0

MESSAGES 0|_id|INTEGER|0||1 1|messageId|INTEGER|0||0 2|conversation|INTEGER|0||0 3|fromAddress|TEXT|0||0 4|toAddresses|TEXT|0||0 5|ccAddresses|TEXT|0||0 6|bccAddresses|TEXT|0||0 7|replyToAddresses|TEXT|0||0 8|dateSentMs|INTEGER|0||0 9|dateReceivedMs|INTEGER|0||0 10|subject|TEXT|0||0 11|snippet|TEXT|0||0 12|listInfo|TEXT|0||0 13|personalLevel|INTEGER|0||0 14|body|TEXT|0||0 15|bodyEmbedsExternalResources|INTEGER|0||0 16|joinedAttachmentInfos|STRING|0||0 17|synced|INTEGER|0||0 18|error|TEXT|0||0 19|clientCreated|INTEGER|0||0 20|refMessageId|INTEGER|0|0|0 21|forward|INTEGER|0|0|0 22|includeQuotedText|INTEGER|0|0|0 23|quoteStartPos|INTEGER|0|0|0 24|bodyCompressed|BLOB|0|NULL|0 25|customFromAddress|TEXT|0|NULL|0 26|queryId|INTEGER|0|1|0 27|spamDisplayedReasonType|INTEGER|0||0 28|deliveryChannel|INTEGER|0||0 29|referencesRfc822MessageIds|TEXT|0||0 30|showSendersFullEmailAddress|INTEGER|0||0 31|viaDomain|TEXT|0||0 32|showForgedFromMeWarning|INTEGER|0||0 33|refAdEventId|TEXT|0||0 34|permalink|TEXT|0||0 35|clipped|INTEGER|0|0|0

您的查询似乎没问题,所以我敢打赌,连接表 return NULL

当查询 SELECT * FROM labels WHERE name = '^i'

时,你得到了什么 _id

在我的例子中,它是 1 而当我 运行:

SELECT * FROM message_labels WHERE labels_id=1

我明白了……什么都没有 :) 所以这也是您的代码可能失败的地方

p.s.

我确实建议安装 SQLiteDebugger - 它在处理更复杂的查询时非常有帮助

sqlite3 /data/data/com.google.android.gm/databases/mailstore.YOUREMAIL@gmail.com.db "SELECT fromAddress || '@|@' || dateSentMs || '@|@' || Subject || '@|@' || snippet FROM messages m LEFT JOIN message_labels ml ON m.messageId = ml.message_messageId JOIN labels l ON l._id = ml.labels_id WHERE l.name = '^i' ORDER BY m._id;"

是正确的。 m.messageId 而不仅仅是 _id