LINUX.ORG.RU

curl - как пометить письма как прочитанные?

 


0

3

Мне нужно пометить все письма в INBOX как прочитанные. Пользуясь хелпами curl написал такое:

#!/bin/bash
username="us"
password="pa"
curl -u $username:$password --url "imaps://imap.gmail.com/INBOX" -X "STORE 1 +FLAGS \Seen"
Ошибок не выдет, но и не делает то, что нужно. ЧЯДНТ?

Ответ на: комментарий от firkax

Не уверен. В инете до пса каких то разных строк для этого. Народ пишет, что такая строка работает, но у меня нет. Я считываю количество новых писем такой строкой

curl -u $username:$password --silent "https://mail.google.com/mail/feed/atom" | tr -d '\n' | awk -F '<entry>' '{for (i=2; i<=NF; i++) {print $i}}' | wc -l
Работает хорошо. Другой строкой я считываю заголовки и адресат. А вот пометить их как прочитанные не могу.

rustamych ★★★ ()

Ничего сложного. курл качает сначало только список писем. Далее ваш скрипт сравнивает его слокальным списком. Если такого нет то ваш скрипт далее выполняет закачку. Просто как трусы за рупь двадцать.

Bootmen ★★☆ ()
Ответ на: комментарий от bass

Это я уже пробовал сделать. Не работает.

STORE 1 означает обращение к идентификатору 1, то есть, ты применяешь флаги к одному, первому письму.

Вот тут какая то путаница. У писем есть UID. Идентификатор 1 это первое или последнее письмо? У меня их там несколько тысяч. Мне нужно применить к последнему пришедшему письму, а не первому в списке писем, которое было не помню уж когда. Количество новых, их заголовки и отправителя я нахожу через atom. Но он, как я понял, не позволяет повесить \Seen. Зато imap позволяет через curl. Как тогда найти идентификатор последнего пришедшего письма?

rustamych ★★★ ()
Ответ на: комментарий от bass

Тупым тыканьем нашел решение.

curl -u $username:$password --url "imaps://imap.gmail.com/INBOX"  -X "STORE 1:* +FLAGS \\Seen"
Это помечает все письма как прочитанные. А такое
curl -u $username:$password --url "imaps://imap.gmail.com/INBOX"  -X "STORE * +FLAGS \\Seen"
только последнее. Причем, если первое уже помечено, как прочитанное, то глубже не заходит.

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

rustamych ★★★ ()
Ответ на: комментарий от rustamych

пометить только первое непрочитанное, а запуская второй раз помечать следующее непрочитанное

Какую задачу ты решаешь? Зацитированное это или лабораторка или дрочево ради чего? По какому критерию ты собрался определять следующее? Получение писем с IMAP для клиента асинхронное, тебе придётся явно указывать STORE N. По дате получения? отправки? размеру? Тебе придётся лазить в заголовки письма и curl тут будет неудобный. Возьми уже python-imaplib, что-то типа такого

server = imaplib.IMAP4_SSL('imap.googlemail.com')
server.login('u', 'p')
server.select("INBOX", readonly=False)
for i in server.search(None,'Unseen')[1][0].split():
#тут сам определишь критерии следующего путешествуя по BODY[HEADER.FIELDS XXX])
#или тупо делай break после первого, если это лаба
    server.store(i, '+FLAGS', '\\Seen')

bass ★★★★★ ()
Последнее исправление: bass (всего исправлений: 1)
Ответ на: комментарий от bass

Питоном не пользуюсь. Задача личная. Пользовался много лет claws-mail, чтобы не держать открытым браузер. Но внезапно понял, что claws-mail висит в трее просто, как индикатор почты, а все действия с письмами делал, открывая почту в браузере. Поэтому решил соорудить скрипт, который показывает число новой почты и по клику на иконку показывает заголовки и адресат. У меня fvwm и это реализуется легко. Не надо держать ни claws-mail, ни открытый браузер. Поскольку часть писем не требуют ответа, то удобно соорудить скрипт на двойной клик - пометить как прочитанное. Но хотелось бы делать это последовательно, начиная с последнего. В принципе то, что я написал выше уже решение. Надеюсь объяснил понятно. Конечно было классно и удалять письма скриптом, но боюсь, что можно уничтожить не то. Надо же вначале найти uid письма и удалить именно с этим uid.

Не могу найти нормального манула по curl. 1:* включил как то интуитивно. Нигде такого ключа не нашел.

rustamych ★★★ ()
Последнее исправление: rustamych (всего исправлений: 1)