zoukankan      html  css  js  c++  java
  • Powershell Mail module, 发送outbox 里的全部邮件(一个.csv文件代表一封邮件)

    把creating mail代码写到调用处,往outbox写入 mailxxx.csv文件,入面记录了邮件的主要内容

    写入

    	#template
    			$TMP = IMPORT-CSV "$($dh)mailTEMPLATESMAIL.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)Mailmsg.txt" #   
    			#wirte-outbox,output mailxxx.csv 
    			ConvertTo-Mail -path "$($dh)mailoutboxMAIL$t.CSV" -mail $tmp
    发送,调用send-avmail.ps1发送邮件

    ."$($dh)MailSend-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)loglog$($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)moduleconfig_order"| Out-String )
    $hash = ( Invoke-Expression $content )
    #$hash 
    #sql parameters
    $content = ( Get-Content "$($dh)moduleconfig_sys"| Out-String )
    $hashsys = ( Invoke-Expression $content )
    &$rem|&$log
    try{ 
    	#Display 
        #sorting hashtable
        $hash.getEnumerator()|sort name|&$log
    	&$rem|&$log
    	"echo The Depoly will start immediately" |&$log
    	sleep 1|&$log
    	&$rem|&$log
    	#hit by order
    	 
    	foreach($e in $hash.getEnumerator()|sort name){
           if($dh -ne $pwd.path){
    		    Set-Location $dh
    	   }
        
    	    $key = $e.value
    	    "........................$key............." |&$log
    	    $cmd = "$($dh)moduleRunSqlcmdByKey.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)mailMailModule.psm1" -force 
    			$t = Get-Date -Format 'yyyyMMdd_hh_mm_ss' 
    			."$($dh)Mailmsg.ps1"
    			
    			"creating mail"
    			$msg ="FYI."
    			#template
    			$TMP = IMPORT-CSV "$($dh)mailTEMPLATESMAIL.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)Mailmsg.txt" #   
    			#wirte-outbox,output mailxxx.csv 
    			ConvertTo-Mail -path "$($dh)mailoutboxMAIL$t.CSV" -mail $tmp
    			#start sending
    			"praparing to send"
    			sleep 10
    			"sending email..."
    			."$($dh)MailSend-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)mailloglog$($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 "$pathMailModule.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 "$pathoutbox*.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 "$pathsent$($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 "$patherror$($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
    

    download:

    http://download.csdn.net/detail/wangzhpwang/8268477
    http://download.csdn.net/detail/wangzhpwang/8268511

  • 相关阅读:
    PDO 数据访问抽象层
    注册审核、批量删除
    分页查询
    会话用法
    封装成类
    多条件查询(复选框条件)
    IP子网划分
    redhat 用yum安装的apache、mysql一般默认安装在哪个目录下?
    nslookup
    linux 设置时间
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/5152067.html
Copyright © 2011-2022 走看看