Aspose.Email  สำหรับ C ++

ส่งอีเมล C++

วิธีใช้ C++ และ SMTP เพื่อส่งอีเมลพร้อมไฟล์แนบหรือ iCalendar

  ดาวน์โหลดฟรีทดลอง

ตามกฎแล้วโปรโตคอล SMTP จะใช้เพื่อส่งข้อความอีเมลคุณต้องเข้าถึงเซิร์ฟเวอร์ SMTP เพื่อส่งข้อความคุณต้องค้นหาที่อยู่ของเซิร์ฟเวอร์ SMTP บนเครือข่ายกำหนดพอร์ตและประเภทของการเข้ารหัสการเข้าสู่ระบบและวิธีการอนุญาตผู้ให้บริการอีเมลบางรายต้องการให้คุณเปิดใช้งานการเข้าถึงเซิร์ฟเวอร์ SMTP ในการตั้งค่าบัญชีของคุณนอกจากนี้หากคุณไม่สะดวกในการใช้การอนุญาต OAuth ในซอฟต์แวร์ของคุณ คุณสามารถลองสร้างรหัสผ่านแยกต่างหากสำหรับแอปพลิเคชันในการตั้งค่าบัญชีของคุณ

ดังนั้นหากคุณเสร็จสิ้นงานเตรียมการทั้งหมดแล้วก็ถึงเวลาเริ่มส่งข้อความคุณสามารถใช้ไลบรารี Aspose.Email สำหรับ C ++ สำหรับสิ่งนี้พิจารณาตัวอย่างที่ง่ายที่สุด:

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

ใช้ตัวเลือกนี้หากคุณต้องการส่งอีเมลข้อความอย่างง่าย

ส่งอีเมลพร้อมไฟล์แนบโดยใช้ C ++

หากคุณต้องการส่งข้อความอีเมลที่ซับซ้อนโดยใช้ C++ คลาส MailMessage จะมีประโยชน์อย่างแน่นอนตัวอย่างเช่นในการส่งข้อความที่คล้ายกับข้อความก่อนหน้า:

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

คลาส MailMessage เป็นเครื่องมือที่ยอดเยี่ยมช่วยให้คุณสามารถส่งข้อความที่เก็บไว้ในรูปแบบไฟล์ EML และ MSG (รูปแบบข้อความ Outlook)คุณยังสามารถใช้รูปแบบนี้เพื่อส่งไฟล์แนบหรือแม้แต่วัตถุ iCalendar เพื่อตั้งค่าหรือยืนยันการเข้าร่วมMailMessage ช่วยให้คุณสามารถปรับรายการผู้รับ Cc และ Bcc ของคุณได้อย่างละเอียดคุณสามารถส่งอีเมลพร้อมมาร์กอัป HTMLนอกจากนี้คุณยังสามารถทำเครื่องหมายข้อความด้วยธงต่างๆก่อนส่งเพิ่มข้อมูลเมตาเข้ารหัส ฯลฯ

ทำไมผู้คนถึงเลือก Aspose.Email สำหรับ C++ สำหรับการส่งอีเมล

ใช่ Aspose.Email สำหรับ C++ ไม่ใช่แค่ยูทิลิตี้สำหรับการส่งข้อความอีเมลนี่เป็นโซลูชันที่ครอบคลุมที่ให้การสนับสนุนอย่างครอบคลุมสำหรับงานที่หลากหลายที่เกี่ยวข้องกับการส่ง รับ จัดเก็บ และการประมวลผลอีเมลและคุณสามารถมั่นใจได้ว่าเมื่อทำงานเหล่านี้คุณจะไม่ต้องเผชิญกับข้อ จำกัด ของไลบรารีเราได้ศึกษาหัวข้อนี้มานานหลายปีและกำลังขยายฟังก์ชันการทำงานอย่างต่อเนื่อง

คุณอาจเจอห้องสมุดขนาดเล็กที่ปรากฏขึ้นเมื่อเร็ว ๆ นี้พวกเขาแก้ปัญหาง่ายๆที่ผู้ใช้หลายคนต้องเผชิญได้อย่างง่ายดายและเป็นธรรมชาติแต่ทันทีที่คุณหยิบออกไปเล็กน้อย คุณจะตระหนักว่าการใช้ห้องสมุดที่ไม่โอ้อวดนี้ต่อไป คุณจะถูกบังคับให้รั้วค้ำอย่างต่อเนื่อง โมดูลบางอย่างเพื่อหลีกเลี่ยงข้อ จำกัด ของห้องสมุด อะแดปเตอร์ที่ออกแบบมาเพื่อนกับห้องสมุดขนาดเล็กของคุณกับห้องสมุดขนาดเล็กอื่น ฯลฯ และตอนนี้โซลูชันที่ยอดเยี่ยมเล็กน้อยของคุณก็ไม่เก่งอีกต่อไปยิ่งไปกว่านั้นคุณส่งไปยังเซิร์ฟเวอร์ซึ่งมันยิงตัวเองอย่างสม่ำเสมอและสม่ำเสมอเพราะไม่มีใครทดสอบสวนสัตว์ของไม้ค้ำและการผสานรวมก่อนคุณและไม่ว่าคุณจะพยายามหนักแค่ไหนไม่ช้าก็เร็วคุณจะยังคงต้องเผชิญกับข้อ จำกัด ของห้องสมุดนี้และคุณต้องมองหาสิ่งใหม่ดังนั้นเมื่อพูดถึงการทำงานกับอีเมล คุณอาจต้องการพิจารณา Aspose.Email สำหรับ C ++!

เราเสนอให้คุณไม่เพียงแค่ลูกค้าสำหรับการทำงานกับ SMTPประการแรกมันห่างไกลจากโปรโตคอลเดียวสำหรับการส่งอีเมลด้วย C ++ด้วยผลิตภัณฑ์ของเราคุณสามารถส่งอีเมลโดยใช้ Exchange EWS และ Microsoft Graph!

เราได้บอกคุณแล้วเกี่ยวกับความเป็นไปได้ของ MailMessage ในบทความนี้แต่นี่ห่างไกลจากเครื่องมือเดียวสำหรับการเตรียมจดหมายสำหรับการส่งคุณสามารถ:

  • สร้างตัวอักษรจากเทมเพลตโดยใช้ TemplateEngine;
  • แกะคอนเทนเนอร์ที่มีตัวอักษรด้วยการสนับสนุนรูปแบบ OST, PST และ MBOX
  • ดาวน์โหลดจดหมายจากกล่องจดหมายโดยใช้การสนับสนุน IMAP, POP3, Exchange EWS และ WebDAV โปรโตคอล รวมถึง Microsoft Graph
  • แปลงอีเมลจากรูปแบบหนึ่งเป็นรูปแบบอื่น

คุณสามารถรับจดหมายได้อย่างง่ายดายโดยใช้โปรโตคอล Exchange Ewsมันจะอยู่ในรูปแบบ MAPIแต่คุณสามารถแปลงเป็นรูปแบบ EML ได้อย่างง่ายดายซึ่งจะช่วยให้คุณสามารถส่งได้ในภายหลังผ่านโปรโตคอล SMTPในเวลาเดียวกันคุณสามารถเปลี่ยนรายชื่อผู้รับหรือผู้ส่งจดหมายได้ตลอดเวลา

การส่งอีเมลโดยใช้ C++ และ SMTP ทำงานอย่างไร

การกำหนดค่า SMTP

เมื่อคุณสร้างอินสแตนซ์ของคลาส SMTPClient ไม่มีอะไรพิเศษเกิดขึ้นคุณเพียงระบุจำนวนการตั้งค่าที่จะช่วยให้คุณสามารถเชื่อมต่อกับเซิร์ฟเวอร์ SMTP ในอนาคตเพื่อส่งข้อความความมหัศจรรย์ทั้งหมดเกิดขึ้นในการโทรครั้งแรกไปยัง send วิธีเกิดอะไรขึ้นในขณะนี้?

ในความเป็นจริงทุกอย่างขึ้นอยู่กับการตั้งค่าที่คุณระบุลองพิจารณาตัวเลือกหลายอย่างสมมติว่าคุณได้ระบุโฮสต์เซิร์ฟเวอร์ แต่ไม่ได้ระบุพอร์ตและประเภทการเข้ารหัสในกรณีนี้กลไกการเลือกการตั้งค่าอัตโนมัติจะเริ่มขึ้นกลไกนี้ประกอบด้วยความพยายามติดต่อกันในการเชื่อมต่อกับเซิร์ฟเวอร์ SMTP โดยใช้พอร์ตมาตรฐานและอัลกอริทึมการเข้ารหัสที่เกี่ยวข้องขั้นแรกให้มีการพยายามเชื่อมต่อกับเซิร์ฟเวอร์ผ่านช่องที่เข้ารหัสแต่ถ้าล้มเหลวกลไกจะพยายามสร้างการเชื่อมต่อที่ไม่ได้เข้ารหัสหากคุณไม่ต้องการใช้โปรโตคอลเวอร์ชันที่ไม่ได้รับการเข้ารหัสให้ระบุ SecurityOptions.SSL_AUTO การตั้งค่าการตั้งค่านี้ยังช่วยให้คุณสามารถเลือกการตั้งค่าเซิร์ฟเวอร์ แต่ตรวจสอบเฉพาะช่องที่เข้ารหัสเท่านั้น

หากเป็นไปได้ที่จะสร้างการเชื่อมต่อกับเซิร์ฟเวอร์แล้วจะมีการพยายามอนุมัติหากการอนุญาตล้มเหลวรหัสข้อผิดพลาดจะถูกบันทึกไว้ในอนาคตผู้จับคู่จะพยายามเชื่อมต่อด้วยวิธีอื่นข้อความจะถูกส่งหากคุณสามารถเชื่อมต่อและเข้าสู่ระบบได้หากการเชื่อมต่อล้มเหลวผู้ใช้จะได้รับรหัสข้อผิดพลาดการอนุญาต (หากมีการบันทึกในระหว่างการเลือก)ดังนั้นผู้ใช้จะสามารถเข้าใจได้ว่าเขาป้อนรหัสผ่านผิดหรือทำผิดพลาดอื่นหากไม่มีตัวเลือกใดสำหรับพอร์ตและประเภทการเข้ารหัสที่เหมาะสมและเราไม่พยายามทำการอนุมัติผู้ใช้จะได้รับข้อผิดพลาดในการแจ้งเตือนเกี่ยวกับการตั้งค่าเซิร์ฟเวอร์ที่ไม่ถูกต้อง

อย่างไรก็ตามควรสังเกตว่า SMTPClient ของเรา (เช่นเดียวกับไคลเอนต์อื่น ๆ ทั้งหมดของไลบรารีของเรา) สามารถเชื่อมต่อกับเซิร์ฟเวอร์ SMTP ผ่านพร็อกซีนอกจากนี้คุณยังสามารถระบุการตั้งค่าพร็อกซีเซิร์ฟเวอร์ในระหว่างการเริ่ม

การอนุญาตไคลเอ็นต์ SMTP

SMTPClient รองรับมากกว่าวิธีการเชื่อมต่อที่แตกต่างกันนอกจากนี้ยังรองรับวิธีการอนุญาตที่แตกต่างกันตัวอย่างเช่นคุณสามารถใช้กลไก OAuthในการทำเช่นนี้เราจัดหาเครื่องมือหลายอย่างพร้อมกัน

ก่อนอื่นมันคือ TokenProviderนี่คือคลาสที่มีข้อมูลที่จำเป็นทั้งหมดในการจัดเก็บและรีเฟรชโทเค็น OAuthในกรณีนี้คุณต้องทำการอนุมัติ OAuth ด้วยตัวคุณเองและบันทึกข้อมูลที่จำเป็นทั้งหมดที่ได้รับจากเซิร์ฟเวอร์ OAuthRefreshToken มีบทบาทสำคัญที่นี่นี่เป็นโทเค็นเพิ่มเติมที่ออกโดยเซิร์ฟเวอร์การอนุมัติพร้อมกับ AccessTokenความแตกต่างของพวกเขาคือ AccessToken ตามกฎแล้วจะใช้ได้ในช่วงเวลาหนึ่งเท่านั้นในขณะที่ RefreshToken ใช้ได้นานกว่าหรือแม้กระทั่งไม่มีกำหนด (จนกว่าผู้ใช้จะเพิกถอนมัน)ต้องขอบคุณ RefreshToken คลาส TokenProvider สามารถรีเฟรช AccessToken ได้เสมอหากคลาสหลังไม่ถูกต้องอีกต่อไป

อีกทางเลือกหนึ่งคืออินเทอร์เฟซ ITokenProviderในกรณีนี้คุณไม่เพียง แต่สามารถใช้กลไก OAuth ด้วยตัวคุณเองเท่านั้น แต่ยังส่งไปยัง SmtpClient เพื่อให้มันใช้มันเองตามความจำเป็น

ควรสังเกตว่ากลไก OAuth ไม่จำเป็นเสมอไปบางครั้งมันง่ายกว่ามากที่จะเข้าสู่ระบบด้วยชื่อผู้ใช้และรหัสผ่านและสำหรับสิ่งนี้คุณไม่จำเป็นต้องกำหนดค่าบัญชีอีเมลของคุณใหม่เลยปฏิเสธการอนุญาตแบบสองปัจจัย ฯลฯ มีโซลูชันที่ปลอดภัยยิ่งขึ้น - นี่คือรหัสผ่านแยกต่างหากสำหรับแอปพลิเคชันหากต้องการใช้ประโยชน์จากคุณสมบัตินี้คุณควรดูการตั้งค่าบัญชีอีเมลของคุณเป็นไปได้มากรหัสผ่านสำหรับแอปพลิเคชันจะถูกสร้างขึ้นโดยอัตโนมัติเมื่อคุณตั้งค่าในบัญชีของคุณอย่าลืมบันทึกไว้ที่ไหนสักแห่งนอกจากนี้เรายังแนะนำให้ จำกัด สิทธิ์ของแอปพลิเคชันของคุณให้มากที่สุดเท่าที่จะเป็นไปได้ในระหว่างการกำหนดค่าแน่นอนว่าหากผู้โจมตีเข้าถึงรหัสผ่านนี้เขาจะไม่สามารถปรับบัญชีของคุณได้ แต่เขายังคงสามารถทำสิ่งที่ไม่พึงประสงค์ได้มากมายและที่นี่คุณไม่สามารถทำอะไรได้เพราะรหัสผ่านเป็นสิ่งเดียวที่ปกป้องข้อมูลของคุณจากผู้บุกรุกโดยทั่วไปเครื่องมือนี้สะดวกมาก แต่ช่วยลดความปลอดภัยของบัญชีของคุณใช้ด้วยความเสี่ยงของคุณเอง

ส่งอีเมลผ่าน SMTP ด้วย C++

ดังนั้นการเชื่อมต่อกับเซิร์ฟเวอร์จึงถูกสร้างขึ้นและการอนุญาตประสบความสำเร็จถึงเวลาที่จะส่งจดหมายสำหรับการส่งจะใช้วัตถุของคลาส MailMessageในทางเทคนิคคุณสามารถส่งข้อมูลที่จำเป็นทั้งหมดไปยังวิธีการส่งแต่ในความเป็นจริงพวกเขาจะยังคงถูกรวบรวมในวัตถุ MailMessageนอกจากนี้ด้วยความสามารถของคลาส MailMessage ในการจัดลำดับเป็นรูปแบบ EML เราจึงได้รับสตรีมข้อมูลที่จำเป็นซึ่งสามารถส่งผ่านไปยังเซิร์ฟเวอร์ SMTP ของเราดังนั้นเราจึงให้คำสั่งแก่เซิร์ฟเวอร์เพื่อส่งจดหมายและถ่ายโอนเนื้อหาทั้งหมดของจดหมายไปยังมันในรูปแบบของข้อมูลข้อความหากมีการส่งข้อมูลไบนารีในตัวอักษรตัวอย่างเช่นในรูปแบบของไฟล์ที่แนบข้อมูลนี้จะถูกเข้ารหัสในรูปแบบ Base64 และข้อมูลเมตาของตัวอักษรระบุว่าผู้รับจะต้องถอดรหัสกลับมาเซิร์ฟเวอร์ SMTP สามารถตรวจสอบความถูกต้องของข้อความที่ได้รับ (ตัวอย่างเช่นตรวจสอบฟิลด์ FROM ด้วยบัญชีของผู้ส่งบนเซิร์ฟเวอร์) รวมทั้งเสริมข้อมูลเมตาของข้อความตามดุลยพินิจจากนั้นเซิร์ฟเวอร์จะส่งอีเมลไปยังผู้รับ ซึ่งรายการจะได้รับจากข้อมูลเมตาของอีเมล