Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Отправка email с вложениями из подпапок каталога (http://forum.oszone.net/showthread.php?t=347618)

E_o 13-01-2021 14:10 2946025

Отправка email с вложениями из подпапок каталога
 
Здравствуйте. Хочу настроить отправку email из каталога C:/Mail/ с папками где, в каждой папке файл pdf или xls, который будет вложением в письмо.
Отправлять или средствами PowerShell или скриптом для MailAlert. Адрес получателя могу указать в каждой папке в виде файла с именем example@mail.com.
Как сделать перебор папок с выводом в цикле переменных "адрес получателя" и "ссылка на файлы с вложением" или "файл с вложением"? потому что MailAlert может только одно вложение вставлять. После каждого цикла сделать перенос файлов вложений в отдельную одну папку архив.
Если в какой-то папке нет файлов pdf и/или xls, то пропустить её.

Будут ли проблемы, если папки и/или вложения будут на русском?

Можно ли сделать так, чтобы скрипт проверял содержимое файла на наличие определенных слов, например во вложении есть слова "отправитель" и "получатель", а в папке есть файл words.txt, в котором указаны эти 2 слова, как некий параметр и если в содержимом файла нет этих слов, то в лог пишется ошибка и письмо не отправляется, файл не удаляется.

Спасибо.

DJ Mogarych 13-01-2021 17:46 2946053

Создайте примерную иерархию каталогов с файлами и выложите сюда в zip.

Iska 13-01-2021 19:13 2946062

E_o, попробуйте описать саму задачу, а не выбранное решение.

E_o 13-01-2021 20:44 2946082

Вложений: 1
Цитата:

Цитата DJ Mogarych
выложите сюда в zip. »


E_o 13-01-2021 21:06 2946085

Iska,

Задача: Отправлять письма с вложениями zip, pdf, xls, xlsx, doc, docx из каталога папок по разным адресатам с проверкой в тексте вложения корректности соответствия наименования отправителя и адресата. Документ вложение содержит имена отправителя - он один во всех документах - ГеннадийВВ, и адресата, АннаИЛ или ЗлатаГВ и т.д. в разных папках каталога. Этим именам соответствуют адреса электронной почты в каком-то произвольном документе. Все имена и почта уникальные. Это для того, чтобы в каталог АннаИЛ не попало вложение для ЗлатаГВ или не от ГеннадийВВ, потому что в папках они будут создаваться вручную.
Если имена соответствуют, то отправить письмо с вложениями, а файлы переместить в отдельную папку, если не соответствуют, оставить их в папке и создать 1 файл с текстом ошибок:
не совпадает адресат, не совпадает отправитель, не совпадает адресат/отправитель
- в папке 1, папке 2

DJ Mogarych 13-01-2021 21:38 2946090

Могу сразу сказать, что проверять содержимое файла скриптом - занятие крайне неблагодарное, если вообще возможное. Во всяком случае, работать это будет супер-криво при том, что реализация такого добра невероятно трудоёмкая. Я за это точно не буду даже браться.
Ладно бы был один формат (лучше всего txt), ещё куда ни шло, а тут такой зоопарк. Тем более, тут и zip, и pdf, который может вообще не содержать текстового слоя.

Насчёт остального - сейчас поковыряю.

E_o 13-01-2021 22:11 2946096

DJ Mogarych, спасибо.
Если бы и без проверки, то уже ах!
Тогда емейл отправителя какой-то один на yandex.ru или gmail.com, а адрес получателя либо файлом с именем адреса или в текстовом файле в папке.

DJ Mogarych 13-01-2021 22:17 2946097

Powershell:
Код:

$folders = dir C:\mail -Directory -Recurse

foreach ($folder in $folders) {
$files = dir "$($folder.fullname)" -File
    if ($files |? Extension -match "xlsx?|docx?|pdf|zip" -OutVariable attachments) {
    Send-MailMessage -SmtpServer smtp.server.com -from sender@server.com `
    -to ($files -match "^\w+@\w+\.\w+$").name `
    -subject "Тема письма" -body "Текст письма" `
    -attachments $attachments.fullname
    }
}

Попробуйте погонять, я не тестировал, т. к. под рукой нет smtp-сервера.

E_o 13-01-2021 22:26 2946100

DJ Mogarych,
спасибо, сейчас попробую

E_o 13-01-2021 23:28 2946103

Код:

$Encoding = [System.Text.Encoding]::UTF8
$secpasswd = ConvertTo-SecureString 'passw' -AsPlainText -Force
 $smtpcredentials = New-Object System.Management.Automation.PSCredential ('my@e-mail.ru', $secpasswd)
 
$folders = dir C:\Mail -Directory -Recurse

foreach ($folder in $folders) {
$files = dir "$($folder.fullname)" -File
    if ($files |? Extension -match "xlsx?|docx?|pdf|zip" -OutVariable attachments) {
    Send-MailMessage -Port 587 -UseSSL -SmtpServer smtp.yandex.ru -credential $smtpcredentials -from my@e-mail.ru -Encoding $Encoding `
    -to ($files -match "^\w+@\w+\.\w+$").name `
    -subject "Тема письма" -body "Текст письма" `
    -attachments $attachments.fullname
    }
}

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

Большое спасибо. Письма отправляются, доходят.


Время: 11:47.

Время: 11:47.
© OSzone.net 2001-