none
Доступ к почтовому ящику Gmail с помощью библиотеки ImapX RRS feed

  • Вопрос

  • Добрый день.

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

    $client.Behavior.MessageFetchMode = "Full"
    $client.Folders.Inbox.Search() | ForEach-Object { if ($_.Seen -ne 'True') {
        $_.attachments.save("d:\ipad\",$_.attachments.contenttype.name)}}
    
    Произошла ошибка при вызове метода, так как [ImapX.Attachment[]] не содержит метод с именем "save".
    строка:9 знак:24
    +     $_.attachments.save <<<< ("d:\ipad\",$_.attachments.contenttype.name)}}
        + CategoryInfo          : InvalidOperation: (save:String) [], RuntimeException
        + FullyQualifiedErrorId : MethodNotFound

    4 августа 2015 г. 9:36

Ответы

Все ответы

  • Попробуйте:

    $client.Folders.Inbox.Search() | ForEach-Object { 
    	if ($_.Seen -ne 'True') {
    		$_.attachments | Foreach {$_.save("d:\ipad\",$_.contenttype.name)}}}


    • Изменено KazunEditor 4 августа 2015 г. 9:58
    • Помечено в качестве ответа nskalinin 4 августа 2015 г. 11:33
    4 августа 2015 г. 9:58
    Отвечающий
  • Спасибо, работает.

    Еще вопрос: возникает такая ошибка при попытке задать фильтр на поиск нужных сообщений. Такая же ошибка возникает и на BODY, SUBJECT, SINCE.

    $client.Folders.Inbox.Search('FROM "Facebook"')
    
    Исключение при вызове "Search" с "1" аргументами: "Индекс находился вне границ массива."
    строка:8 знак:29
    + $client.Folders.Inbox.Search <<<< ('FROM "Facebook"')
        + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
        + FullyQualifiedErrorId : CatchFromBaseAdapterMethodInvoke
    И такой момент: нужно каждый раз создавать новую сессию (отключиться, подключиться) чтобы загрузить новые письма? Потому как с помощью этой команды (если выполнить ее повторно)
    $client.Folders.Inbox.Search()
    этого сделать не получается.

    4 августа 2015 г. 11:41
  • 1) $client.Folders.Inbox.Search('FROM "Facebook"',"Basic",-1)

    2) Бывает, сразу загружаются новые письма, или через определенный интервал. Так же можно попробовать вызвать метод:

    $client.Folders.Inbox.StartIdling()

    Установить timeout для повторной отсылки NOOP :

    $client.Behavior.NoopIssueTimeout = 120

    4 августа 2015 г. 12:48
    Отвечающий
  • Спасибо!

    1) $client.Folders.Inbox.Search('FROM "Facebook"',"Basic",-1)

    Подскажите, что здесь значит -1?

    И возможно ли составлять сложные условия типа 'FROM "Facebook" OR "Google" AND SINCE "04-Aug-2015"'?

    4 августа 2015 г. 13:05
  • -1 - подразумевает все письма.

    $client.Folders.Inbox.Search("OR FROM 'Facebook' FROM 'Google' SINCE 04-Aug-2015","Full",-1)

    Можно добавить UNSEEN в конец фильтра, что только непрочитанные.
    • Изменено KazunEditor 4 августа 2015 г. 14:02
    4 августа 2015 г. 14:01
    Отвечающий
  • Спасибо.

    Все манипуляции проделывал на локальной машине. Все работает. Попробовал выполнить скрипт на сервере с Windows Server 2012R2, вывалилась ошибка :

    Add-Type -Path C:\Users\sadmin.CORP\Documents\ImapX\v4.0\ImapX.dll
    
    Add-Type : Не удалось загрузить файл или сборку "file:///C:\Users\sadmin.CORP\Documents\ImapX\v4.0\ImapX.dll" либо одну из и
    х зависимостей. Операция не поддерживается. (Исключение из HRESULT: 0x80131515)
    строка:1 знак:1
    + Add-Type -Path C:\Users\sadmin.CORP\Documents\ImapX\v4.0\ImapX.dll
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : NotSpecified: (:) [Add-Type], FileLoadException
        + FullyQualifiedErrorId : System.IO.FileLoadException,Microsoft.PowerShell.Commands.AddTypeCommand
    Подскажите, в чем у меня проблема?

    5 августа 2015 г. 6:11
  • Одна из проблем, следует сначала сделать Unblock архива.

    Unblock

    • Помечено в качестве ответа nskalinin 5 августа 2015 г. 7:29
    5 августа 2015 г. 6:21
    Отвечающий