Sau khi phần mềm đã chạy các chức năng chính thì cần viết chức năng báo cáo đến người quản lý. Đối với các loại báo cáo theo ngày thì sử dụng Gmail để gửi mail là cách tiện lợi, hiệu quả nhất.
Bước 1: setup Gmail để cho phép gửi mail qua SMTP
Đầu tiên các bạn cần tạo App Password để gửi mail, tức là tạo mật khẩu phụ và mật khẩu này sẽ sử dụng trong phần mềm (để không lộ password chính). Vào mục quản lý tài khoản Google
📌 Lưu ý: Bạn chỉ có thể tạo Mật khẩu ứng dụng khi tài khoản Google đã bật Xác minh 2 bước (2-Step Verification).
Bật xác minh 2 bước
Vào trang Bảo mật Google: https://myaccount.google.com/security
Bật xác minh 2 bước giống hình dưới, tuy nhiên do mỗi tài khoản mỗi khác nhau nên các bạn làm theo hướng dẫn của Google nhé
Truy cập trang tạo mật khẩu ứng dụng
Đăng nhập tài khoản Google của bạn, mở link:
https://myaccount.google.com/apppasswords
👉 Có thể bạn sẽ phải nhập lại mật khẩu Google để xác nhận.
Nhập tên ứng dụng để gợi nhớ (sau này muốn hủy bỏ password thì còn nhớ là dòng nào)
Tạo thành công sẽ như hình dưới
✅ Bạn không cần ghi nhớ, có thể xóa hoặc tạo mật khẩu mới bất cứ lúc nào.
Bước 2: viết code gửi mail
Đây là class TGMTemail, bạn chỉ cần gọi class này ra sử dụng là được. Mặc định Gmail sử dụng server là “smtp.gmail.com”, port là 587
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
using System.Linq; using System.Net; using System.Net.Mail; using System.Text; using System.Threading.Tasks; namespace TGMTcs { class TGMTemail { MailAddress m_fromEmail; SmtpClient m_client; static TGMTemail m_instance; //////////////////////////////////////////////////////////////////////////////////////////////////// public void Init(string fromEmail, string password, string server = "smtp.gmail.com", int port = 587) { m_fromEmail = new MailAddress(fromEmail); m_client = new SmtpClient(); m_client.Port = port; m_client.Host = server; m_client.Credentials = new NetworkCredential(fromEmail, password); m_client.EnableSsl = true; m_client.DeliveryMethod = SmtpDeliveryMethod.Network; } //////////////////////////////////////////////////////////////////////////////////////////////////// public static TGMTemail GetInstance() { if (m_instance == null) m_instance = new TGMTemail(); return m_instance; } //////////////////////////////////////////////////////////////////////////////////////////////////// public void SendMailAsync(string toEmail, string subject, string content, string attachmentPath = "") { Task.Run(() => SendMail(toEmail, subject, content, attachmentPath)); } //////////////////////////////////////////////////////////////////////////////////////////////////// public bool SendMail(string toEmail, string subject, string content, string attachmentPath = "") { try { MailAddress mailTo = new MailAddress(toEmail); MailMessage mail = new MailMessage(m_fromEmail, mailTo); mail.IsBodyHtml = false; mail.Subject = subject; mail.Body = content; mail.SubjectEncoding = Encoding.UTF8; mail.BodyEncoding = Encoding.UTF8; // Attach file if(attachmentPath != "") { Attachment attachment = new Attachment(attachmentPath); mail.Attachments.Add(attachment); } m_client.Send(mail); return true; } catch(Exception ex) { return false; } } } } |
Bước 3: tích hợp vào chương trình
1 2 3 |
TGMTemail mailer = new TGMTemail(); mailer.Init("email-cua-ban@gmail.com", "abcdxyz"); mailer.SendMailAsync("email-nguoi-nhan@gmail.com", "Báo cáo hàng ngày", "Báo cáo tổng hợp với 0 vấn đề xảy ra"); |
Vậy là xong, chúc các bạn thành công
Link GitHub
https://github.com/thigiacmaytinh/TGMTcs/tree/main/6.4_SendGmail