Gửi email C++
Cách sử dụng C ++ và SMTP để gửi email có tệp đính kèm hoặc iCalendar
Tải về Miễn Phí Thử NghiệmTheo quy định, giao thức SMTP được sử dụng để gửi tin nhắn email. Bạn cần truy cập vào máy chủ SMTP để gửi tin nhắn. Bạn cần tìm địa chỉ của máy chủ SMTP trên mạng, xác định cổng và loại mã hóa, đăng nhập và phương thức ủy quyền. Một số nhà cung cấp email cũng yêu cầu bạn bật quyền truy cập vào máy chủ SMTP trong cài đặt tài khoản của bạn. Ngoài ra, nếu bạn không thoải mái khi triển khai ủy quyền OAuth trong phần mềm của mình, bạn có thể thử tạo mật khẩu riêng cho ứng dụng trong cài đặt tài khoản của mình.
Vì vậy, nếu bạn đã thực hiện tất cả các công việc chuẩn bị, đã đến lúc bắt đầu gửi tin nhắn. Bạn có thể sử dụng thư viện Aspose.Email cho C++ cho việc này. Hãy xem xét ví dụ đơn giản nhất:
auto smtpClient = MakeObject<SmtpClient>(u"smtp.gmail.com", u"login", u"password", SecurityOptions::SSLAuto);
smtpClient->Send(u"login@gmail.com", u"to@gmail.com", u"subject", u"body");
Sử dụng tùy chọn này nếu bạn muốn gửi một email văn bản đơn giản.
Gửi email có tệp đính kèm bằng C ++
Nếu bạn cần gửi một email phức tạp bằng C ++, lớp MailMessage chắc chắn sẽ có ích. Ví dụ: để gửi một tin nhắn tương tự như trước:
auto message = MakeObject<MailMessage>(u"login@gmail.com", u"to@aspose.com", u"subject", u"body");
smtpClient->Send(message);
Lớp MailMessage là một công cụ tuyệt vời. Nó cho phép bạn gửi tin nhắn được lưu trữ trong các định dạng tệp EML và MSG (Định dạng tin nhắn Outlook). Bạn cũng có thể sử dụng định dạng này để gửi tệp đính kèm hoặc thậm chí các đối tượng iCalendar để thiết lập hoặc xác nhận chấm công. MailMessage cho phép bạn tinh chỉnh danh sách người nhận, người nhận Cc và BCC. Bạn có thể gửi email với đánh dấu HTML. Bạn cũng có thể đánh dấu tin nhắn bằng nhiều cờ khác nhau trước khi gửi, thêm siêu dữ liệu, mã hóa nó, v.v.
Tại sao mọi người chọn Aspose.Email cho C ++ để gửi email?
Có, Aspose.Email cho C ++ không chỉ là một tiện ích để gửi tin nhắn email. Đây là một giải pháp toàn diện cung cấp hỗ trợ toàn diện cho nhiều tác vụ liên quan đến gửi, nhận, lưu trữ và xử lý email. Và bạn có thể chắc chắn rằng khi thực hiện các tác vụ này, bạn sẽ không gặp phải những hạn chế của thư viện. Chúng tôi đã nghiên cứu chủ đề này trong nhiều năm và không ngừng mở rộng chức năng của nó.
Bạn có thể đã bắt gặp các thư viện nhỏ đã xuất hiện tương đối gần đây. Họ dễ dàng và tự nhiên giải quyết một vấn đề đơn giản mà nhiều người dùng phải đối mặt. Nhưng ngay khi bạn bước sang một bên một chút, bạn nhận ra rằng bằng cách tiếp tục sử dụng cái khiêm tốn này, bạn buộc phải liên tục rào chắn nạng, một số mô-đun để vượt qua các hạn chế thư viện, bộ điều hợp được thiết kế để kết bạn với thư viện nhỏ của bạn với một thư viện nhỏ khác, v.v… Và bây giờ, giải pháp nhỏ gọn của bạn không còn tiện lợi nữa. Hơn nữa, bạn gửi nó đến máy chủ, nơi nó thường xuyên và liên tục tự bắn vào chân, bởi vì chưa ai thử nghiệm một vườn thú về nạng và tích hợp như vậy trước bạn. Và cho dù bạn cố gắng đến đâu, sớm hay muộn bạn vẫn sẽ gặp phải những hạn chế của thư viện này. Và bạn phải tìm kiếm một cái gì đó mới. Vì vậy, khi nói đến việc làm việc với email, bạn có thể muốn xem xét Aspose.Email cho C ++!
Chúng tôi cung cấp cho bạn không chỉ một khách hàng để làm việc với SMTP. Đầu tiên, nó không phải là giao thức duy nhất để gửi email bằng C ++. Với sản phẩm của chúng tôi, bạn có thể gửi email bằng Exchange EWS và Microsoft Graph!
Chúng tôi đã nói với bạn về các khả năng của MailMessage trong bài viết này. Nhưng đây không phải là công cụ duy nhất để chuẩn bị thư gửi. Bạn có thể:
- tạo chữ cái từ một mẫu bằng TemplateEngine;
- giải nén các thùng chứa bằng chữ cái, nhờ sự hỗ trợ của các định dạng OST, PST và MBOX;
- tải xuống thư từ hộp thư bằng sự hỗ trợ của các giao thức IMAP, POP3, Exchange EWS và WebDAV, cũng như Microsoft Graph;
- chuyển đổi email từ định dạng này sang định dạng khác.
Bạn có thể dễ dàng nhận được thư bằng giao thức Exchange Ews. Nó sẽ ở định dạng MAPI. Nhưng bạn có thể dễ dàng chuyển đổi nó sang định dạng EML, điều này sẽ cho phép bạn gửi nó sau này qua giao thức SMTP. Đồng thời, bạn có thể thay đổi danh sách người nhận hoặc người gửi thư bất cứ lúc nào.
Gửi email bằng C ++ và SMTP hoạt động như thế nào?
Cấu hình SMTP
Khoảnh khắc bạn tạo một phiên bản của lớp SmtpClient, không có gì đặc biệt xảy ra. Bạn chỉ cần chỉ định số lượng cài đặt sẽ cho phép bạn kết nối với máy chủ SMTP trong tương lai để gửi tin nhắn. Tất cả những điều kỳ diệu xảy ra trong cuộc gọi đầu tiên đến send
phương pháp. Điều gì đang xảy ra tại thời điểm này?
Trong thực tế, tất cả phụ thuộc vào cài đặt bạn đã chỉ định. Hãy xem xét một số lựa chọn. Giả sử bạn đã chỉ định máy chủ máy chủ nhưng chưa chỉ định cổng và loại mã hóa. Trong trường hợp này, cơ chế lựa chọn cài đặt tự động sẽ bắt đầu. Cơ chế này bao gồm các nỗ lực liên tiếp để kết nối với máy chủ SMTP bằng các cổng tiêu chuẩn và các thuật toán mã hóa tương ứng. Đầu tiên, một nỗ lực được thực hiện để kết nối với máy chủ qua một kênh được mã hóa. Nhưng nếu nó thất bại, cơ chế sẽ cố gắng thiết lập một kết nối không được mã hóa. Nếu bạn không muốn sử dụng phiên bản không được mã hóa của giao thức, hãy chỉ định SecurityOptions.SSL_AUTO
thiết lập. Cài đặt này cũng cho phép bạn chọn cài đặt máy chủ, nhưng chỉ kiểm tra các kênh được mã hóa.
Nếu có thể thiết lập kết nối với máy chủ, thì một nỗ lực ủy quyền được thực hiện. Nếu ủy quyền không thành công, mã lỗi sẽ được lưu cho tương lai. Người phù hợp sẽ cố gắng kết nối theo những cách khác. Tin nhắn sẽ được gửi nếu bạn có thể kết nối và đăng nhập. Nếu kết nối không thành công, người dùng sẽ nhận được mã lỗi ủy quyền (nếu mã được lưu trong quá trình lựa chọn). Vì vậy, người dùng sẽ có thể hiểu rằng anh ta đã nhập sai mật khẩu hoặc mắc một số lỗi khác. Nếu không có tùy chọn nào cho cổng và loại mã hóa phù hợp và chúng tôi thậm chí không thực hiện được nỗ lực ủy quyền, người dùng sẽ nhận được lỗi thông báo về cài đặt máy chủ không chính xác.
Nhân tiện, cần lưu ý rằng SMTPClient của chúng tôi (giống như tất cả các máy khách khác trong thư viện của chúng tôi) có thể kết nối với máy chủ SMTP thông qua proxy. Bạn cũng có thể chỉ định cài đặt máy chủ proxy trong quá trình khởi tạo.
Ủy quyền máy khách SMTP
SmtpClient hỗ trợ nhiều hơn chỉ các phương thức kết nối khác nhau. Nó cũng hỗ trợ các phương pháp ủy quyền khác nhau. Ví dụ: bạn có thể sử dụng cơ chế OAuth. Để làm điều này, chúng tôi cung cấp một số công cụ cùng một lúc.
Trước hết, đó là TokenProvider. Đây là lớp chứa tất cả dữ liệu cần thiết để lưu trữ và làm mới mã thông báo OAuth. Trong trường hợp này, bạn phải tự thực hiện ủy quyền OAuth và lưu tất cả thông tin cần thiết nhận được từ máy chủ OAuth. RefreshToken đóng một vai trò quan trọng ở đây. Đây là một mã thông báo bổ sung được phát hành bởi máy chủ ủy quyền, cùng với AccessToken. Sự khác biệt của họ là AccessToken, theo quy định, chỉ có giá trị trong một khoảng thời gian nhất định. Trong khi đó RefreshToken có giá trị lâu hơn, hoặc thậm chí vô thời hạn (cho đến khi người dùng thu hồi nó). Nhờ RefreshToken, lớp TokenProvider luôn có thể làm mới AccessToken nếu lớp sau không còn hợp lệ.
Một tùy chọn khác là giao diện iTokenProvider. Trong trường hợp này, bạn không chỉ có thể tự triển khai cơ chế OAuth mà còn chuyển nó cho SmtpClient để nó tự sử dụng nó khi cần thiết.
Cần lưu ý rằng cơ chế OAuth không phải lúc nào cũng cần thiết. Đôi khi việc đăng nhập bằng tên người dùng và mật khẩu sẽ dễ dàng hơn nhiều. Và đối với điều này, bạn hoàn toàn không cần phải cấu hình lại tài khoản email của mình, từ chối ủy quyền hai yếu tố, v.v… Có một giải pháp an toàn hơn - đây là mật khẩu riêng cho ứng dụng. Để tận dụng tính năng này, bạn nên xem xét cài đặt tài khoản email của mình. Nhiều khả năng, mật khẩu cho ứng dụng sẽ được tạo tự động khi bạn thiết lập nó trong tài khoản của mình. Đừng quên lưu nó ở đâu đó. Chúng tôi cũng khuyên bạn nên hạn chế quyền của ứng dụng của bạn càng nhiều càng tốt trong quá trình cấu hình. Tất nhiên, nếu kẻ tấn công có quyền truy cập vào mật khẩu này, anh ta sẽ không thể chiếm dụng tài khoản của bạn, nhưng anh ta vẫn có thể làm rất nhiều điều khó chịu. Và ở đây bạn không thể làm bất cứ điều gì, bởi vì mật khẩu là thứ duy nhất bảo vệ dữ liệu của bạn khỏi những kẻ xâm nhập. Nói chung, công cụ này rất thuận tiện, nhưng làm giảm tính bảo mật của tài khoản của bạn, hãy tự chịu rủi ro khi sử dụng nó.
Gửi email qua SMTP với C ++
Vì vậy, kết nối với máy chủ được thiết lập và ủy quyền đã thành công. Đã đến lúc gửi thư. Để gửi, một đối tượng của lớp MailMessage được sử dụng. Về mặt kỹ thuật, bạn chỉ có thể chuyển tất cả dữ liệu cần thiết đến phương thức gửi. Nhưng, trên thực tế, chúng vẫn sẽ được thu thập trong đối tượng MailMessage. Hơn nữa, nhờ khả năng của lớp MailMessage để tuần tự hóa sang định dạng EML, chúng tôi có được luồng dữ liệu cần thiết có thể được truyền đến máy chủ SMTP của chúng tôi. Do đó, chúng tôi cung cấp cho máy chủ một lệnh để gửi một lá thư và chuyển tất cả nội dung của bức thư cho nó dưới dạng dữ liệu văn bản. Nếu dữ liệu nhị phân được truyền trong thư, ví dụ, dưới dạng tệp đính kèm, dữ liệu này được mã hóa ở định dạng Base64 và siêu dữ liệu của chữ cái cho biết rằng người nhận sẽ cần giải mã lại nó. Máy chủ SMTP có thể kiểm tra tính chính xác của tin nhắn nhận được (ví dụ: kiểm tra trường FROM với tài khoản của người gửi trên máy chủ), cũng như bổ sung siêu dữ liệu của tin nhắn theo quyết định của mình. Sau đó, máy chủ sẽ gửi email cho người nhận, một danh sách mà nó cũng sẽ nhận được từ siêu dữ liệu của email.