PowershellMailmodule,发送outbox里的所有邮件(一个.csv文件代
程序员文章站
2022-05-08 20:03:13
...
把creating mail代码写到调用处,往outbox写入 mailxxx.csv文件,入面记录了邮件的主要内容 写入 #template$TMP = IMPORT-CSV $($dh)\mail\TEMPLATES\MAIL.CSV #customization$TMP.CC = # $TMP.Subject =From Server $($( get-wmiobject Win32_ComputerSyste
把creating mail代码写到调用处,往outbox写入 mailxxx.csv文件,入面记录了邮件的主要内容
写入
#template $TMP = IMPORT-CSV "$($dh)\mail\TEMPLATES\MAIL.CSV" #customization $TMP.CC ="" # $TMP.Subject ="From Server $($( get-wmiobject Win32_ComputerSystem ).Name) By APOMS_TSQL_Deployment_Package $(get-date)." # test1 $TMP.Body ="$msg`nPlease Check The attachement for details. `nThanks`nBest Regards." # test ##clear if(Test-Path "$logfile.zip" ){ Remove-Item -Path "$logfile.zip" -Force|&$log } #create zip "zipping log.." export-Zip -sourcefiles "$logfile" -zipfilename "$logfile.zip"|&$log #add attachements $TMP.Attachments ="$logfile.zip,$($dh)\Mail\msg.txt" # #wirte-outbox,output mailxxx.csv ConvertTo-Mail -path "$($dh)\mail\outbox\MAIL$t.CSV" -mail $tmp发送,调用send-avmail.ps1发送邮件
."$($dh)\Mail\Send-AvEmail.ps1"
sample
cls; $dh = $pwd.path #$PSScriptRoot =Split-Path -Parent $MyInvocation.MyCommand.Definition $pv = $psversiontable.psversion.major $strDate = Get-Date -Format "yyyyMMdd" $logfile = "$($dh)\log\log$($strDate).txt" $log = {$input|Tee-Object -FilePath $logfile -Append} $filename = '' $rem = {$i = '';1..75|%{$i += '-'};$i } #getting order "start deploying `nat $(get-date)"|&$log "reading configuration file..."|&$log $content = ( Get-Content "$($dh)\module\config_order"| Out-String ) $hash = ( Invoke-Expression $content ) #$hash #sql parameters $content = ( Get-Content "$($dh)\module\config_sys"| Out-String ) $hashsys = ( Invoke-Expression $content ) &$rem|&$log try{ #Display "order`t type"|&$log &$rem|&$log 1..20|%{ if($hash["$_"] -ne $null){ "$($_)`t $($hash["$_"])"|&$log } } &$rem|&$log "echo The Depoly will start immediately" |&$log sleep 1|&$log &$rem|&$log #hit by order 1..20|%{ if($hash["$_"] -ne $null){ if($dh -ne $pwd.path){ cd $dh } $key = $hash["$_"] "........................$key............." |&$log $cmd = "$($dh)\module\RunSqlcmdByKey.ps1 " $dh|&$log Invoke-Expression -Command $cmd |&$log } } } catch { "$(Get-Date) error:$_.Exception"|&$log }finally{ "finish deploying at $(get-date)"|&$log $title = "Send mail" $message = "Do you want to Send the logfile to isoftstone?" $yes = New-Object System.Management.Automation.Host.ChoiceDescription "&Yes", ` "Send the logfile to isoftstone." $no = New-Object System.Management.Automation.Host.ChoiceDescription "&No", ` "Continue." $options = [System.Management.Automation.Host.ChoiceDescription[]]($yes, $no) $result = $host.ui.PromptForChoice($title, $message, $options, 1) switch ($result) { 0 { #import mail moudle "creating attachement" Import-Module "$($dh)\mail\MailModule.psm1" -force $t = Get-Date -Format 'yyyyMMdd_hh_mm_ss' ."$($dh)\Mail\msg.ps1" "creating mail" $msg ="FYI." #template $TMP = IMPORT-CSV "$($dh)\mail\TEMPLATES\MAIL.CSV" #customization $TMP.CC ="" # $TMP.Subject ="From Server $($( get-wmiobject Win32_ComputerSystem ).Name) By APOMS_TSQL_Deployment_Package $(get-date)." # test1 $TMP.Body ="$msg`nPlease Check The attachement for details. `nThanks`nBest Regards." # test ##clear if(Test-Path "$logfile.zip" ){ Remove-Item -Path "$logfile.zip" -Force|&$log } #create zip "zipping log.." export-Zip -sourcefiles "$logfile" -zipfilename "$logfile.zip"|&$log #add attachements $TMP.Attachments ="$logfile.zip,$($dh)\Mail\msg.txt" # #wirte-outbox,output mailxxx.csv ConvertTo-Mail -path "$($dh)\mail\outbox\MAIL$t.CSV" -mail $tmp #start sending "praparing to send" sleep 10 "sending email..." ."$($dh)\Mail\Send-AvEmail.ps1" |&$log } 1 {} } }send-avmail.ps1
#cls; #paths $dh = $pwd.path $pv = $psversiontable.psversion.major $strDate = Get-Date -Format "yyyyMMdd" #log $log_file = "$($dh)\mail\log\log$($strDate).txt" $log = {$input|Tee-Object -FilePath $log_file -Append} $filename = '' $rem = {$i = '';1..75|%{$i += '-'};$i} ################################START###################################### #remember $curentFile = '' $pop = $pwd $path = "$($dh)\Mail" CD $path #body try { if(Test-Path -Path $path ){ Import-Module "$path\MailModule.psm1" -force $t = Get-Date -Format 'yyyyMMdd_hh_mm_ss' $smtp = Get-Smtp -Path $path Get-Date|&$log #MAX 10 foreach($f in $(ls -Path "$path\outbox\*.csv"|sort-object -Property LastWriteTime -Descending|Select-Object -First 10)){ &$rem|&$log $curentFile = "$($f.fullname)" $curentFile|&$log #ONE CSV FILE PRESENT ON MAIL MESSAGE. $email = ConvertFrom-MailCsv -Path $curentFile "$($email.subject) is sending.." #SEND IT $smtp.send($email) "$($email.subject) is sent" #MOVE IT TO FOLDER SENT WHEN SUCCESS Move-Item -Path $curentFile -Destination "$path\sent\$($f.name)" #Tabke a break sleep 1 } } } catch { #log error message $_|&$log "error occur when sending mail:$curentFile"|&$log #MOVE IT TO FOLDER error WHEN fail Move-Item -Path $curentFile -Destination "$path\error\$($f.name)" } finally { #mark with date Get-Date|&$log #pop cd $pop }
mailmodule.psm1
function import-Zip { param([string]$zipfilename, [string] $destination) if(test-path($zipfilename)) { $shellApplication = new-object -com shell.application $zipPackage = $shellApplication.NameSpace($zipfilename) $destinationFolder = $shellApplication.NameSpace($destination) $destinationFolder.CopyHere($zipPackage.Items()) } } function export-Zip { param([string]$sourcefiles, [string]$zipfilename) dir $sourcefiles | foreach-object { if(!$zipfilename) { $zipfile = $_.FullName + ".zip"; } else { $zipfile = $zipfilename; } if(!(test-path($zipfile))) { set-content $zipfile ("PK" + [char]5 + [char]6 + ("$([char]0)" * 18)); ( dir $zipfile).IsReadOnly = $false; } $shellApplication = new-object -com shell.application; $zipPackage = $shellApplication.NameSpace($zipfile); $zipPackage.CopyHere(($_.FullName)); } } function ConvertFrom-MailCsv{ [CmdletBinding()] param( [System.String]$Path ) $Path = "$Path" if(Test-Path -Path $Path){ $tmp = Import-Csv -Path $Path $mail = New-Object System.Net.Mail.MailMessage #set the from addresses $MailAddress = $tmp.From $mail.From = New-Object System.Net.Mail.MailAddress($MailAddress) #set the destination addresses $MailtoAddress =$tmp.To $mail.To.Add($MailtoAddress) #set the CC addresses foreach($cca in $tmp.CC -split ','){ if($cca -ne "" -and $cca -ne $null){ $copy =New-Object System.Net.Mail.MailAddress("$cca"); $mail.CC.Add($copy); } } #set the content $mail.Subject = $tmp.Subject $mail.Priority = $tmp.Priority $mail.Body = $tmp.Body #set the attachments foreach($filename in $tmp.attachments -split ','){ if(Test-Path -Path $filename){ $attachment = new-Object System.Net.Mail.Attachment($filename) $mail.Attachments.Add($attachment) } } #add to array return $mail; } } function ConvertFrom-Mail{ [CmdletBinding()] param( [System.String]$Path ) begin { $pop = $pwd cd $Path } process { [System.Net.Mail.MailMessage[]]$mails = @() foreach($f in $(ls -Path $Path -Name "*.csv")){ $tmp = Import-Csv -Path $f $mail = New-Object System.Net.Mail.MailMessage #set the from addresses $MailAddress = $tmp.From $mail.From = New-Object System.Net.Mail.MailAddress($MailAddress) #set the destination addresses $MailtoAddress =$tmp.To $mail.To.Add($MailtoAddress) #set the CC addresses foreach($cca in $tmp.CC -split ','){ if($cca -ne "" -and $cca -ne $null){ $copy =New-Object System.Net.Mail.MailAddress("$cca"); $mail.CC.Add($copy); } } #set the content $mail.Subject = $tmp.Subject $mail.Priority = $tmp.Priority $mail.Body = $tmp.Body #set the attachments foreach($filename in $tmp.attachments -split ','){ if(Test-Path -Path $filename){ $attachment = new-Object System.Net.Mail.Attachment($filename) $mail.Attachments.Add($attachment) } } #add to array $mails += $mail; } return $mails; } end { cd $pop } } function Get-Smtp{ param( [System.String]$Path ) begin { $pop = $pwd cd $Path } process { $param = Import-Csv ".\smtp.csv" $smtpServer = $param.Server $smtpUser = $param.User $smtpPassword = $($param.Password|ConvertTo-SecureString) $smtp = New-Object System.Net.Mail.SmtpClient -argumentList $smtpServer #$smtp.Credentials = New-Object System.Net.NetworkCredential -argumentList $smtpUser,"Isoft1410"#$smtpPassword $smtp.Credentials = New-Object System.Net.NetworkCredential -argumentList $smtpUser, $smtpPassword return $smtp; } end { cd $pop } } function ConvertTo-Mail{ [CmdletBinding()] param( $mail, [System.String]$Path ) $mail|Export-Csv -Path $Path } Export-ModuleMember -Function ConvertFrom-Mail, ConvertTo-Mail,Get-Smtp, ConvertFrom-MailCsv,import-Zip,export-Zip