Aspose.Email  pour C++

Envoyer un e-mail C++

Comment utiliser C++ et SMTP pour envoyer un e-mail avec pièce jointe ou iCalendar

  Télécharger l'essai gratuit

En règle générale, le protocole SMTP est utilisé pour envoyer des messages électroniques. Vous devez avoir accès à un serveur SMTP pour envoyer un message. Vous devez trouver l’adresse du serveur SMTP sur le réseau, déterminer le port et le type de cryptage, la méthode de connexion et d’autorisation. Certains fournisseurs de messagerie exigent également que vous activiez l’accès au serveur SMTP dans les paramètres de votre compte. De plus, si vous n’êtes pas à l’aise pour implémenter l’autorisation OAuth dans votre logiciel, vous pouvez essayer de créer un mot de passe distinct pour l’application dans les paramètres de votre compte.

Donc, si vous avez effectué tous les travaux préparatoires, il est temps de commencer à envoyer des messages. Pour cela, vous pouvez utiliser la bibliothèque Aspose.Email pour C++. Prenons l’exemple le plus simple :

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

Utilisez cette option si vous souhaitez envoyer un e-mail textuel simple.

Envoyer un e-mail avec des pièces jointes en C++

Si vous devez envoyer un message électronique complexe en C++, la classe MailMessage vous sera certainement utile. Par exemple, pour envoyer un message similaire au précédent :

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

La classe MailMessage est un excellent outil. Il vous permet d’envoyer des messages stockés dans les formats de fichiers EML et MSG (Outlook Message Format). Vous pouvez également utiliser ce format pour envoyer des pièces jointes ou même des objets iCalendar afin de configurer ou de confirmer la présence. MailMessage vous permet d’affiner votre liste de destinataires, destinataires Cc et Bcc. Vous pouvez envoyer un e-mail avec un balisage HTML. Vous pouvez également marquer le message avec différents indicateurs avant de l’envoyer, ajouter des métadonnées, le chiffrer, etc.

Pourquoi les gens choisissent-ils Aspose.Email pour C++ pour envoyer des e-mails ?

Oui, Aspose.Email pour C++ n’est pas simplement un utilitaire d’envoi de messages électroniques. Il s’agit d’une solution complète qui fournit une assistance complète pour diverses tâches liées à l’envoi, à la réception, au stockage et au traitement des e-mails. Et vous pouvez être sûr que lors de l’exécution de ces tâches, vous ne rencontrerez pas les limites de la bibliothèque. Nous étudions ce sujet depuis de nombreuses années et étendons constamment ses fonctionnalités.

Vous avez probablement rencontré de petites bibliothèques apparues relativement récemment. Ils résolvent facilement et naturellement un problème simple auquel de nombreux utilisateurs sont confrontés. Mais dès que vous vous éloignez un peu, vous vous rendez compte qu’en continuant à utiliser cette bibliothèque sans prétention, vous êtes obligé de constamment utiliser des béquilles, certains modules pour contourner les restrictions des bibliothèques, des adaptateurs conçus pour vous lier d’amitié avec votre petite bibliothèque avec une autre petite bibliothèque, etc. Et maintenant, votre petite solution astucieuse ne l’est plus si bien. De plus, vous l’envoyez au serveur, où il se tire régulièrement une balle dans le pied, car personne n’a testé un tel zoo de béquilles et d’intégrations avant vous. Et peu importe vos efforts, tôt ou tard, vous rencontrerez toujours les limites de cette bibliothèque. Et tu dois chercher quelque chose de nouveau. Donc, quand il s’agit de travailler avec le courrier électronique, vous pourriez envisager Aspose.Email pour C++ !

Nous ne vous proposons pas seulement un client pour travailler avec SMTP. Tout d’abord, c’est loin d’être le seul protocole d’envoi d’e-mails en C++. Avec notre produit, vous pouvez envoyer des e-mails en utilisant Exchange EWS et Microsoft Graph !

Nous vous avons déjà parlé des possibilités de MailMessage dans cet article. Mais c’est loin d’être le seul outil de préparation des lettres à envoyer. Vous pouvez :

  • générer des lettres à partir d’un modèle à l’aide de TemplateEngine ;
  • déballer les conteneurs avec des lettres, grâce à la prise en charge des formats OST, PST et MBOX ;
  • télécharger des lettres depuis la boîte aux lettres en utilisant les protocoles IMAP, POP3, Exchange EWS et WebDAV, ainsi que Microsoft Graph ;
  • convertir des e-mails d’un format à un autre.

Vous pouvez facilement recevoir une lettre à l’aide du protocole Exchange Ews. Il sera au format MAPI. Mais vous pouvez facilement le convertir au format EML, ce qui vous permettra de l’envoyer ultérieurement via le protocole SMTP. Dans le même temps, vous pouvez modifier la liste des destinataires ou l’expéditeur de la lettre à tout moment.

Comment fonctionne l'envoi d'un e-mail en C++ et SMTP ?

Configuration du protocole SMTP

Au moment où vous créez une instance de la classe SMTPClient, rien de spécial ne se produit. Il vous suffit de spécifier le nombre de paramètres qui vous permettront de vous connecter ultérieurement à un serveur SMTP pour envoyer des messages. Toute la magie opère dès le premier appel au send méthode. Que se passe-t-il en ce moment ?

En fait, tout dépend des paramètres que vous avez spécifiés. Examinons plusieurs options. Supposons que vous ayez spécifié l’hôte du serveur mais que vous n’ayez pas spécifié le port et le type de cryptage. Dans ce cas, le mécanisme de sélection automatique des paramètres démarre. Ce mécanisme consiste en des tentatives successives de connexion au serveur SMTP à l’aide de ports standard et des algorithmes de chiffrement correspondants. Tout d’abord, une tentative de connexion au serveur est effectuée via un canal crypté. Mais en cas d’échec, le mécanisme essaiera d’établir une connexion non chiffrée. Si vous ne souhaitez pas utiliser la version non cryptée du protocole, spécifiez SecurityOptions.SSL_AUTO réglage. Ce paramètre vous permet également de sélectionner les paramètres du serveur, mais ne vérifie que les chaînes cryptées.

S’il est possible d’établir une connexion avec le serveur, une tentative d’autorisation est effectuée. Si l’autorisation échoue, le code d’erreur est enregistré pour l’avenir. Le matcher essaiera de se connecter par d’autres moyens. Le message sera envoyé si vous pouvez vous connecter et vous connecter. Si la connexion échoue, l’utilisateur recevra un code d’erreur d’autorisation (s’il a été enregistré lors de la sélection). Ainsi, l’utilisateur pourra comprendre qu’il a saisi le mauvais mot de passe ou qu’il a commis une autre erreur. Si aucune des options relatives aux ports et aux types de cryptage ne correspond et que nous n’avons même pas réussi à effectuer la tentative d’autorisation, l’utilisateur recevra un message d’erreur l’informant des paramètres de serveur incorrects.

D’ailleurs, il convient de noter que notre client SMTP (comme tous les autres clients de notre bibliothèque) peut se connecter au serveur SMTP via un proxy. Vous pouvez également spécifier les paramètres du serveur proxy lors de l’initialisation.

Autorisation du client SMTP

SMTPClient prend en charge bien plus que différentes méthodes de connexion. Il prend également en charge différentes méthodes d’autorisation. Par exemple, vous pouvez utiliser le mécanisme OAuth. Pour ce faire, nous proposons plusieurs outils à la fois.

Tout d’abord, il s’agit de TokenProvider. Il s’agit de la classe qui contient toutes les données nécessaires pour stocker et actualiser le jeton OAuth. Dans ce cas, vous devez effectuer vous-même l’autorisation OAuth et enregistrer toutes les informations nécessaires reçues du serveur OAuth. RefreshToken joue un rôle clé à cet égard. Il s’agit d’un jeton supplémentaire émis par le serveur d’autorisation, avec AccessToken. Leur différence réside dans le fait que AccessToken n’est généralement valable que pendant un certain temps. Alors que RefreshToken est valide beaucoup plus longtemps, voire indéfiniment (jusqu’à ce que l’utilisateur le révoque). Grâce à RefreshToken, la classe TokenProvider peut toujours actualiser un AccessToken si celui-ci n’est plus valide.

Une autre option est l’interface iTokenProvider. Dans ce cas, vous pouvez non seulement implémenter vous-même le mécanisme OAuth, mais également le transmettre au SMTPClient afin qu’il l’utilise lui-même selon les besoins.

Il convient de noter que le mécanisme OAuth n’est pas toujours nécessaire. Parfois, il est beaucoup plus facile de se connecter avec un nom d’utilisateur et un mot de passe. Et pour cela, vous n’avez pas du tout besoin de reconfigurer votre compte de messagerie, de refuser l’autorisation à deux facteurs, etc. Il existe une solution plus sécurisée : il s’agit d’un mot de passe distinct pour l’application. Pour tirer parti de cette fonctionnalité, vous devez consulter les paramètres de votre compte de messagerie. Très probablement, le mot de passe de l’application sera généré automatiquement lorsque vous l’aurez configuré dans votre compte. N’oubliez pas de le sauvegarder quelque part. Nous vous recommandons également de limiter autant que possible les autorisations de votre application lors de la configuration. Bien entendu, si un attaquant accède à ce mot de passe, il ne pourra pas s’approprier votre compte, mais il peut toujours faire beaucoup de choses désagréables. Et ici, vous ne pouvez rien faire, car le mot de passe est la seule chose qui protège vos données des intrus. En général, l’outil est très pratique, mais réduit la sécurité de votre compte, utilisez-le à vos risques et périls.

Envoi d’e-mails via SMTP avec C++

La connexion au serveur est donc établie et l’autorisation a été validée. C’est le moment d’envoyer des lettres. Pour l’envoi, un objet de la classe MailMessage est utilisé. Techniquement, vous pouvez simplement transmettre toutes les données nécessaires à la méthode d’envoi. Mais, en fait, ils seront toujours collectés dans l’objet MailMessage. De plus, grâce à la capacité de la classe MailMessage à sérialiser au format EML, nous obtenons le flux de données nécessaire qui peut être transmis à notre serveur SMTP. Ainsi, nous donnons au serveur la commande d’envoyer une lettre et de lui transférer tout le contenu de la lettre sous forme de données textuelles. Si des données binaires sont transmises sous forme de lettre, par exemple sous forme de fichiers joints, ces données sont codées au format Base64 et les métadonnées de la lettre indiquent que le destinataire devra les décoder à nouveau. Le serveur SMTP peut vérifier l’exactitude du message reçu (par exemple, vérifier le champ FROM avec le compte de l’expéditeur sur le serveur), ainsi que compléter les métadonnées du message à sa discrétion. Ensuite, le serveur enverra l’e-mail aux destinataires, dont il obtiendra également la liste à partir des métadonnées de l’e-mail.