Войти

Показать полную графическую версию : Отправка email с вложениями из подпапок каталога


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

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

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

Спасибо.

DJ Mogarych
13-01-2021, 17:46
Создайте примерную иерархию каталогов с файлами и выложите сюда в zip.

Iska
13-01-2021, 19:13
E_o, попробуйте описать саму задачу, а не выбранное решение.

E_o
13-01-2021, 20:44
выложите сюда в zip. »

E_o
13-01-2021, 21:06
Iska,

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

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

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

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

DJ Mogarych
13-01-2021, 22:17
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
DJ Mogarych,
спасибо, сейчас попробую

E_o
13-01-2021, 23:28
$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
}
}

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

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




© OSzone.net 2001-2012