Показать полную графическую версию : [решено] Оправка отчета о копировании файлов, на почту.
День добрый. Мне тут ТЗ выдали на работе: написать скрипт на PowerShell чтобы он копировал *.xls файлы из одной папки в другую, при том перед началом копирования нужно получить дату изменения файлов, засунуть все это добро в e-mail и отправить отчет на почту мне.
1. Как получить дату текущего файла?
2. Как отправить почту с gmail-аккаунта, на такой же?
$body = dir C:\Folder1 *.xls | copy -dest C:\Folder2 -PassThru | select name,LastWriteTime | Out-String
send-mailmessage -to "User01 <user01@example.com>" -from "User02 <user02@example.com>" -subject "Copy Files" -body $body -SmtpServer smtp.gmail.com -UseSsl -Credential "User01"
Если использовать нестандартный порт(отличный от 25),то используйте:
$EmailFrom = "user02@example.com"
$EmailTo = "user01@example.com"
$Subject = "Copy Files"
$SMTPServer = "smtp.gmail.com"
$SMTPClient = New-Object Net.Mail.SmtpClient($SmtpServer, 587)
$SMTPClient.EnableSsl = $true
$SMTPClient.Credentials = New-Object System.Net.NetworkCredential("username", "password");
$SMTPClient.Send($EmailFrom, $EmailTo, $Subject, $Body)
dosperados
26-09-2011, 11:10
Kazun, Молоток) Четко и красиво!
Kazun, да, реально четко и красиво, спасибо:)
У меня тут ошибка вывалилась:(
Исключение при вызове "Send" с "4" аргументами: "Сбой при отправке сообщения эле ктронной почты.
" C:\Users\****\Desktop\sendmail.ps1:10 знак:17
+ $SMTPClient.Send <<<< ($EmailFrom, $EmailTo, $Subject, $Body)
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : DotNetMethodException
Проверьте параметры,у меня все нормально работает.
$Body = gps | Out-String
$EmailFrom = "sergey.boris@gmail.com"
$EmailTo = "myname@yandex.ru"
$Subject = "List of Processes"
$SMTPServer = "smtp.gmail.com"
$SMTPClient = New-Object Net.Mail.SmtpClient($SmtpServer, 587)
$SMTPClient.EnableSsl = $true
$SMTPClient.Credentials = New-Object System.Net.NetworkCredential("sergey.boris", "Pa$$w0rd")
$SMTPClient.Send($EmailFrom, $EmailTo, $Subject, $Body)
$ou =new-object -com outlook.application
PS > $ou.GetNamespace("Mapi").GetDefaultFolder(6).items | select -skip 1 Subject,SenderName
Subject SenderName
------- ----------
List of Processes sergey.boris@gmail.com
Kazun, скажите пожалуйста:
1) воспринимает ли у Вас командлет «Send-MailMessage» параметр «-From» именно в виде «DisplayName <user@example.com>»?
2) тот же вопрос и по четырёхаргументному методу «.Send(string, string, string, string)» класса «System.Net.Mail.SmtpClient»: воспринимает ли он у Вас второй параметр («From») в виде «DisplayName <user@example.com>»?
1)Да.
PS > Send-MailMessage -From "TestUser <xxx@yandex.ru>" -To "NarodTest <yyy@narod.ru>" -Subject "Tests <> in Send-MailMessage" -Body "Ahtung" -SmtpServer smtp.yandex.ru
PS > $ou.GetNamespace("Mapi").GetDefaultFolder(6).Items | select -skip 1 To,subject,SenderEmailAddress,SenderName
To Subject SenderEmailAddress SenderName
-- ------- ------------------ ----------
NarodTest Tests <> in Send-MailMessage xxx@yandex.ru TestUser
2)Нет.
Kazun, Огромное спасибо:) Все заработало, просто у меня путь к папке содержал пробелы, я засунул путь в переменную все заработало))))
pavel.timiryanov@fb
20-11-2012, 17:51
Та же самая ошибка
Исключение при вызове "Send" с "4" аргументами: "Сбой при отправке сообщения эле ктронной почты.
" C:\Users\****\Desktop\sendmail.ps1:10 знак:17
+ $SMTPClient.Send <<<< ($EmailFrom, $EmailTo, $Subject, $Body)
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : DotNetMethodException
Подскажите как можно исправить
Kazun,
А что это за ошибка может?
Send-MailMessage : Mailbox unavailable. The server response was: 5.7.1 Client does not have permissions to send as this sender
At line:2 char:17
+ send-mailmessage <<<< -to "User01 <пример>" -from "User02 <пример>" -subject "Copy Files" -body $body -SmtpServer пример -UseSsl -Credential "User01"
+ CategoryInfo : InvalidOperation: (System.Net.Mail.SmtpClient:SmtpClient) [Send-MailMessage], SmtpException
+ FullyQualifiedErrorId : SmtpException,Microsoft.PowerShell.Commands.SendMailMessage
-to "User01 <пример>" - Это пользователь -Credential "User01" , то проверить права NT\Self на отправку или проверить разрешения send as \ send on behalf , в случае другого пользователя.
Kazun,
Так он просит пароль, я ввожу и дальше отваливается ошибка.
Kazun,
Все вопрос решился с админом почты =)
а можно чтобы он постоянно не спрашивал пароль?
$PlainPassword = "P@ssw0rd"
$SecurePassword = $PlainPassword | ConvertTo-SecureString -AsPlainText -Force
$UserName = "Domain\User"
$Credentials = New-Object System.Management.Automation.PSCredential -ArgumentList $UserName, $SecurePassword
Send-MailMessage -Credential $Credentials
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.