Powershell Mail module, 发送outbox 里的全部邮件(一个.csv文件代表一封邮件)
把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
#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)\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
download:
http://download.csdn.net/detail/wangzhpwang/8268477
http://download.csdn.net/detail/wangzhpwang/8268511
Powershell Mail module, 发送outbox 里的全部邮件(一个.csv文件代表一封邮件)的更多相关文章
- 从csv文件里取数据作为请求参数,和把返回数据放到一个csv文件
本来想把登陆后的token放到数组里,下一个参数用,但是貌似不支持数组,暂时先这样用了,并不麻烦,还很方便. 1.添加线程组等必要的东东后,添加csv配置器 2.进行设置 说明:csv文件设置不能读取 ...
- 读写文件:每次读入大文件里的一行、读写.CSV文件
读文件: 传统的读法.所有读出,按行处理: fp=open("./ps.txt", "r"); alllines=fp.readlines(); fp.clos ...
- .Net Mail SMTP 发送网络邮件
刚刚迈入"开发"的行列 一直有一个想法 我什么时候能给我庞大的用户信息数据库给每一位用户邮箱发送推荐信息呢? 刚迈入"编程两个月的时间" 我采用 SMTP 发送 ...
- Spring邮件服务:Maven + Spring SMTP Mail (可发送附件)
1 spring-smtp-mail.xml <?xml version="1.0" encoding="UTF-8"?> <beans x ...
- IMAP(Internet Mail Access Protocol,Internet邮件访问协议)以前称作交互邮件访问协议(Interactive Mail Access Protocol)。
IMAP(Internet Mail Access Protocol,Internet邮件访问协议)以前称作交互邮件访问协议(Interactive Mail Access Protocol).IMA ...
- 关于 PHPMailer 邮件发送类的使用心得(含多文件上传)
This is important for send mail PHPMailer 核心文件 class.phpmailer.php class.phpmaileroauth.php class.ph ...
- SpringBoot项目实现文件上传和邮件发送
前言 本篇文章主要介绍的是SpringBoot项目实现文件上传和邮件发送的功能. SpringBoot 文件上传 说明:如果想直接获取工程那么可以直接跳到底部,通过链接下载工程代码. 开发准备 环境要 ...
- Azure PowerShell (7) 使用CSV文件批量设置Virtual Machine Endpoint
<Windows Azure Platform 系列文章目录> 请注意: - Azure不支持增加Endpoint Range - 最多可以增加Endpoint数量为150 http:// ...
- 如何在一个div标签里显示出另一个网页? <iframe src=" http://www.baidu.com " width="800px" height="200px" scrolling="no" frameborder="0"> </iframe>
如何在一个div标签里显示出另一个网页? 用在div里用iframe,就像下面的代码 <iframe src=" http://www.baidu.com " width=& ...
随机推荐
- JS将秒换成时分秒
function formatSeconds(value) { var theTime = parseInt(value);// 秒 var theTime1 = 0;// 分 va ...
- Android Gradle Plugin指南(六)——高级构建定制
原文地址:http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Advanced-Build-Customization ...
- Swift - 使用位运算提取颜色,合并颜色
通常我们可以使用16进制的格式表示RGB颜色,比如0x2f88c0.通过位操作运算,能很方便的将其中的R,G,B颜色各部分分别提取出来.反之,也可以将R,G,B颜色值组合成一个完整的颜色. 1,提取颜 ...
- linux内核中send与recv函数详解
Linux send与recv函数详解 1.简介 #include <sys/socket.h> ssize_t recv(int sockfd, void *buff, size_t n ...
- java web解决表单重复提交问题
我们大家再进行web开发的时候,必不可少会遇见表单重复提交问题.今天就来给总结如何解决表单提交问题,欢迎大家交流指正. 首先我们在讨论如何解决表单重复提交问题之前先来解决三个问题:1.什么叫表单重复提 ...
- 用Delphi实现Windows的鼠标钩子函数
Delphi是基于PASCAL语言的Windows编程工具,功能十分强大.然而在Delphi的帮助文件中,对Windows API函数的说明沿袭了 VC 的格式,和VC一样,对很多API函数的用法没有 ...
- 一个很简单的php留言板。。。。搭建在sae上的。。。
我在sae上搭建了一个个人简历的页面: 有兴趣的可以访问 http://671coder.sinaapp.com/ 在做下面一个简单的留言板的时候,卡了我很久,虽然完全没用过php..但是还是最后勉 ...
- Tui-x简单介绍
1.什么是Tui-x Tui-x是一个创建cocos2d-x UI界面的解决方式,而builder用的则是FlashCS,通过使用jsfl来拓展FlashCS从而达到UI编辑器的功能.这个jsfl所做 ...
- Android中ListView.getCount()与ListView.getChildCount()区别和OnScrollListener()各个参数的区别
istView.getCount()(实际上是 AdapterView.getCount()) 返回的是其 Adapter.getCount() 返回的值.也就是“所包含的 Item 总个数”. Li ...
- Android开源框架AsyncHttpClient (android-async-http)使用
android-async-http 开源框架可以使我们轻松地获取网络数据或者向服务器发送数据,最关键的是,它是异步框架,在底层使用线程池处理并发请求,效率很高,使用又特别简单. 以往我们在安卓上做项 ...