Kirim email C++
Cara menggunakan C ++ dan SMTP untuk mengirim email dengan lampiran atau iCalendar
Unduh uji coba gratisSebagai aturan, protokol SMTP digunakan untuk mengirim pesan email. Anda memerlukan akses ke server SMTP untuk mengirim pesan. Anda perlu menemukan alamat server SMTP di jaringan, menentukan port dan jenis enkripsi, login dan metode otorisasi. Beberapa penyedia email juga mengharuskan Anda untuk mengaktifkan akses ke server SMTP di pengaturan akun Anda. Selain itu, jika Anda tidak nyaman menerapkan otorisasi OAuth di perangkat lunak Anda, Anda dapat mencoba membuat kata sandi terpisah untuk aplikasi di pengaturan akun Anda.
Jadi, jika Anda telah melakukan semua pekerjaan persiapan, saatnya untuk mulai mengirim pesan. Anda dapat menggunakan pustaka Aspose.Email untuk C++ untuk ini. Pertimbangkan contoh paling sederhana:
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");
Gunakan opsi ini jika Anda ingin mengirim email teks sederhana.
Kirim email dengan lampiran menggunakan C ++
Jika Anda perlu mengirim pesan email yang kompleks menggunakan C ++, kelas MailMessage pasti akan berguna. Misalnya, untuk mengirim pesan yang mirip dengan yang sebelumnya:
auto message = MakeObject<MailMessage>(u"login@gmail.com", u"to@aspose.com", u"subject", u"body");
smtpClient->Send(message);
Kelas MailMessage adalah alat yang hebat. Ini memungkinkan Anda untuk mengirim pesan yang disimpan dalam format file EML dan MSG (Outlook Message Format). Anda juga dapat menggunakan format ini untuk mengirim lampiran atau bahkan objek iCalendar untuk mengatur atau mengonfirmasi kehadiran. MailMessage memungkinkan Anda untuk menyempurnakan daftar penerima, penerima Cc dan Bcc. Anda dapat mengirim email dengan markup HTML. Anda juga dapat menandai pesan dengan berbagai bendera sebelum mengirimnya, menambahkan metadata, mengenkripsinya, dll.
Mengapa orang memilih Aspose.Email untuk C ++ untuk mengirim email?
Ya, Aspose.Email untuk C ++ bukan hanya utilitas untuk mengirim pesan email. Ini adalah solusi komprehensif yang memberikan dukungan komprehensif untuk berbagai tugas yang terkait dengan mengirim, menerima, menyimpan, dan memproses email. Dan Anda dapat yakin bahwa ketika melakukan tugas-tugas ini, Anda tidak akan mengalami keterbatasan perpustakaan. Kami telah mempelajari topik ini selama bertahun-tahun dan terus memperluas fungsinya.
Anda mungkin telah menemukan perpustakaan kecil yang muncul relatif baru-baru ini. Mereka dengan mudah dan alami memecahkan masalah sederhana yang dihadapi banyak pengguna. Tetapi begitu Anda sedikit menyingkir, Anda menyadari bahwa dengan terus menggunakan yang bersahaja ini, Anda dipaksa untuk terus-menerus memagari kruk, beberapa modul untuk melewati batasan perpustakaan, adaptor yang dirancang untuk berteman dengan perpustakaan kecil Anda dengan perpustakaan kecil lainnya, dll Dan sekarang, solusi kecil Anda tidak begitu bagus lagi. Selain itu, Anda mengirimkannya ke server, di mana ia secara teratur dan konsisten menembak dirinya sendiri di kaki, karena belum ada yang menguji kebun binatang kruk dan integrasi seperti itu sebelum Anda. Dan tidak peduli seberapa keras Anda mencoba, cepat atau lambat Anda masih akan mengalami keterbatasan perpustakaan ini. Dan Anda harus mencari sesuatu yang baru. Jadi, ketika harus bekerja dengan email, Anda mungkin ingin mempertimbangkan Aspose.Email untuk C ++!
Kami menawarkan Anda bukan hanya klien untuk bekerja dengan SMTP. Pertama, ini jauh dari satu-satunya protokol untuk mengirim email dengan C ++. Dengan produk kami, Anda dapat mengirim email menggunakan Exchange EWS dan Microsoft Graph!
Kami telah memberi tahu Anda tentang kemungkinan MailMessage di artikel ini. Tapi ini jauh dari satu-satunya alat untuk menyiapkan surat untuk dikirim. Anda dapat:
- menghasilkan surat dari template menggunakan TemplateEngine;
- membongkar wadah dengan huruf, berkat dukungan format OST, PST, dan MBOX;
- unduh surat dari kotak surat menggunakan dukungan protokol IMAP, POP3, Exchange EWS, dan WebDAV, serta Microsoft Graph;
- mengkonversi email dari satu format ke format lainnya.
Anda dapat dengan mudah menerima surat menggunakan protokol Exchange Ews. Ini akan dalam format MAPI. Tetapi Anda dapat dengan mudah mengonversinya ke format EML, yang memungkinkan Anda mengirimkannya nanti melalui protokol SMTP. Pada saat yang sama, Anda dapat mengubah daftar penerima atau pengirim surat kapan saja.
Bagaimana cara mengirim email menggunakan C ++ dan SMTP?
Konfigurasi SMTP
Saat Anda membuat instance kelas SmtpClient, tidak ada hal khusus yang terjadi. Anda cukup menentukan jumlah pengaturan yang akan memungkinkan Anda untuk terhubung ke server SMTP di masa mendatang untuk mengirim pesan. Semua keajaiban terjadi pada panggilan pertama ke send
metode. Apa yang terjadi saat ini?
Bahkan, itu semua tergantung pada pengaturan apa yang telah Anda tentukan. Mari kita pertimbangkan beberapa opsi. Katakanlah Anda telah menentukan host server tetapi belum menentukan port dan jenis enkripsi. Dalam hal ini, mekanisme pemilihan pengaturan otomatis akan dimulai. Mekanisme ini terdiri dari upaya berturut-turut untuk terhubung ke server SMTP menggunakan port standar dan algoritma enkripsi yang sesuai. Pertama, upaya dilakukan untuk terhubung ke server melalui saluran terenkripsi. Tetapi jika gagal, mekanisme akan mencoba membuat koneksi yang tidak terenkripsi. Jika Anda tidak ingin menggunakan versi protokol yang tidak dienkripsi, tentukan SecurityOptions.SSL_AUTO
pengaturan. Pengaturan ini juga memungkinkan Anda untuk memilih pengaturan server, tetapi hanya memeriksa saluran terenkripsi.
Jika memungkinkan untuk membuat koneksi dengan server, maka upaya otorisasi dilakukan. Jika otorisasi gagal, kode kesalahan disimpan untuk masa depan. Matcher akan mencoba terhubung dengan cara lain. Pesan akan dikirim jika Anda dapat terhubung dan masuk. Jika koneksi gagal, pengguna akan menerima kode kesalahan otorisasi (jika ada yang disimpan selama pemilihan). Jadi pengguna akan dapat memahami bahwa ia memasukkan kata sandi yang salah atau membuat kesalahan lain. Jika tidak ada opsi untuk port dan jenis enkripsi yang cocok dan kami bahkan tidak mendapatkan upaya otorisasi, pengguna akan menerima kesalahan yang memberitahukan tentang pengaturan server yang salah.
Ngomong-ngomong, perlu dicatat bahwa SMTPClient kami (seperti semua klien lain dari perpustakaan kami) dapat terhubung ke server SMTP melalui proxy. Anda juga dapat menentukan pengaturan server proxy selama inisialisasi.
Otorisasi klien SMTP
SmtpClient mendukung lebih dari sekadar metode koneksi yang berbeda. Ini juga mendukung metode otorisasi yang berbeda. Misalnya, Anda dapat menggunakan mekanisme OAuth. Untuk melakukan ini, kami menyediakan beberapa alat sekaligus.
Pertama-tama, itu adalah TokenProvider. Ini adalah kelas yang berisi semua data yang diperlukan untuk menyimpan dan menyegarkan token OAuth. Dalam hal ini, Anda harus melakukan otorisasi OAuth sendiri dan menyimpan semua informasi yang diperlukan yang diterima dari server OAuth. RefreshToken memainkan peran kunci di sini. Ini adalah token tambahan yang dikeluarkan oleh server otorisasi, bersama dengan AccessToken. Perbedaan mereka adalah bahwa AccessToken, sebagai suatu peraturan, hanya berlaku untuk jangka waktu tertentu. Sedangkan RefreshToken berlaku lebih lama, atau bahkan tanpa batas waktu (sampai pengguna mencabutnya). Berkat RefreshToken, kelas TokenProvider selalu dapat menyegarkan AccessToken jika yang terakhir tidak lagi valid.
Pilihan lain adalah antarmuka ITokenProvider. Dalam hal ini, Anda tidak hanya dapat menerapkan mekanisme OAuth sendiri tetapi juga meneruskannya ke SmtpClient sehingga menggunakannya sendiri sesuai kebutuhan.
Perlu dicatat bahwa mekanisme OAuth tidak selalu diperlukan. Terkadang jauh lebih mudah untuk masuk dengan nama pengguna dan kata sandi. Dan untuk ini, Anda tidak perlu mengkonfigurasi ulang akun email Anda sama sekali, menolak otorisasi dua faktor, dll Ada solusi yang lebih aman - ini adalah kata sandi terpisah untuk aplikasi. Untuk memanfaatkan fitur ini, Anda harus melihat ke pengaturan akun email Anda. Kemungkinan besar, kata sandi untuk aplikasi akan dihasilkan secara otomatis ketika Anda mengaturnya di akun Anda. Jangan lupa untuk menyimpannya di suatu tempat. Kami juga menyarankan untuk membatasi izin aplikasi Anda sebanyak mungkin selama konfigurasi. Tentu saja, jika penyerang mendapatkan akses ke kata sandi ini, ia tidak akan dapat menyesuaikan akun Anda, tetapi ia masih dapat melakukan banyak hal yang tidak menyenangkan. Dan di sini Anda tidak dapat melakukan apa-apa, karena kata sandi adalah satu-satunya hal yang melindungi data Anda dari penyusup. Secara umum, alat ini sangat nyaman, tetapi menurunkan keamanan akun Anda, gunakan dengan risiko Anda sendiri.
Mengirim email melalui SMTP dengan C ++
Jadi, koneksi ke server dibuat, dan otorisasi berhasil. Sudah waktunya untuk mengirim surat. Untuk pengiriman, objek kelas MailMessage digunakan. Secara teknis, Anda bisa meneruskan semua data yang diperlukan ke metode pengiriman. Tetapi, pada kenyataannya, mereka masih akan dikumpulkan di objek MailMessage. Selanjutnya, berkat kemampuan kelas MailMessage untuk membuat serial ke format EML, kami mendapatkan aliran data yang diperlukan yang dapat diteruskan ke server SMTP kami. Dengan demikian, kami memberi server perintah untuk mengirim surat dan mentransfer semua isi surat ke sana dalam bentuk data teks. Jika data biner ditransmisikan dalam surat, misalnya, dalam bentuk file terlampir, data ini dikodekan dalam format Base64, dan metadata surat tersebut menunjukkan bahwa penerima perlu memecahkan kodenya kembali. Server SMTP dapat memeriksa kebenaran pesan yang diterima (misalnya, periksa bidang FROM dengan akun pengirim di server), serta melengkapi metadata pesan sesuai kebijakannya sendiri. Kemudian, server akan mengirim email ke penerima, daftar yang juga akan didapat dari metadata email.