Search code examples
powershellimapimapx

Powershell - Download Attachment from Gmail


So this is what I did so far:

$dll = 'C:\Users\xxxx\Desktop\v4.6\imapx.dll'
[Reflection.Assembly]::LoadFile($dll)

$Username = "xxxxxx"
$Password = "yyyyyy"


# Initialize the IMAP client
$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()
$client.Login($Username, $Password)

# Get folder/label object containing emails you want to read from
$res = $client.folders| where { $_.path -eq 'Inbox' }


# Search email threads inside the subfolder
$numberOfMessagesLimit = 10
$messages = $res.search("All", $client.Behavior.MessageFetchMode, $numberOfMessagesLimit)

# Display the messages in a formatted table
$messages | ft *


foreach($m in $messages){
$m.Subject
foreach($r in $m.Attachments){
$r | Out-File C:\Users\xxxx\Desktop\x\log.txt
    }
 }

I got the information about the attachment file in the log.txt.

ContentId               : 
FileData                : {120, 120, 120, 120}
FileName                : test.txt
Downloaded              : True
ContentType             : text/plain; name=test.txt; charset=US-ASCII
ContentTransferEncoding : Base64
FileSize                : 4

Ok, very nice....but the question now, how can I download the attachment itself??! :D


Solution

  • Referring to the documentation:

    foreach($m in $messages) {
        $m.Subject
        foreach($r in $m.Attachments) {
            $r.Download()
            $r.Save('C:\Users\xxxx\Desktop\x\')
        }
    }