<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; Мониторинг почты и отправка вложений на облака]]></title>
		<link>http://forum.script-coding.com/viewtopic.php?id=13476</link>
		<atom:link href="http://forum.script-coding.com/extern.php?action=feed&amp;tid=13476&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «Мониторинг почты и отправка вложений на облака».]]></description>
		<lastBuildDate>Wed, 18 Jul 2018 17:10:35 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: Мониторинг почты и отправка вложений на облака]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=127135#p127135</link>
			<description><![CDATA[<p><strong>Xameleon</strong>, хорошо.<br />Я, правда, не уверен, что настолько полезно (времени написать нормальный пример сейчас нет).</p><p>Код на Powershell (можно заменить любым языком, что поддерживает вызовы из .Net библиотек), для работы с IMAP используется <a href="http://www.mimekit.net/">MailKit</a> и встроенные средства. Версия интерпретатора должна быть не ниже 3 (лучше выше), но, при необходимости, можно переписать пару моментов и заработает в 2-ке. Я думаю, что большого труда перенести это на Python/AutoIt/что-то_другое не составит.</p><p><strong>Пример 1.</strong><br />Цепляемся к IMAP-серверу mail.example.com для пользователя user. Получаем непрочитанные сообщения для подпапки (точнее для двух дочерних, относительно INBOX&#039;а, folder1 и folder2). В теле письма есть ссылка на файл (с определённого домена, example.org, на этом домене web-сервер с авторизацией, но скачать файл он вам даст только по https, хотя ссылки будут приходить на http, и ссылка выдирается и htmlbody письма с заменой uri.scheme), скачиваем его (имя берётся из htmlbody, т.к. на web-сервере ссылки вида &quot;example.org/files/xxxxxxxxxxxx&quot;, а Powershell не умеет нормально content-disposition) и пересылаем исходник письма на др. адрес (user2, на том же домене example.com, но это не принципиально) вложив скачанный файл (тема письма заменяется на &quot;FW: имя файла&quot;). SMTP-авторизация в примере не используется. После обработки исходное письмо письмо будет отмечено прочитанным.<br /></p><div class="codebox"><pre><code>
# я не устанавливал mailkit, mimekit, bounce_castle, т.к. требовалось &quot;портабельное&quot; решение.
# библиотеки положить вместе со скриптом ну или установить.
$loadedassemblies = [appdomain]::currentdomain.getassemblies()
&#039;BouncyCastle.Crypto&#039;, &#039;mimekit&#039;, &#039;mailkit&#039; | %{ $assemblyname = $_
    if (! (($loadedassemblies | %{($_.FullName -split &#039;,&#039;)[0]}) -contains $assemblyname)) {
        Add-Type -Path &quot;$(Join-Path $PSScriptRoot ($_ + &#039;.dll&#039;))&quot;
    }
}


$mll = New-Object MailKit.Net.Imap.ImapClient
$ctoken = New-Object System.Threading.CancellationToken ($false)
$ssl = [MailKit.Security.SecureSocketOptions]::SslOnConnect
$mll.Connect(&#039;mail.example.com&#039;, 993, $ssl, $ctoken)
$mll.Authenticate(([System.Text.Encoding]::UTF8) , &quot;user@example.com&quot;, &quot;strongpassword&quot; , $ctoken)

$folders = &#039;folder1&#039;,&#039;folder2&#039;
foreach ($folder in $folders) {
$inbox = $mll.Inbox
$inbox.Open([MailKit.FolderAccess]::ReadOnly) | Out-Null

$inbox = $inbox.GetSubfolders($false) | ?{$_.Name -eq $folder}
$inbox.Open([MailKit.FolderAccess]::ReadWrite) | Out-Null

$msgs =  $inbox.Search([MailKit.Search.SearchQuery]::NotSeen)
foreach ($msg in $msgs) { 
    try {
        $eml = $inbox.GetMessage([MailKit.UniqueId]$msg.Id)
    }
    catch {
        $_
    }

    $emlhtml = New-Object -Com &quot;HTMLFile&quot;
    $content = $eml.HtmlBody
    try {
        $emlhtml.IHTMLDocument2_write($content)
    }
    catch {
        $src = [System.Text.Encoding]::Unicode.GetBytes($content)
        $emlhtml.write($src)
    }
    $files = $emlhtml.links | ?{$_.hostname -eq &#039;example.org&#039;} | %{
        $url = [System.Uri]$_.Href
        if ($url.Scheme -eq &#039;http&#039;) {
            $url = [System.Uri]$(&#039;https://&#039; + $url.Host + $url.AbsolutePath)
        }
        $file = $_.TextContent
        $username = &quot;user&quot;
        $password = &quot;password&quot;
    
        $encoded =  [System.Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes($username + &quot;:&quot; + $password))  
        $headers = @{Authorization = &quot;Basic &quot;+$encoded}
        $cred = (New-Object System.Management.Automation.PSCredential($username,($password | ConvertTo-SecureString -AsPlainText -Force)))
        $useragent = &quot;Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0&quot;

        $outFilePath = Join-Path $PSScriptRoot $file
        try {
            $r = Invoke-WebRequest -Uri $url -Headers $headers -UserAgent $useragent -Method get -OutFile $outFilePath -PassThru
        }
        catch {
            $site = $_.Exception.Response
        }
        gi $outFilePath
    }
    Send-MailMessage -To &quot;user2@example.com&quot; -Subject $(&#039;FW: &#039; + $files.Name) -Body $($emlhtml | %{$_.Body.OuterHtml}) -BodyAsHtml -Encoding UTF8 -SmtpServer &quot;mail.example.com&quot; -From &quot;user@example.com&quot; -Port 25 -Attachments $files.FullName
    $inbox.AddFlags([MailKit.UniqueId]$msg.Id, ([MailKit.MessageFlags]::Seen), $true)
}
$inbox.Close()
}
$mll.Disconnect($true , $ctoken)
</code></pre></div><p>Комментариев почти нет, но если кому-то будет интересно, то набросаю ещё несколько примеров на выходных (нормальных, а не как этот) и приведу в порядок этот (например, вынесу переменные и нормальные имена и комментарии напишу - увы, работа сейчас не позволяет хорошо написать пример). Код выглядит страшно, но работает (во всяком случае, когда я проверял возможности Mailkit, подойдёт ли она мне для работы - этот пример вполне себе работал). Возможные примеры, которые смогу набростать - обработка вложений, загрузка файлов на WEB-сервер (POST), обработка вложенных xls/xlsx (получение данных и/или сохранение в csv), и конкретно для IMAP-сервера: рекурсивный обход папок, получение всех сообщений (и можно даже сделать mirror в др. ящик), сортировка/перемещение сообщений, фильтрация списка сообщений по дате, отправителю, теме и т.п., проверку сертификата перед подключением (в примере подключение идёт по TLS, но валидность сертификата не проверяется).</p><p>Рабочие скрипты у меня &quot;покрасивше&quot; с &quot;функциями и обработкой ошибок&quot;, но перелопатить неск. сот кб. скриптов я попросту не успеваю.</p><p>Модуль PSGSuite для Powershell умеет работать с GMAIL, но что конкретно он умеет, я особо не смотрел (ну кроме очевидного - подключиться к ящику, получить список непрочитанных, получить сообщения) - возможно он уже умеет то, что просил ТС.</p><p>Если захотим не пересылать письмо, а сохранить его куда-нибудь в WEB, то на помощь придёт Invoke-RestMethod (заставить его работать для тех же dropbox, bitbucket, в принципе, возможно), который, можно заменить на curl.</p>]]></description>
			<author><![CDATA[null@example.com (UNDYING)]]></author>
			<pubDate>Wed, 18 Jul 2018 17:10:35 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=127135#p127135</guid>
		</item>
		<item>
			<title><![CDATA[Re: Мониторинг почты и отправка вложений на облака]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=127127#p127127</link>
			<description><![CDATA[<p><strong>UNDYING</strong>, думаю будет крайне полезно ! )</p>]]></description>
			<author><![CDATA[null@example.com (Xameleon)]]></author>
			<pubDate>Wed, 18 Jul 2018 07:07:01 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=127127#p127127</guid>
		</item>
		<item>
			<title><![CDATA[Re: Мониторинг почты и отправка вложений на облака]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=127024#p127024</link>
			<description><![CDATA[<div class="quotebox"><cite>Xameleon пишет:</cite><blockquote><p>для современных почтовых серверов, использующих TLS</p></blockquote></div><p>М.б. offlineimap (требует Python, но, я думаю, можно собрать standalone-приложение) и ripmime+curl? Такая связка больше подходит для *nix систем, но на Windows тоже можно завести.<br />На работе получаю &quot;техническую почту&quot; (всякие csv-таблицы и архивы) через MailKit-библиотеку (могу выложить пару скриптов как пример), TLS она точно умеет.</p>]]></description>
			<author><![CDATA[null@example.com (UNDYING)]]></author>
			<pubDate>Fri, 13 Jul 2018 00:12:40 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=127024#p127024</guid>
		</item>
		<item>
			<title><![CDATA[Re: Мониторинг почты и отправка вложений на облака]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=124395#p124395</link>
			<description><![CDATA[<p><strong>DnsIs</strong>, </p><div class="quotebox"><blockquote><p>Из за неработающего TLS.</p></blockquote></div><p>1) Я же написал в том же сообщении<br /></p><div class="quotebox"><blockquote><p>но для современных почтовых серверов, использующих TLS, придётся ещё поднимать соединение через OpenSSL или что-то подобное.</p></blockquote></div><div class="quotebox"><blockquote><p>На сайте намек есть:<br />Don&#039;t hesitate. Try it out before you pay!</p></blockquote></div><p>2) В разделе Purchase отсутствует возможность приобретения <strong>EAGetMail Background Service</strong> + при запуске этого сервиса нигде нет вкладок упоминающих о том, что он работает в триальном режиме или кнопки для покупки</p><p>Из чего я сделал вывод, что возможно он бесплатен.</p>]]></description>
			<author><![CDATA[null@example.com (Xameleon)]]></author>
			<pubDate>Mon, 02 Apr 2018 09:57:06 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=124395#p124395</guid>
		</item>
		<item>
			<title><![CDATA[Re: Мониторинг почты и отправка вложений на облака]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=124393#p124393</link>
			<description><![CDATA[<div class="quotebox"><cite>Xameleon пишет:</cite><blockquote><p>DnsIs, не понял. Почему getmail &quot;уже не катит&quot; ?</p></blockquote></div><p>Из за неработающего TLS.<br /></p><div class="quotebox"><cite>Xameleon пишет:</cite><blockquote><p>Но пока не могу понять триальный он или нет.</p></blockquote></div><p>На сайте намек есть:<br /><strong>Don&#039;t hesitate. Try it out before you pay!</strong></p>]]></description>
			<author><![CDATA[null@example.com (DnsIs)]]></author>
			<pubDate>Mon, 02 Apr 2018 09:38:34 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=124393#p124393</guid>
		</item>
		<item>
			<title><![CDATA[Re: Мониторинг почты и отправка вложений на облака]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=124067#p124067</link>
			<description><![CDATA[<p><strong>DnsIs</strong>, не понял. Почему getmail &quot;уже не катит&quot; ?</p><p>Кстати, нашёл любопытный вариант - <a href="https://www.emailarchitect.net/downloads.aspx">EAGetMail Background Service</a></p><p>Но пока не могу понять триальный он или нет.</p>]]></description>
			<author><![CDATA[null@example.com (Xameleon)]]></author>
			<pubDate>Thu, 15 Mar 2018 09:53:54 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=124067#p124067</guid>
		</item>
		<item>
			<title><![CDATA[Re: Мониторинг почты и отправка вложений на облака]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=124066#p124066</link>
			<description><![CDATA[<p>Долго искал консольную утилиту для забора почты, так и не нашел. Вся проблема именно в TLS. <strong>getmail.exe</strong> уже не катит. Для отправки почты конечно лучше всего использовать клиенты, которые просто будут синхронизировать папку. Но есть еще один вариант для yandex.disk. Он работает по протоколу WebDav и для отправки файлов может помочь <a href="https://curl.haxx.se/">cURL</a>, как то так:<br /></p><div class="codebox"><pre><code>curl.exe --user &quot;user:password&quot; -k -T FILE https://webdav.yandex.ru/FILE</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (DnsIs)]]></author>
			<pubDate>Thu, 15 Mar 2018 09:11:38 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=124066#p124066</guid>
		</item>
		<item>
			<title><![CDATA[Re: Мониторинг почты и отправка вложений на облака]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=123843#p123843</link>
			<description><![CDATA[<p>Для получения почты можно использовать <strong>getmail.exe</strong> (эту консольную утилитку легко найти на просторах интернета), но для современных почтовых серверов, использующих TLS, придётся ещё поднимать соединение через <strong>OpenSSL</strong> или что-то подобное.<br />Либо использовать <strong>Outlook.Application</strong>, поставив Outlook из пакета офиса.</p><p>Для копирования в облако, думаю можно воспользоваться клиентом <strong>google drive</strong>. Он позволяет создать папку синхронизации на ПК. Если копировать в неё файлы, то клиент, автоматически воссоздавая структуру, будет загонять содержимое в облако.</p>]]></description>
			<author><![CDATA[null@example.com (Xameleon)]]></author>
			<pubDate>Tue, 27 Feb 2018 16:45:33 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=123843#p123843</guid>
		</item>
		<item>
			<title><![CDATA[Мониторинг почты и отправка вложений на облака]]></title>
			<link>http://forum.script-coding.com/viewtopic.php?pid=123766#p123766</link>
			<description><![CDATA[<p>Всем привет!<br />Я новенький. И это мой первый вопрос.<br />Мне приходят много писем от коллег с различными вложенными файлами.<br />Что можно придумать, чтобы содержимое нужных писем отправлялось на g.drive/ya.disk/dropbox ?</p><p>Т.е. грубо говоря, я прописываю правило для определённых емейлов, там перенаправлять куда-то, или что делать вот, я не знаю.<br />Их нужно куда-то редиректить, на какой-то сервис, который бы уже заливал вложение на облако.<br />Может есть идеи? </p><p>Сейчас я просто захожу на почту по вебморде, и тупо открываю каждый файл и скачиваю. Жутко хлопотно.</p>]]></description>
			<author><![CDATA[null@example.com (Толстый Тони)]]></author>
			<pubDate>Sun, 18 Feb 2018 12:52:00 +0000</pubDate>
			<guid>http://forum.script-coding.com/viewtopic.php?pid=123766#p123766</guid>
		</item>
	</channel>
</rss>
