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

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

ximerus 25-09-2011 18:54 1759913

Оправка отчета о копировании файлов, на почту.
 
День добрый. Мне тут ТЗ выдали на работе: написать скрипт на PowerShell чтобы он копировал *.xls файлы из одной папки в другую, при том перед началом копирования нужно получить дату изменения файлов, засунуть все это добро в e-mail и отправить отчет на почту мне.

1. Как получить дату текущего файла?

2. Как отправить почту с gmail-аккаунта, на такой же?

Kazun 25-09-2011 20:45 1759990

Код:

$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 1760258

Kazun, Молоток) Четко и красиво!

ximerus 26-09-2011 11:40 1760275

Kazun, да, реально четко и красиво, спасибо:)

ximerus 26-09-2011 13:43 1760362

У меня тут ошибка вывалилась:(

Код:

Исключение при вызове "Send" с "4" аргументами: "Сбой при отправке сообщения эле ктронной почты.
" C:\Users\****\Desktop\sendmail.ps1:10 знак:17
      + $SMTPClient.Send <<<< ($EmailFrom, $EmailTo, $Subject, $Body)   
      + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException   
      + FullyQualifiedErrorId : DotNetMethodException


Kazun 26-09-2011 14:04 1760376

Проверьте параметры,у меня все нормально работает.

Код:

$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


Iska 27-09-2011 12:13 1760947

Kazun, скажите пожалуйста:

1) воспринимает ли у Вас командлет «Send-MailMessage» параметр «-From» именно в виде «DisplayName <user@example.com>»?
2) тот же вопрос и по четырёхаргументному методу «.Send(string, string, string, string)» класса «System.Net.Mail.SmtpClient»: воспринимает ли он у Вас второй параметр («From») в виде «DisplayName <user@example.com>»?

Kazun 27-09-2011 13:09 1760977

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)Нет.

Iska 27-09-2011 13:58 1761007

Kazun, спасибо, ясно.

ximerus 03-10-2011 16:06 1764990

Kazun, Огромное спасибо:) Все заработало, просто у меня путь к папке содержал пробелы, я засунул путь в переменную все заработало))))

pavel.timiryanov@fb 20-11-2012 17:51 2029067

Та же самая ошибка

Исключение при вызове "Send" с "4" аргументами: "Сбой при отправке сообщения эле ктронной почты.
" C:\Users\****\Desktop\sendmail.ps1:10 знак:17
+ $SMTPClient.Send <<<< ($EmailFrom, $EmailTo, $Subject, $Body)
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : DotNetMethodException

Подскажите как можно исправить

AZABAZA 29-04-2015 10:37 2502137

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


Kazun 29-04-2015 10:53 2502147

-to "User01 <пример>" - Это пользователь -Credential "User01" , то проверить права NT\Self на отправку или проверить разрешения send as \ send on behalf , в случае другого пользователя.

AZABAZA 29-04-2015 10:57 2502148

Kazun,

Так он просит пароль, я ввожу и дальше отваливается ошибка.

AZABAZA 29-04-2015 11:43 2502168

Kazun,
Все вопрос решился с админом почты =)
а можно чтобы он постоянно не спрашивал пароль?

Kazun 29-04-2015 11:53 2502173

Код:

$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



Время: 10:04.

Время: 10:04.
© OSzone.net 2001-