Aspose.Email  C++ için

E-posta gönder C++

Ek veya iCalendar ile e-posta göndermek için C ++ ve SMTP nasıl kullanılır

  Ücretsiz Deneme İndirin

Kural olarak, SMTP protokolü e-posta mesajları göndermek için kullanılır. Mesaj göndermek için bir SMTP sunucusuna erişmeniz gerekir. Ağdaki SMTP sunucusunun adresini bulmanız, bağlantı noktasını ve şifreleme türünü, oturum açma ve yetkilendirme yöntemini belirlemeniz gerekir. Bazı e-posta sağlayıcıları ayrıca hesap ayarlarınızda SMTP sunucusuna erişimi etkinleştirmenizi gerektirir. Ayrıca, yazılımınızda OAuth yetkilendirmesini uygulamaktan rahatsız değilseniz, hesap ayarlarınızda uygulama için ayrı bir şifre oluşturmayı deneyebilirsiniz.

Yani, tüm hazırlık çalışmalarını yaptıysanız, mesaj göndermeye başlamanın zamanı geldi. Bunun için Aspose.Email C++ için kitaplığını kullanabilirsiniz. En basit örneği düşünün:

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");

Basit bir metin e-postası göndermek istiyorsanız bu seçeneği kullanın.

C ++ kullanarak ekleri içeren e-posta gönderin

C ++ kullanarak karmaşık bir e-posta mesajı göndermeniz gerekiyorsa, MailMessage sınıfı kesinlikle kullanışlı olacaktır. Örneğin, öncekine benzer bir mesaj göndermek için:

auto message = MakeObject<MailMessage>(u"login@gmail.com", u"to@aspose.com", u"subject", u"body");
smtpClient->Send(message);

MailMessage sınıfı harika bir araçtır. EML ve MSG (Outlook Mesaj Formatı) dosya biçimlerinde depolanan mesajları göndermenizi sağlar. Bu formatı, katılımı ayarlamak veya onaylamak için ekler göndermek veya hatta iCalendar nesneleri göndermek için de kullanabilirsiniz. MailMessage, alıcılar listenizde, Cc ve Bcc alıcıları listenizde ince ayar yapmanızı sağlar. HTML işaretlemesi ile bir e-posta gönderebilirsiniz. Mesajı göndermeden önce çeşitli bayraklarla işaretleyebilir, meta veri ekleyebilir, şifreleyebilir vb.

İnsanlar neden e-posta göndermek için C ++ için Aspose.Email seçiyor?

Evet, C ++ için Aspose.Email sadece e-posta mesajları göndermek için bir yardımcı program değildir. Bu, e-posta gönderme, alma, saklama ve işleme ile ilgili çeşitli görevler için kapsamlı destek sağlayan kapsamlı bir çözümdür. Ve bu görevleri yerine getirirken kütüphanenin sınırlamalarıyla karşılaşmayacağınızdan emin olabilirsiniz. Bu konuyu uzun yıllardır inceliyoruz ve işlevselliğini sürekli genişletiyoruz.

Muhtemelen nispeten yakın zamanda ortaya çıkan küçük kütüphanelere rastladınız. Birçok kullanıcının karşılaştığı basit bir sorunu kolayca ve doğal olarak çözerler. Ama biraz kenara çekildiğinizde, bu iddiasız olanı kullanmaya devam ederek sürekli olarak koltuk değneklerini çitlemek zorunda kaldığınızı, kütüphane kısıtlamalarını atlamak için bazı modülleri, küçük kütüphanenizle başka bir küçük kütüphaneyle arkadaş olmak için tasarlanmış adaptörler vb. Ve şimdi, küçük şık çözümünüz artık o kadar da şık değil. Dahası, düzenli ve tutarlı bir şekilde kendini ayağına vurduğu sunucuya gönderiyorsunuz, çünkü kimse sizden önce böyle bir koltuk değneği ve entegrasyon hayvanat bahçesini test etmedi. Ve ne kadar uğraşırsanız çalışın, er ya da geç yine de bu kütüphanenin sınırlamalarıyla karşılaşacaksınız. Ve yeni bir şey aramalısın. Bu nedenle, e-posta ile çalışmak söz konusu olduğunda, C ++ için Aspose.Email seçeneğini düşünmek isteyebilirsiniz!

Size sadece SMTP ile çalışmak için bir müşteri sunmuyoruz. İlk olarak, C ++ ile e-posta göndermek için tek protokol olmaktan uzaktır. Ürünümüzle Exchange EWS ve Microsoft Graph kullanarak e-posta gönderebilirsiniz!

Bu makalede size MailMessage’ın olanaklarından bahsetmiştik. Ancak bu, göndermek için mektup hazırlamak için tek araç olmaktan uzaktır. Şunları yapabilirsiniz:

  • TemplateEngine kullanarak bir şablondan harfler oluşturun;
  • OST, PST ve MBOX formatlarının desteği sayesinde kapları harflerle açın;
  • IMAP, POP3, Exchange EWS ve WebDAV protokollerinin yanı sıra Microsoft Graph desteğini kullanarak posta kutusundan mektupları indirin;
  • e-postaları bir formattan diğerine dönüştürün.

Exchange Ews protokolünü kullanarak kolayca bir mektup alabilirsiniz. MAPI formatında olacaktır. Ancak, daha sonra SMTP protokolü ile göndermenize izin verecek olan EML formatına kolayca dönüştürebilirsiniz. Aynı zamanda, alıcıların listesini veya mektubun gönderenini istediğiniz zaman değiştirebilirsiniz.

C ++ ve SMTP kullanarak e-posta göndermek nasıl çalışır?

SMTP Yapılandırması

SmtpClient sınıfının bir örneğini oluşturduğunuz anda, özel bir şey olmaz. Mesaj göndermek için ileride bir SMTP sunucusuna bağlanmanıza izin verecek ayarların sayısını belirtmeniz yeterlidir. Tüm sihir, ilk çağrıda olur send yöntemi. Şu anda neler oluyor?

Aslında, hepsi hangi ayarları belirttiğinize bağlıdır. Birkaç seçenek düşünelim. Sunucu ana bilgisayarını belirttiğinizi ancak bağlantı noktasını ve şifreleme türünü belirtmediğinizi varsayalım. Bu durumda, otomatik ayar seçimi mekanizması başlayacaktır. Bu mekanizma, standart bağlantı noktalarını ve ilgili şifreleme algoritmalarını kullanarak SMTP sunucusuna bağlanmak için ardışık girişimlerden oluşur. İlk olarak, sunucuya şifreli bir kanal üzerinden bağlanmak için bir girişimde bulunulur. Ancak başarısız olursa, mekanizma şifrelenmemiş bir bağlantı kurmaya çalışacaktır. Protokolün şifrelenmemiş sürümünü kullanmak istemiyorsanız, belirtin SecurityOptions.SSL_AUTO ayar. Bu ayar aynı zamanda sunucu ayarlarını seçmenize izin verir, ancak yalnızca şifrelenmiş kanalları kontrol eder.

Sunucu ile bağlantı kurmak mümkün olsaydı, bir yetkilendirme denemesi yapılır. Yetkilendirme başarısız olursa, hata kodu gelecek için kaydedilir. Eşleştirici başka şekillerde bağlanmaya çalışacaktır. Bağlanıp giriş yapabiliyorsanız mesaj gönderilecektir. Bağlantı başarısız olursa, kullanıcı bir yetkilendirme hata kodu alır (seçim sırasında kaydedilmişse). Böylece kullanıcı yanlış şifre girdiğini veya başka bir hata yaptığını anlayabilecektir. Bağlantı noktaları ve şifreleme türleri için seçeneklerden hiçbiri uymuyorsa ve yetkilendirme denemesine bile ulaşamadıysak, kullanıcı yanlış sunucu ayarları hakkında bildirim yapan bir hata alır.

Bu arada, SmtpClient’imizin (kütüphanemizin diğer tüm istemcileri gibi) bir proxy aracılığıyla SMTP sunucusuna bağlanabileceği unutulmamalıdır. Başlatma sırasında proxy sunucusu ayarlarını da belirtebilirsiniz.

SMTP istemci yetkilendirmesi

SmtpClient, farklı bağlantı yöntemlerinden daha fazlasını destekler. Ayrıca farklı yetkilendirme yöntemlerini destekler. Örneğin, OAuth mekanizmasını kullanabilirsiniz. Bunu yapmak için, aynı anda birkaç araç sağlıyoruz.

Her şeyden önce, TokenProvider. Bu, OAuth belirtecini depolamak ve yenilemek için gerekli tüm verileri içeren sınıftır. Bu durumda, OAuth yetkilendirmesini kendiniz gerçekleştirmeli ve OAuth sunucusundan alınan tüm gerekli bilgileri kaydetmelisiniz. RefreshToken burada önemli bir rol oynar. Bu, AccessToken ile birlikte yetkilendirme sunucusu tarafından verilen ek bir belirteçtir. Aralarındaki fark, AccessToken’in kural olarak yalnızca belirli bir süre için geçerli olmasıdır. Oysa RefreshToken çok daha uzun süre, hatta süresiz olarak geçerlidir (kullanıcı iptal edene kadar). RefreshToken sayesinde, TokenProvider sınıfı, ikincisi artık geçerli değilse her zaman bir AccessToken yenileyebilir.

Diğer bir seçenek de ITokenProvider arayüzüdür. Bu durumda, OAuth mekanizmasını yalnızca kendiniz uygulamakla kalmaz, aynı zamanda gerektiğinde kendisini kullanması için SmtpClient’e de iletebilirsiniz.

OAuth mekanizmasının her zaman gerekli olmadığı unutulmamalıdır. Bazen bir kullanıcı adı ve şifre ile giriş yapmak çok daha kolaydır. Bunun için e-posta hesabınızı yeniden yapılandırmanıza, iki faktörlü yetkilendirmeyi reddetmenize vb. Daha güvenli bir çözüm var - bu uygulama için ayrı bir şifredir. Bu özellikten yararlanmak için e-posta hesabı ayarlarınıza bakmalısınız. Büyük olasılıkla, uygulamanın şifresi, hesabınızda ayarladığınızda otomatik olarak oluşturulacaktır. Bir yere saklamayı unutma. Ayrıca yapılandırma sırasında uygulamanızın izinlerini mümkün olduğunca sınırlandırmanızı öneririz. Tabii ki, bir saldırgan bu şifreye erişim kazanırsa, hesabınıza uygun olmayacaktır, ancak yine de pek çok hoş olmayan şey yapabilir. Ve burada hiçbir şey yapamazsınız, çünkü şifre verilerinizi davetsiz misafirlerden koruyan tek şeydir. Genel olarak, araç çok kullanışlıdır, ancak hesabınızın güvenliğini düşürür, kendi sorumluluğunuzda kullanın.

C ++ ile SMTP üzerinden e-posta gönderme

Böylece, sunucuya bağlantı kuruldu ve yetkilendirme başarılı oldu. Mektup gönderme zamanı. Göndermek için MailMessage sınıfının bir nesnesi kullanılır. Teknik olarak, gerekli tüm verileri gönderme yöntemine aktarabilirsiniz. Ancak, aslında, yine de MailMessage nesnesinde toplanacaklar. Ayrıca, MailMessage sınıfının EML formatına serileştirme yeteneği sayesinde, SMTP sunucumuza iletilebilecek gerekli veri akışını elde ediyoruz. Böylece, sunucuya bir mektup göndermesi ve mektubun tüm içeriğini metin verileri şeklinde aktarması için bir komut veriyoruz. İkili veriler mektupta, örneğin ekli dosyalar şeklinde iletilirse, bu veriler Base64 biçiminde kodlanır ve mektubun meta verileri, alıcının kodunu çözmesi gerektiğini gösterir. SMTP sunucusu, alınan mesajın doğruluğunu kontrol edebilir (örneğin, sunucudaki gönderenin hesabıyla FROM alanını kontrol edebilir) ve mesajın meta verilerini kendi takdirine bağlı olarak tamamlayabilir. Ardından, sunucu e-postayı alıcılara gönderir ve bunun bir listesini e-postanın meta verilerinden de alacaktır.