|
เมื่อวานแอดมินแจกโค้ดฟรีในการส่งอีเมล์บน VB6 ด้วยการใช้งาน CDO (Collaboration Data Objects) วันนี้จัดโค้ด VB.NET โดยที่สามารถแนบไฟล์ (Attachment) ไปพร้อมๆกันได้หลายไฟล์ ทั้งกราฟิคและไฟล์เอกสาร ... อย่ารอช้าไปดูโค้ดกันเลย
โค้ดหลักในการส่งเมล์ ...
- ' / --------------------------------------------------------------------------
- Public Sub SendMail()
- '//
- Try
- Dim SmtpServer As New SmtpClient
- Dim MyMail As New MailMessage()
- With SmtpServer
- .UseDefaultCredentials = False
- .Credentials = New Net.NetworkCredential(txtUsername.Text, txtPassword.Text)
- .Port = Val(txtPort.Text)
- .EnableSsl = chkSSL.CheckState
- .Host = txtServer.Text
- End With
- '//
- MyMail = New MailMessage()
- MyMail.From = New MailAddress(txtFromMail.Text, txtFromName.Text)
- MyMail.To.Add(txtToMail.Text)
- MyMail.Subject = txtSubject.Text
- MyMail.IsBodyHtml = False
- MyMail.Body = txtMessage.Text
- '// Attach Files
- If dgvData.RowCount > 0 Then
- For i = 0 To dgvData.RowCount - 1
- MyMail.Attachments.Add(New Net.Mail.Attachment(dgvData.Rows(i).Cells(0).Value))
- Next
- End If
- '// SENDING
- SmtpServer.Send(MyMail)
- Catch ex As Exception
- lblStatus.Text = ex.Message
- Return
- Finally
- lblStatus.Text = "Send mail successfully."
- '//
- txtSubject.Clear()
- txtMessage.Clear()
- dgvData.Rows.Clear()
- End Try
- End Sub
คัดลอกไปที่คลิปบอร์ด
มาดูโค้ดแบบฉบับเต็มกันเถอะ ...
- #Region "ABOUT"
- ' / --------------------------------------------------------------------------
- ' / Developer : Mr.Surapon Yodsanga (Thongkorn Tubtimkrob)
- ' / eMail : thongkorn@hotmail.com
- ' / URL: http://www.g2gnet.com (Khon Kaen - Thailand)
- ' / Facebook: https://www.facebook.com/g2gnet (For Thailand)
- ' / Facebook: https://www.facebook.com/commonindy (Worldwide)
- ' / Purpose: Send mail with VB.NET (2010)
- ' / Microsoft Visual Basic .NET (2010)
- ' /
- ' / This is open source code under @CopyLeft by Thongkorn/Common Tubtimkrob.
- ' / You can modify and/or distribute without to inform the developer.
- ' / --------------------------------------------------------------------------
- #End Region
- Imports System.Net.Mail
- Imports System.IO
- '// Link Reference.
- '// https://docs.microsoft.com/en-us/dotnet/api/system.net.mail.smtpclient?redirectedfrom=MSDN&view=netframework-4.7.2
- Public Class frmSendMailNet
- '// Create MenuStrip @Run Time
- Dim _contextmenu As New ContextMenuStrip
- ' / --------------------------------------------------------------------------
- Private Sub frmSendMail_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
- '// SMTP Setting
- Me.txtServer.Text = "smtp.gmail.com"
- Me.txtUsername.Text = "yourmail@gmail.com" '<-- Change value
- Me.txtPassword.Text = "yourpassword" '<-- Change value
- Me.txtPort.Text = "587" '"465"
- '// Body
- Me.txtFromName.Text = "Your Name" '<-- Change value
- Me.txtFromMail.Text = "yourname@gmail.com" '<-- Change value
- Me.txtToMail.Text = "tosomeone@mail.com" '<-- Change value
- Me.txtSubject.Text = "Test Mail " & Now()
- Me.txtMessage.Text = "This is a test Email from Visual Basic .Net (2010) on " & Now
- '// Setup DataGridView
- Call InitializeGrid()
- '// Add new contextmenu
- _contextmenu.Items.Add("Image Files")
- _contextmenu.Items.Add("Document Files")
- AddHandler _contextmenu.ItemClicked, AddressOf Contextmenu_Click
- End Sub
- ' / --------------------------------------------------------------------------
- Private Sub Contextmenu_Click(ByVal sender As System.Object, ByVal e As ToolStripItemClickedEventArgs)
- '// Choose item from contextmenu.
- Select Case e.ClickedItem.Text
- '// Browse Images
- Case "Image Files"
- _contextmenu.Visible = False
- Call AttachFiles("image")
- '// Browse Documents
- Case "Document Files"
- _contextmenu.Visible = False
- Call AttachFiles("document")
- End Select
- End Sub
- ' / --------------------------------------------------------------------------
- Private Sub btnAttach_Click(sender As System.Object, e As System.EventArgs) Handles btnAttach.Click
- '// Show contextmenu on button @run Time.
- _contextmenu.Show(btnAttach, 0, btnAttach.Height)
- End Sub
- ' / --------------------------------------------------------------------------
- Private Sub AttachFiles(ByVal FileType As String)
- Dim dlgFile As OpenFileDialog = New OpenFileDialog()
- Select Case FileType
- Case "image"
- ' / Open File Dialog
- With dlgFile
- .InitialDirectory = Application.StartupPath
- .Title = "Select images"
- .Filter = "Image types (*.jpg;*.png;*.gif;*.bmp)|*.jpg;*.png;*.gif;*.bmp"
- .FilterIndex = 1
- .RestoreDirectory = True
- End With
- Case "document"
- With dlgFile
- .InitialDirectory = Application.StartupPath
- .Title = "Select Document"
- .Filter = "Document types (*.doc;*.docx;*.xls;*.xlsx;*.pdf)|*.doc;*.docx;*.xls;*.xlsx;*.pdf"
- .FilterIndex = 1
- .RestoreDirectory = True
- End With
- End Select
- '/ Select OK after Browse ...
- If dlgFile.ShowDialog() = DialogResult.OK Then
- For i = 0 To dgvData.RowCount - 1
- '// Not Duplicate
- If dgvData.Rows(i).Cells(0).Value = dlgFile.FileName.ToString Then Return
- Next
- dgvData.Rows.Add()
- dgvData.Rows(dgvData.RowCount - 1).Cells(0).Value = dlgFile.FileName.ToString
- '// dgvData.Rows.Add(New String(){Value1, Value2, Value3})
- End If
- End Sub
- ' / --------------------------------------------------------------------------
- Private Sub btnSend_Click(sender As System.Object, e As System.EventArgs) Handles btnSend.Click
- '// Validate data before to sending them exclude attachments.
- For Each gb As GroupBox In Me.Controls.OfType(Of GroupBox)()
- For Each tb As TextBox In gb.Controls.OfType(Of TextBox)()
- If Trim$(tb.Text) = vbNullString Then
- lblStatus.Text = "Error: You must to enter all the field, exclude attachments."
- MessageBox.Show(lblStatus.Text)
- Exit Sub
- End If
- Next
- Next
- '//
- Call SendMail()
- '//
- End Sub
- ' / --------------------------------------------------------------------------
- Public Sub SendMail()
- '//
- Try
- Dim SmtpServer As New SmtpClient
- Dim MyMail As New MailMessage()
- With SmtpServer
- .UseDefaultCredentials = False
- .Credentials = New Net.NetworkCredential(txtUsername.Text, txtPassword.Text)
- .Port = Val(txtPort.Text)
- .EnableSsl = chkSSL.CheckState
- .Host = txtServer.Text
- End With
- '//
- MyMail = New MailMessage()
- MyMail.From = New MailAddress(txtFromMail.Text, txtFromName.Text)
- MyMail.To.Add(txtToMail.Text)
- MyMail.Subject = txtSubject.Text
- MyMail.IsBodyHtml = False
- MyMail.Body = txtMessage.Text
- '// Attach Files
- If dgvData.RowCount > 0 Then
- For i = 0 To dgvData.RowCount - 1
- MyMail.Attachments.Add(New Net.Mail.Attachment(dgvData.Rows(i).Cells(0).Value))
- Next
- End If
- '// SENDING
- SmtpServer.Send(MyMail)
- Catch ex As Exception
- lblStatus.Text = ex.Message
- Return
- Finally
- lblStatus.Text = "Send mail successfully."
- '//
- txtSubject.Clear()
- txtMessage.Clear()
- dgvData.Rows.Clear()
- End Try
- End Sub
- ' / --------------------------------------------------------------------------
- '// Setting is for DataGridView @Run Time.
- Private Sub InitializeGrid()
- '// Declare columns type.
- Dim Column0 As New DataGridViewTextBoxColumn()
- Dim Column1 As New DataGridViewButtonColumn
- '// Add new Columns
- dgvData.Columns.AddRange(New DataGridViewColumn() { _
- Column0, Column1 _
- })
- '// Startup
- With Column0
- .Name = "FileAttach"
- .HeaderText = "File Attachment"
- .Visible = True
- End With
- With Column1
- .HeaderText = ""
- .Text = "Remove"
- .Name = "btnDelRow"
- .UseColumnTextForButtonValue = True
- .Width = 60
- .ReadOnly = True
- End With
- '//
- With dgvData
- .RowHeadersVisible = False
- .AllowUserToAddRows = False
- .AllowUserToDeleteRows = False
- .AllowUserToResizeRows = False
- .MultiSelect = False
- .SelectionMode = DataGridViewSelectionMode.FullRowSelect
- .ReadOnly = True
- .Font = New Font("Tahoma", 9)
- ' Adjust the width each Column to fit.
- .AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill
- '.AutoResizeColumns()
- ' Adjust Header Styles.
- With .ColumnHeadersDefaultCellStyle
- .BackColor = Color.Navy
- .ForeColor = Color.White
- .Font = New Font("Tahoma", 9, FontStyle.Bold)
- End With
- End With
- End Sub
- ' / --------------------------------------------------------------------------
- Private Sub dgvData_CellClick(sender As Object, e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgvData.CellClick
- Select Case e.ColumnIndex
- '// Remove row (Button)
- Case 1
- Call DeleteRow(dgvData.Columns(e.ColumnIndex).Name)
- End Select
- End Sub
- ' / --------------------------------------------------------------------------
- ' / Remove select row.
- Private Sub DeleteRow(ByVal ColName As String)
- If ColName = "btnDelRow" Then
- '// Remove select row.
- dgvData.Rows.Remove(dgvData.CurrentRow)
- End If
- End Sub
- ' / --------------------------------------------------------------------------
- ' / Get numeric only.
- Function CheckDigitOnly(ByVal index As Integer) As Boolean
- Select Case index
- Case 48 To 57 ' 0 - 9
- CheckDigitOnly = False
- Case 8, 13 ' Backspace = 8, Enter = 13
- CheckDigitOnly = False
- Case Else
- CheckDigitOnly = True
- End Select
- End Function
- Private Sub btnExit_Click(sender As System.Object, e As System.EventArgs) Handles btnExit.Click
- Me.Close()
- End Sub
- Private Sub frmSendMail_FormClosed(sender As Object, e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
- Me.Dispose()
- Application.Exit()
- End Sub
- Private Sub txtServer_KeyPress(sender As Object, e As System.Windows.Forms.KeyPressEventArgs) Handles txtServer.KeyPress
- If e.KeyChar = Chr(13) Then
- e.Handled = True
- SendKeys.Send("{TAB}")
- End If
- End Sub
- Private Sub txtSubject_KeyPress(sender As Object, e As System.Windows.Forms.KeyPressEventArgs) Handles txtSubject.KeyPress
- If e.KeyChar = Chr(13) Then
- e.Handled = True
- SendKeys.Send("{TAB}")
- End If
- End Sub
- Private Sub txtToMail_KeyPress(sender As Object, e As System.Windows.Forms.KeyPressEventArgs) Handles txtToMail.KeyPress
- If e.KeyChar = Chr(13) Then
- e.Handled = True
- SendKeys.Send("{TAB}")
- End If
- End Sub
- Private Sub txtUsername_KeyPress(sender As Object, e As System.Windows.Forms.KeyPressEventArgs) Handles txtUsername.KeyPress
- If e.KeyChar = Chr(13) Then
- e.Handled = True
- SendKeys.Send("{TAB}")
- End If
- End Sub
- Private Sub txtPort_KeyPress(sender As Object, e As System.Windows.Forms.KeyPressEventArgs) Handles txtPort.KeyPress
- If e.KeyChar = Chr(13) Then
- e.Handled = True
- SendKeys.Send("{TAB}")
- Else
- e.Handled = CheckDigitOnly(Asc(e.KeyChar))
- End If
- End Sub
- Private Sub txtPassword_KeyPress(sender As Object, e As System.Windows.Forms.KeyPressEventArgs) Handles txtPassword.KeyPress
- If e.KeyChar = Chr(13) Then
- e.Handled = True
- SendKeys.Send("{TAB}")
- End If
- End Sub
- Private Sub txtFromName_KeyPress(sender As Object, e As System.Windows.Forms.KeyPressEventArgs) Handles txtFromName.KeyPress
- If e.KeyChar = Chr(13) Then
- e.Handled = True
- SendKeys.Send("{TAB}")
- End If
- End Sub
- Private Sub txtFromMail_KeyPress(sender As Object, e As System.Windows.Forms.KeyPressEventArgs) Handles txtFromMail.KeyPress
- If e.KeyChar = Chr(13) Then
- e.Handled = True
- SendKeys.Send("{TAB}")
- End If
- End Sub
- Private Sub chkSSL_KeyDown(sender As Object, e As System.Windows.Forms.KeyEventArgs) Handles chkSSL.KeyDown
- If e.KeyCode = 13 Then
- e.Handled = True
- SendKeys.Send("{TAB}")
- End If
- End Sub
- End Class
คัดลอกไปที่คลิปบอร์ด
ดาวน์โหลดโค้ดฉบับเต็ม VB.NET (2010) ได้ที่นี่ ...
|
ขออภัย! โพสต์นี้มีไฟล์แนบหรือรูปภาพที่ไม่ได้รับอนุญาตให้คุณเข้าถึง
คุณจำเป็นต้อง ลงชื่อเข้าใช้ เพื่อดาวน์โหลดหรือดูไฟล์แนบนี้ คุณยังไม่มีบัญชีใช่ไหม? ลงทะเบียน
x
|