C:\Reports\의 각 하위 폴더에 있는 모든 파일을 첨부 파일로 함께 이메일로 보내는 PowerShell 스크립트를 작성하려고 합니다. 예를 들어, 하위 폴더가 a.txt, b.xml 및 c.jpg를 포함하는 C:\Reports\ABC이고 d.txt, e.xml 및 f.pdf를 포함하는 C:\Reports\DEF인 경우 코드는 한 이메일에는 .txt, b.xml 및 c.jpg가 있고 다른 이메일에는 d.txt, e.xml 및 f.pdf가 있습니다. 나는 아래 코드를 작성했습니다 :-
$Directory=Get-ChildItem "C:\Reports\" -Directory
$Cred = Get-Credential
Foreach($d in $Directory) {
Write-Host "Working on directory $($d.FullName)..."
$files=Get-ChildItem -Path "$($d.FullName)"
cd $d.Fullname
Send-MailMessage -From "[email protected]" -To "[email protected]" -Subject "test" -SmtpServer "smtp.gmail.com" -Port "587" -Attachments $files -BodyAsHtml "test msg" -Credential $Cred -UseSsl
}
그러나 이는 각 하위 폴더의 마지막 파일만 첨부한 후 다음 폴더와 이메일로 이동하는 것처럼 보입니다. 내가 하려는 작업을 달성하기 위해 Get-ChildItem - 파일을 Send-MailMessage - 첨부 파일과 함께 올바르게 사용할 수 있는 방법이 궁금합니다.
답변1
다음은 (테스트되지 않은) 코드입니다:
#Connection Details
$username="john"
$password="password"
$smtpServer = "mail.server.local"
$msg = new-object Net.Mail.MailMessage
#Change port number for SSL to 587
$smtp = New-Object Net.Mail.SmtpClient($SmtpServer, 25)
#Uncomment Next line for SSL
#$smtp.EnableSsl = $true
$smtp.Credentials = New-Object System.Net.NetworkCredential( $username, $password )
#From Address
$msg.From = "[email protected]"
#To Address, Copy the below line for multiple recipients
$msg.To.Add("[email protected]")
#Message Body
$msg.Body="Please See Attached Files"
#Message Subject
$msg.Subject = "Email with Multiple Attachments"
#your file location
$files=Get-ChildItem "C:\Reports\"
Foreach($file in $files)
{
Write-Host "Attaching File :- " $file
$attachment = new-object Net.Mail.Attachment -ArgumentList $file.FullName
$msg.Attachments.Add($attachment)
}
$smtp.Send($msg)
$attachment.Dispose();
$msg.Dispose();