Từ năm 2023 thì việc gởi mail bằng VBA không còn dễ dàng như trước đó, không chỉ riêng VBA mà với các ngôn ngữ khác như C#, ASPX, JAVA việc gởi mail bằng các code cũ sẽ chạy không được.
Lý do Google không cho phép gởi mail trực tiếp từ code mà thông qua ứng dụng thứ 3.
Có 1 giải pháp giúp bạn gởi mail an toàn nhanh nhất với VBA đó là code VBA excel sẽ kết nối với Google Sheet, sử dụng ngôn ngữ Script Google App để gởi mail (sẽ làm video tiếp theo).
CDO.Message là một đối tượng trong thư viện CDO (Collaboration Data Objects) được Microsoft lập trình ra để các lập trình viên sử dụng gởi mail thông qua phương thức SMTP. Nếu không sử dụng SMTP thì bạn cần phải gởi thông qua thư viện có sẵn trong Outlook, nhưng điều này gây bất tiện trong việc máy tính phải được cấu hình email vào Outlook từ trước. Tóm lại CDO.Message là 1 thư viện hay của Microsoft tạo ra để lập trình gởi mail thông qua code vba Excel,vba Access, hoặc Word
SMTP viết tắt từ Simple Mail Transfer Protocol, là một giao thức chuẩn dùng để gửi email giữa các máy chủ thư điện tử qua mạng Internet. SMTP được sử dụng phổ biến để truyền tải thư điện tử từ ứng dụng email (như Outlook, Thunderbird, hay ứng dụng email trên smartphone) đến máy chủ thư điện tử và từ máy chủ này đến máy chủ khác.
Cách hoạt động của SMTP
Khi bạn gửi một email từ một ứng dụng email, SMTP sẽ xử lý quá trình truyền tải email từ ứng dụng đó đến máy chủ SMTP của bạn. Sau đó, máy chủ SMTP sẽ chuyển tiếp email này đến máy chủ của người nhận.
SMTP hoạt động theo mô hình client-server, trong đó:
Client: là ứng dụng hoặc máy chủ email muốn gửi thư.
Server: là máy chủ nhận yêu cầu gửi email và xử lý để chuyển tiếp hoặc phân phối email đến máy chủ của người nhận.
Code VBA
Dim obj_GOI_MAIL As Object
Dim obj_CAU_HINH_MAIL_GOI As Object
'Dim SMTP_Config As Variant
'
Dim v_TieuDeMail As String
Dim v_Tu_Email As String
Dim v_Den_Email As String
Dim v_Mail_CC As String
Dim v_Mail_BCC As String
Dim v_NOI_DUNG_GOI As String
' Cau hinh email goi
v_TieuDeMail = "TIEU DE EMAIL"
v_Tu_Email = "xx@gmail.com"
v_Den_Email = "yy@gmail.com"
v_Mail_CC = "" ' Neu co hay nhap vao
v_Mail_BCC = "" ' Neu co hay nhap vao
v_NOI_DUNG_GOI = "NOI DUNG MAIL GOI...."
' Create the CDO objects
Set obj_GOI_MAIL = CreateObject("CDO.Message")
Set obj_CAU_HINH_MAIL_GOI = CreateObject("CDO.Configuration")
' Nap gia tri vao bien obj_CAU_HINH_MAIL_GOI
With obj_CAU_HINH_MAIL_GOI.Fields
.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.gmail.com"
.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 465 ' Typically 25, 465, or 587
.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
.Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = v_Tu_Email
.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "pass mail send"
.Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True ' Set to True if using SSL
.Update
End With
' THUC HIEN GOI MAIL
With obj_GOI_MAIL
Set .Configuration = obj_CAU_HINH_MAIL_GOI
.Subject = v_TieuDeMail
.From = v_Tu_Email
.To = v_Den_Email
.CC = v_Mail_CC
.BCC = v_Mail_BCC
.TextBody = v_NOI_DUNG_GOI
.Send
End With
' THONG BAO KHI GOI THANH CONG !
MsgBox "Email sent successfully!"
' DON DEP BO NHO SAU KHI GOI MAIL XONG
Set obj_GOI_MAIL = Nothing
Set obj_CAU_HINH_MAIL_GOI = Nothing
Ví dụ code gởi mail với code VBA Excel mới nhất