เทคนิคการส่งเมล์จาก VBA

หลายท่านต้องการส่งข้อมูล SCADA ให้ผู้รับทางเมล์ วันนี้มีเทคนิคในการส่งเมล์ด้วย VBA ง่าย ๆ สามารถนำไปใช้กับ MS Excel หรือ VB หรือ SCADA ที่สนับสนุน VBA ได้

 

หลักการ

1. สร้างไฟล์ PowerShell ด้วยโค้ด VB หรือ VBA สำหรับส่งเมล์

2. เรียกใช้ไฟล์ PowerShell จากข้อ 1 ด้วย VB หรือ VBA

 

พื้นฐานการส่งเมล์ด้วย PowerShell

เราสามารถใช้ Windows PoweShell ในการส่งเมล์ได้โดยสร้างไฟล์ ps1 ขึ้นมาดังนี้ (ตัวอย่างนี้มาจาก howtogeek โดยใช้ Gmail)

 

$EmailFrom = “yourgmailadress@gmail.com”
$EmailTo = “destination@somedomain.com”
$Subject = “The subject of your email”
$Body = “What do you want your email to say”
$SMTPServer = “smtp.gmail.com”
$SMTPClient = New-Object Net.Mail.SmtpClient($SmtpServer, 587)
$SMTPClient.EnableSsl = $true
$SMTPClient.Credentials = New-Object System.Net.NetworkCredential(“usr”, “pass”);
$SMTPClient.Send($EmailFrom, $EmailTo, $Subject, $Body)

 

โดยให้กำหนดเมล์และ SMTP ที่ใช้ให้เรียบร้อยทั้งผู้ส่ง($EmailFrom)ผู้รับ($EmailTo) จากตัวอย่างด้านบนใช้ SMTP ของ Gmail (smtp.gmail.com)

พื่นฐานการเรียกใช้ PowerShell จาก VB, VBA

การเรียกใช้ไฟล์ PowerShell จาก VB, VBA ทำได้ดังตัวอย่าง
 
Dim retval 
retval = Shell("powershell ""C:\MyTest.ps1""", 1)
 

พื้นฐานการเขียน Text File

เราจำเป็นต้องเรียนรู้การเขียน Text file เพื่อสร้างไฟล์ PowerShell 
ตัวอย่างการทเขียน Text File 
 
Open "C:\example.txt" For Output As #1

Print #1, “I come from a land down under”

Close #1

 

การอนุญาตให้ใช้ PowerShell ใน Windows

คำสั่งเปลี่ยน Policy ของ Windows PowerShell เราจะใช้หลักการนี้ในโค้ดด้วย

Set-ExecutionPolicy RemoteSigned

 

 

ตัวอย่างโค้ดใน Button เพื่อส่งเมล์ด้วย PowerShell

สร้างโปรแกรมใน Excel หรือ VB หรือ VBA อื่น ๆโดยวางปุ่ม Command Button แล้วเขียนโค้ดดังแสดงด้านล่าง จากนั้นทดสอบรันแล้วคลิ้กปุ่มเพื่อส่งอีเมล์ ทั้งนี้เราจะต้องสร้างโฟลเดอร์ชื่อ testmail ใน C:\ เสียก่อนเพื่อใช้กับโค้ดตัวอย่างนี้


Private Sub CommandButton1_Click()

Dim retval

Open "C:\testmail\MyTest.ps1" For Output As #1

Print #1, "$EmailFrom = ""ชื้ออีเมล์ของGmail@gmail.com"""
Print #1, "$EmailTo = ""อีเมล์ผู้รับเช่น ABC@hotmail.com"""
Print #1, "$Subject = ""subject """
Print #1, "$Body = ""****ข้อความที่ต้องการส่ง***"""
Print #1, "$SMTPServer = ""smtp.gmail.com"""
Print #1, "$SMTPClient = New-Object Net.Mail.SmtpClient($SmtpServer, 587)"
Print #1, "$SMTPClient.EnableSsl = $true"
Print #1, "$SMTPClient.Credentials = New-Object System.Net.NetworkCredential(""ชื่อusername"", ""พาสเวิร์ด"");"
Print #1, "$SMTPClient.Send($EmailFrom, $EmailTo, $Subject, $Body)"

Close #1

retval = Shell("powershell Set-ExecutionPolicy RemoteSigned", 1)
retval = Shell("powershell ""C:\testmail\MyTest.ps1""", 1)

End Sub

Advertisements
This entry was posted in Uncategorized. Bookmark the permalink.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s