Получать электронную почту с помощью PowerShell - PullRequest
3 голосов
/ 01 апреля 2012

Все, что мне нужно, это получить электронную почту в скрипте PoSh и посмотреть в ее теме - с pop3 или imap, не имеет значения.
Я пытался найти решение, но все, что я нашел, это либо сторонние сборки .net, либо прямая работа MS Exchange. Оба не подходят.
Как использовать SMTP и отправлять электронную почту - это абсолютно понятно, но как получить? Нет ли стандартных сборок, похожих на System.Net.Mail?

Ответы [ 2 ]

5 голосов
/ 17 июля 2014

Вот код, который я использовал на c #. Я импортировал dll в powershell и использовал его для извлечения различных частей сообщения. Я использовал dll Imapx2 с открытым исходным кодом. Я понимаю, что вы не хотите использовать сторонние сборки .NET, но это может помочь другим людям, пытающимся получить доступ к этому контенту.

### Import the dll
[Reflection.Assembly]::LoadFile(“YourDirectory\imapx.dll”)
### Create a client object
$client = New-Object ImapX.ImapClient
###set the fetching mode to retrieve the part of message you want to retrieve, 
###the less the better
$client.Behavior.MessageFetchMode = "Full"
$client.Host = "imap.gmail.com"
$client.Port = 993
$client.UseSsl = $true
$client.Connect()
$user = "User"
$password = "Password"
$client.Login($user,$password)
$messages = $client.Folders.Inbox.Search("ALL", $client.Behavior.MessageFetchMode, 1000)
foreach($m in $messages){
$m.Subject
foreach($r in $m.Attachments){
$r | Out-File "Directory"
    }
 }

Надеюсь, это было полезно

1 голос
/ 19 декабря 2018

Я воспользовался предложением Фалаха Абу Хасана, и оно очень хорошо подошло для моих требований к получению почты через IMAP!

Как получить IMAPX.DLL

Github-репозиторий для imapx находится здесь: https://github.com/azanov/imapx

К сожалению, вам нужно скомпилировать его самостоятельно с помощью Visual Studio, чтобы получить imapx.dll.

Создание примераСценарий Powershell

Сценарий и DLL должны располагаться сбоку и могут быть интегрированы с этим:

$path = Split-path $script:MyInvocation.MyCommand.Path
[Reflection.Assembly]::LoadFile(“$path\imapx.dll”)

Следующий пример сценария, вдохновленный ответом Фалаха Абу Хасана, работал оченьхорошо для меня:

$path = Split-path $script:MyInvocation.MyCommand.Path

[Reflection.Assembly]::LoadFile(“$path\imapx.dll”)

### Create a client object
$client = New-Object ImapX.ImapClient

$client.Behavior.MessageFetchMode = "Full"
$client.Host = "Servername"
$client.Port = 993
$client.UseSsl = $true
$client.IsDebug = $true
$client.ValidateServerCertificate = $true
$client.Connect()

$user = "login@domain"
$pass = 'password'


$client.Login($user, $pass)

$messages = $client.Folders.Inbox.Search("ALL", $client.Behavior.MessageFetchMode, 100)

write-host "Count found: $($messages.count)"

foreach($m in $messages){
    write-host "Processing Subject: $($m.Subject)"
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...