2012年3月1日 星期四

利用Power Shell完成從SQL撈資料+自動寄信功能

這次主要的功能其實就是完成自動寄信(所謂垃圾信程式     哈)

簡單的流程就是先建立一個SQL連線之後,
把需要呈現的資料及寄件者名單撈出來,
再下來就是依條件處理寄信囉~簡潔明瞭吧!


首先是SQL連接的方式:
#Connection Object
$connector = New-Object System.Data.SqlClient.SqlConnection(
    "Password=********;Persist Security Info=True;User ID=sa;Initial Catalog=AdventureWorks;Data Source=DEEVUS-PC\SQLEXPRESS"
)


接著使用DataAdapter建立連線以及用DataSet接得到的資料
#使用需要的query字串建立連線&撈資料
$dataAdapter = New-Object System.Data.SqlClient.SqlDataAdapter($query, $connector )
#宣告DataSet
$dataSet = New-Object System.Data.DataSet
#接資料囉~
$dataAdapter.Fill($dataSet ) | Out-Null
#記得關閉連線
$connector .Close()




另外提供Out-系列使用用途:

Out-Default 將輸出發送到預設的格式化程序和預設的輸出cmdlet。
Out-File 將輸出發送到檔案。
Out-GridView 將輸出發送到單獨視窗中的grid。
Out-Host 將輸出發送到命令行。
Out-Null 刪除輸出,不將其傳送到控制台。
Out-Printer 將輸出送至印表機。
Out-String 將對象作為一列字串送到主機。

個人是習慣使用Out-Default,可以看到自己到底撈到了幾筆,很明確。
當然如果已經確定資料正確了的話,就可以使用Out-Null刪除輸出,
在寫到其他階段的時候比較不會被前面的資料干擾判斷。


接著...資料都取得了~就該處理我們拿到的資料囉~
開始寄信前的準備!
$emailbody = $dataSet.Tables[0] |
     Select-Object Name, Phone, EmailAddress |
     ConvertTo-HTML -head $style


使用內建的ConvertTo-HTML就可以很方便的把檔案轉為HTML的瀏覽器格式!
將所需的信件style加入HTML的head tag中,改變信件的預設樣式。

接著設定信件table style
#HTML Email Styles
$style = "<style type='text/css'>"
$style = $style + "BODY{background-color:#FFFFFF;font-family:Verdana;}"
$style = $style + "TABLE{border-width: 1px;border-style: solid;border-color: black;border-collapse: collapse;font-size:12px;}"
$style = $style + "TH{border-width: 1px;padding: 0px;border-style: solid;border-color: black;background-color:#D3D3D3 }"
$style = $style + "TD{border-width: 1px;padding: 0px;border-style: solid;border-color: black;background-color:#FFFFFF }"
$style = $style + "</style>"


信件內容會自動撐大喔~很有趣



再來...終於進入我們寄件的步驟啦!
設定寄件者、收件者、信件主題
$emailFrom = "12345@test.com"
$emailTo = "test@test.com"
$subject = "信件主題"


信件本體

$message = New-Object Net.Mail.MailMessage($emailFrom, $emailTo, $subject, $emailbody)
#這是用來確保信件會是HTML格式
$message.IsBodyHTML = $true


設定SMTP:

$smtpServer = "smtp.xxx.xxx.xxx"
$smtp = New-Object Net.Mail.SmtpClient($smtpServer)

設定完之後就寄件囉!
$smtp.Send($message)



---------------------------------------------------------------------------------------------

參考資料:
自動寄信原文(主要參考資料)
http://www.simonhartcher.com/?p=146

開啟SQL連線作法

http://blog.jeffreymcmanus.com/762/database-queries-with-windows-powershell/

沒有留言:

張貼留言