1

Как я могу определить, есть ли непрочитанная почта в моем ящике OSX?

Почта доставляется из разных мест с помощью fetchmail и доставляется моему локальному пользователю в /var /mail /user. Я ищу способ узнать, есть ли непрочитанная почта, или я прочитал почту (используя alpine). Я предпочитаю решение, которое использует инструменты Unix, но открыто для AppleScript или любого другого решения для непрочитанной части счета, но оно должно работать с программами чтения почты Unix (/var /mail /user).

Я хотел бы иметь инструмент командной строки, который говорит, есть ли непрочитанная почта во входящей почте, чтобы я мог запустить ее с заданием cron, и использовать инструмент keyboard_leds для установки тонких уведомителей. Я предпочитаю это MacBiff, Growlnotify и т.д.

Я думал, что выяснил одно возможное решение:

mail -H | grep -c '^.[NU]'

Кажется, иногда возвращает количество непрочитанных сообщений. Но если я читаю сообщение по-альпийски, оно не обновляется до тех пор, пока я не выйду из альпийского.

Другим подходом может быть использование моего почтового клиента (alpine) напрямую. У меня есть чистый .pinerc, который не имеет цветов и т.д., Пытающийся сделать отображение максимально простым, и затем запустите эту команду:

alpine -o -x .pinerc.clean -I i,q >& foo

Который запускает alpine, переходит в папку "Входящие" и затем выходит (оставляя папку "Входящие" в режиме "только чтение", чтобы не нарушать мой основной процесс Alpine, который просматривает папку "Входящие"). Дамп экрана папки "Входящие" хранится в файле "foo".

Тем не менее, foo последний экран (выход из сообщения, а не входящие) и представляет собой двоичный файл в этом случае, и я не могу понять, как проанализировать его для "N" в столбце, который обозначает непрочитанную почту, даже если она там была. ..

4 ответа4

2

Ты 90% пути с mail -H | grep -c '^.[NU]' Я понимаю, что это необходимо для отражения любых изменений, внесенных в открытый экземпляр Alpine. К сожалению, это сделать нелегко, но я все равно выложу это для вас.

То, что вы хотите, не возможно напрямую, потому что изменения статуса сообщений, сделанные Alpine, вносятся в память и периодически записываются на диск (в "контрольных точках"). Команда mail (и все варианты) может только читать информацию о почте с диска и не может знать об изменениях, внесенных в Alpine между контрольными точками. Поэтому все, что вы действительно можете сделать, это увеличить частоту контрольных точек.

Код для определения того, когда проходить контрольную точку, очень сложен, но из того, что я могу собрать по умолчанию:

  • Не будет экономить чаще, чем 180 секунд (min_interval)

  • Когда Alpine простаивает более 30 секунд, он будет проверять контрольную точку, если в файл были внесены 12 изменений (частота контрольных точек) или хотя бы одно изменение было выполнено и контрольная точка не выполнялась в течение пяти минут (checkpoint_interval).

  • Когда Alpine выполнила какую-либо команду, она проверит контрольную точку, если в почтовом файле имеется 36 ожидающих изменений или хотя бы одно изменение и контрольной точки не будет в течение десяти минут.

  • При составлении сообщения Alpine будет проверять только контрольную точку, если было сделано не менее 48 изменений или хотя бы одно изменение было сделано за последние двадцать минут без контрольной точки.

Что вам действительно нужно, так это чтобы Alpine записывал на диск чаще. К сожалению, переменные checkpoint_interval и checkpoint_frequency могут быть изменены только во время компиляции. Для этого вам нужно перекомпилировать Alpine, но с некоторыми параметрами настройки, а именно:

--with-checkpoint-interval (default 420)
--with-checkpoint-frequency (default 12, you might want to change to 1) 

Конечно, если вы собираетесь перекомпилировать alpine, вы можете просто изменить код контрольной точки для записи после каждого изменения, но имейте в виду, что, что бы вы ни делали, это может привести к снижению производительности, если вы увеличите контрольную точку частота.

Еще одна вещь, которую стоит отметить - вы можете увидеть, когда контрольные точки возникают в настоящее время, включив опцию [X] Enable Mail Check Cue . Две звездочки ** появятся при сохранении на диск.

0

Посмотрите, поможет ли эта статья: Почта командной строки в OS X: re-alpine и Geektool

В поисках инструментов удаленного мониторинга в офисе на этой неделе я наткнулся на GeekTool. GeekTool похож на SilverService для уведомлений. Все, что он делает, это отображает что-то на рабочем столе. В офисе я быстро начал использовать его для мониторинга файлов журналов и удаленных графиков. Но опция вывода оболочки идеально подходит для отображения входящих писем.

/usr/bin/mail -H

Это просто почтовая программа командной строки с возможностью отображения индекса ожидающих писем и немедленного выхода. Если есть ожидающие сообщения, он покажет дату и тему сообщения, а если нет, то ничего не отобразит.

Так что это оставит рабочий стол в покое, если только нет почты, ожидающей чтения с одного из моих заданий cron.

GeekTool довольно крутой, и вы можете загрузить для него несколько готовых «geeklets» (я не использовал ни одного из них). Вы можете разместить их на рабочем столе и расположить их так, как считаете нужным.

0

См. Эту статью: Скрипт для отображения непрочитанных / помеченных сообщений только в приложениях Mail.app:

Обидно, что Почта не может отображать только непрочитанные / помеченные сообщения ... или так? Поправьте меня если я ошибаюсь. В любом случае, вот два скрипта для фильтрации вашего почтового ящика. Сохраните эти скрипты внутри Users -> your_username -> Library -> Scripts -> Mail Scripts -> anySubFolder. Они появятся под значком скрипта в строке меню Mail. Если вы не знаете, вы также можете добавить сочетания клавиш в сценарии; Мне лень рассказывать, как это сделать, но вы можете открыть справку Mail и найти инструкцию в меню «Просмотр справки почты» -> «Настройка почты» -> «Использование меню сценариев».

Статья содержит два сценария: Show unread only и Show flagged only , которые я не могу оценить как человек Mac. Однако, если они работают, они могут быть легко адаптированы к вашим потребностям.

Вот Show unread only :

try
  tell application "Mail"
    set theViewer to front message viewer
    set theMsg to messages of theViewer
    set msgList to {}
    repeat with thisMsg in theMsg
      if read status of thisMsg is false then
        set the end of msgList to thisMsg
      end if
    end repeat
    if msgList is {} then
      display dialog "There's no unread message in this mailbox."
    else
      tell theViewer to set properties to {visible messages:msgList}
    end if
  end tell
  on error the errMsg number the errNmb
  if the errNmb is not -128 then
    set the errTxt to "Error: " & the errNmb & ". " & the errMsg
    display dialog the errTxt buttons {"Cancel"} default button 1
  else
    error number -128
  end if
end try
0

Попробуйте следующий скрипт:

checkmail

if [[ "$?" == "0" ]]
    then echo "You've got mail!"
    else echo "No new mail"
fi

Замените эхо-команды в соответствии с вашими целями.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .