CPJNSMTPConnection v3.13 Une collection de classes MFC en charge le protocole SMTP

Original: http://www.naughter.com/smtp.html

Naughter Software Logo

smtp.gif (295 bytes) CPJNSMTPConnection v3.13 Une collection de classes MFC en charge le protocole SMTP

Bienvenue sur CPJNSMTPConnection, une collection de classes MFC en charge le protocole SMTP. SMTP pour ceux qui ne connaissent pas tous les protocoles de l’internet est le protocole utilisé pour envoyer le courrier électronique internet.
Aussi inclus avec les classes de SMTP dans le téléchargement est une classe appelée « CPJNMD5Hash », qui prévoit le calcul des hachages MD5 et HMAC en utilisant l’API de chiffrement de MS, mais aussi une classe appelée « CNTLMClientAuth », qui prévoit une réutilisable implémentation côté client pour l’authentification NTLM.
Important!: s’il vous plaît noter que j’ai été informé que CPJNSMTPConnection sert à développer et à envoyer du courrier non sollicité en vrac. Ce n’était pas l’intention du code et l’auteur interdit explicitement l’utilisation du code d’un logiciel de ce genre.
Veuillez noter qu’à compter du v3.09, le code est maintenant pour Visual C++ 2013 ou plus tard. J’ai pas soutiendra VC 6 plus pour ce code, donc s’il vous plaît ne pas m’envoyer un email demandant cette <gg>. N’oubliez pas que les 6 VC est maintenant un compilateur âgé de dix-sept an. Il est maintenant temps de passer à VC 2013 !
Références
  • Pour plus d’informations sur SMTP (Simple Mail Transfer Protocol), vous devriez lire RFC 821.
  • Pour plus d’informations sur ESMTP (Extended Simple Mail Transfer Protocol), qui remplace l’original RFC SMTP, vous devez lire RFC 2821.
  • RFC 2045 qui définit comment les pièces jointes MIME doivent être manipulés dans un message SMTP standard.
  • RFC 822 et le RFC 2822 définissent les façons des en-têtes standards sont utilisés par SMTP.
  • RFC 2110 et RFC 2557 qui couvre MHTML (alias Email de HTML).
  • Codage Base64, qui est utilisé dans divers endroits de SMTP est décrit dans la RFC 1113 et RFC 1421. Si l’a été par la suite dénommé Base64 dans RFC 2045
  • Les détails sur l’authentification SMTP sont réparties entre un certain nombre de documents RFC notamment RFC 1731, RFC 1869, RFC 2195, RFC 2095, RFC 2245, RFC 2554, RFC 2595, RFC 4616 et RFC 4954.
  • Le schéma d’authentification CRAM-MD5 utilise un code HMAC (Hashed Message Authentication Code) qui est décrit dans la RFC 2104, tandis que MD5 lui-même est décrit dans la RFC 1321.
  • RFC 3461, RFC 3464, RFC 3798 et RFC 3885 décrivent DSN (Delivery Status Notifications).
  • La page http://www.activexperts.com/support/activemail/auth/ comprend une bonne description des schémas d’authentification AUTH LOGIN, plaine AUTH et AUTH CRAM-MD5 qui est implémentée par CPJNSMTPConnection.
  • RFC 3207 définissent comment STARTTLS fonctionne.
Caractéristiques
  • Interface C++ simple et propre.
  • L’interface fournie est synchrone qui fournit un modèle de programmation plus facile que d’utiliser des sockets asynchrones.
  • Le code ne s’appuie pas sur les classes MFC de la douille. Ces classes ont un certain nombre de lacunes, dont pose des problèmes lorsqu’ils sont utilisés dans les services NT.
  • Le code peut être utilisé dans une application console sans aucun problème (encore une fois ce n’est pas le cas pour les classes de sockets MFC).
  • Un délai d’attente configurable pour la connexion peut se faire via la classe API.
  • Les classes sont entièrement conforme à Unicode et équipées Unicode construit des options dans le fichier d’espace de travail.
  • À partir de la version 1.1, les classes supporte maintenant pleinement envoi de fichiers joints.
  • Multi CC, BCC & Reply To support est inclus.
  • Support des formats d’adresse de courrier électronique ordinaire et l’analyse des adresses courriel multiples.
  • Support complet pour MIME et MHTML (alias Email de HTML).
  • Support complet pour les jeux de caractères MIME.
  • Programme d’échantillonnage complet inclus qui exerce la plus grande partie de la fonctionnalité de classes.
  • Depuis v2.61, les classes maintenant entièrement avalisé envoi mail via le protocole SSL. Cela signifie que vous pouvez par exemple utiliser le serveur SMTP de Gmail « smtp.gmail.com » sur le port 465. Notez également que toutes les autres fonctionnalités telles que l’authentification sont entièrement pris en charge via le protocole SSL. Par exemple pour utiliser Gmail vous aurez besoin d’une forme d’authentification tels que AUTH PLAIN car il ne fonctionne pas comme un relais ouvert (ce qui faciliterait le spam).
  • Prend en charge de nombreux protocoles d’authentification, y compris “AUTH CRAM-MD5″, « AUTH LOGIN », « AUTH PLAIN » et « AUTH NTLM ». Une forme de « Détection automatique » d’authentification est également pris en charge. Dans ce mode, les protocoles d’authentification pris en charge par le serveur sont détectés et le protocole plus approprié est utilisé.
  • À partir de v2.65, les classes incluent un support complet pour le DSN (Delivery Status Notifications).
  • À partir de v2.84, les classes incluent un support pour de MDN (Notifications de Disposition de Message)
  • À partir de v2.86, les classes prennent en charge STARTTLS. Cette commande SMTP permet une connexion de texte brut SMTP standard à effectuer, et en supposant que le serveur SMTP appuie STARTTLS, la connexion peut être améliorée à une connexion cryptée milieu flux. Souvent les serveurs SMTP STARTTLS n’offrent que via le port 25 au lieu de SSL / TLS sur un autre port.
  • Éventuellement prend en charge le codage d’en-tête adresse.
  • À partir de v3.09, les classes ne sont supportées que le VC 2013 ou plus tard.

Le fichier zip joint contient le code source de CPJNSMTPConnection et un programme de test simple d’exercer toutes les fonctions, que les classes fournissent.

Droit d’auteur
  • Vous êtes autorisé à inclure le code source dans n’importe quel produit (commercial, shareware, freeware ou autre) quand votre produit est libéré sous forme binaire.
  • Vous êtes autorisé à modifier le code source en quelque sorte que vous voulez sauf que vous ne pouvez pas modifier les détails du droit d’auteur au sommet de chaque module.
  • Si vous voulez distribuer le code source avec votre application, vous êtes seulement autorisé à distribuer des versions publiées par l’auteur. Il s’agit de maintenir un seul endroit pour obtenir le code source.
  • Important!: s’il vous plaît noter que j’ai été informé que CPJNSMTPConnection sert à développer et à envoyer du courrier non sollicité en vrac. Ce n’était pas l’intention du code et l’auteur interdit explicitement l’utilisation du code d’un logiciel de ce genre sans mon autorisation écrite explicite.
Mises à jour


V1.0 (26 mai 1998)
  • Première version publique.
V1.1 (17 juin 1998)
  • Fixe le cas un simple point sur sa propre dans le corps d’un message
  • Classes prend désormais en charge une option « Reply-To » le champ d’en-tête
  • Classes maintenant entièrement prise en charge fichiers pièces jointes
  • Quelques retouche sur le contenu du fichier d’aide
V1.11 (18 juin 1998)
  • Fixe une mémoire écraser le problème qui se produisait avec le tampon utilisé pour coder les pièces jointes au format base64.
V1.12 (27 juin 1998)
  • Le cas une ligne commence par un .” mais Contains l’autre texte est maintenant aussi pris en charge. Reportez-vous au document RFC821, Section 4.5.2 pour plus de détails.
  • m_sBody fr CSMTPMessage maintenant protégé. Les applications clientes maintenant doivent appeler AddBody au lieu de cela. Cela garantit que FixSingleDot est appelée uniquement une fois même si le même message est envoyé plusieurs fois.
  • Fixe un certain nombre de problèmes avec commentaire les limites MIME ont été définis et envoyés.
  • Débarrassé d’un avertissement de compilateur écou formel non référencé lorsque vous faites une version Release.
  • Merci à Chris Davidson pour toutes les suggestions et corrections de bugs.
V1.2 (11 août 1998)
  • Fichier projet VC 5 est maintenant offert
  • Tableau de pièce jointe qui contient la classe de message utilise maintenant des références au lieu de pointeurs.
  • Maintenant utilise Sleep pour donner notre temps tranche au lieu de Sleep(100), c’est la manière privilégiée d’écriture de code de style du scrutin dans Win32 sans impacter sévèrement les performances.
  • Toutes les instructions de traçage affichent maintenant la valeur tel que retourné par GetLastError
  • Un certain nombre d’extra affirme ont été ajoutés
  • Une fonction AddMultipleRecipients a été ajoutée qui soutient a ajouté un certain nombre de destinataires en même temps d’une seule chaîne. Remerciements à Bob Yang pour suggéré la fonction et le mode code.
  • Instructions de traçage supplémentaires ont été ajoutées pour aider au débogage
V1.21 (12 septembre 1998)
  • Enlevé quelques avertissements de compilateur variable non référencé découvert lorsque la classe est compilée sur Visual C++ 6.0.
  • Correction d’un bug majeur qui causait un ASSERT lorsque le destructeur de CSMTPAttachment a été appelé dans la InitInstance de l’application de l’échantillon. Cela a été introduit par inadvertance pour la version 1.2. La solution est de revenir fix 2) comme pour la v1.2. Ce nouveau correctif aidera également à réduire le nombre d’images de fixation conservés en mémoire en même temps.
  • Corrigé quelques erreurs dans le fichier d’aide.
8 novembre 1998
Philip K Chung a pris la classe CPJNSMTPConnection et mis au point une version qui a les caractéristiques suivantes :
  • pas plus MFC
  • toutes les classes de collection et les classes string de la STL
  • a tenté de rendre thread sûr en faisant essentiellement libre de threads (c.-à-d. il devrait être capable de gérer plusieurs threads en entrant son code en même temps
  • Il a éclaté entre des modules distincts et ajouté un en-tête précompilé pour accélérer le processus de compilation
  • tout cela est devenu une DLL avec un point d’entrée unique, c’est-à-dire voir le fichier d’en-tête public
  • changé la structure de répertoire autour. fichier d’en-tête public relève de …/common/include et les DLL qui en résulte est copié sur …/common/bin
  • ajout du support pour CC et BCC
Le code peut être téléchargé ici. Je vous demande de transmettre toutes les requêtes relatives au présent code à Philippe comme je suis d’hébergement uniquement le code comme une faveur pour lui car il ne maintient pas un site web de la sienne.
V1.3 (18 janvier 1998)
  • Soutien total a maintenant été ajouté pour CC (copie carbone) & BCC (Blind Carbon Copy).
V1.31 (22 février 1999)
  • Ajouté une méthode Get et SetTitle qui permet à un titre de pièce jointe des fichiers à la différence que le nom du fichier original.
  • Mise à jour exemple d’application pour inclure une ligne d’objet plus descriptive.
  • Délai par défaut pour le code lorsqu’une version debug est construite est réglée à 60 secondes.
  • Amélioré la lecture des réponses du serveur de mise en œuvre d’un tampon de réception growable.
  • Mise à jour des instructions sur comment les documents RFC pertinents peuvent être récupérés.
V1.32 (25 mars 1999)
Maintenant dort pendant 250 ms au lieu de céder à la tranche horaire. Cela aide à réduire l’utilisation du processeur lors de l’attente de données arriver dans la douille.
V1.33 (14 mai 1999)
Mise à jour de documentation pour faire référence à la RFC 822.
Correction d’un bug avec la façon dont le code génère des champs de fuseau horaire dans les en-têtes de Date. Merci à Randy A. Scott pour avoir signalé ce bug.
V1.34 (10 septembre 1999)
CSMTPMessage::GetHeader améliorée pour inclure les champs mime même quand aucuns pièces jointes ne sont incluses.
V1.35 (5 octobre 1999)
Fixe 2 niveau 4 avertissements lorsqu’il est compilé à l’aide de VC 6.
V1.36 (16 février 2000)
Correction d’un autre problème de compilateur lors de la compilation avec VC 6.
V1.37 (19 mars 2000)
Correction d’un problème dans GetHeader sur les machines Windows Non-English
Désormais livré avec un espace de travail de 5 VC. J’ai expédié accidentellement une version 6 VC dans l’une des versions précédentes du code.
Fixe un certain nombre de problèmes d’UNICODE
Mise à jour de l’exemple d’application d’affirmer délibérément avant de se connecter au serveur SMTP de l’auteur.
V1. 38 (26 mars 2000)
Mise à jour de l’exemple d’application fourni avec le code d’être un client de messagerie mini. Maintenant, cela devrait également donner une meilleure idée de ce que le code peut être utilisé pour.
V1. 39 (28 mars 2000)
Définir le délai d’attente du mode de sortie à 10 secondes. 2secondes causait des problèmes de cadran lent des connexions réseau.
V1.40 (7 mai 2000)
Ajout de quelques ASSERT dans CSMTPSocket::Connect.
V1.41 (20 juin 2000)
L’encodeur base64 retirés de ce fichier
Ajouté la mise en œuvre du décodeur/encodeur base64 dans un fichier séparé. Cela a été fait parce que le décodage en base64 ne faisait pas partie de l’implémentation antérieure
Ajout du support pour connexion ESMTP. La classe maintenant tente d’authentifier l’utilisateur sur le serveur ESMTP en utilisant le nom d’utilisateur et mots de passe fournis. Pour cela Connectez maintenant prend le nom d’utilisateur et mots de passe en tant que paramètres. Ceux-ci peuvent être null, dans quel cas ESMTP l’authentification n’est pas tentée
Cette classe peut maintenant gérer les schémas d’authentification de connexion AUTH et AUTH LOGIN PLAIN
Ajouté le md5.* de fichiers contenant le code de génération de digest MD5 après modifications afin qu’il compile avec VC ++ 6

Ajouté à la procédure de login CRAM-MD5.
Veuillez noter que tout le soutien pour l’authentification SMTP a été ajouté par Puneet Pawaia auquel je suis apprécié avec gratitude pour tous les efforts mis en.
V2.0 (21 juin 2000)
Comprend maintenant un certain nombre de fichiers manquant dans le fichier zip.
Mis à jour le numéro de version à v2 pour refléter les changements majeurs survenus dans v1.41
V2.01 (10 juillet 2000)
Correction d’un problème avec l’envoi de pièces jointes > 1K en taille.
Changé les paramètres de CPJNSMTPConnection::Connect
V2.02 (30 juillet 2000)
Correction d’un bug dans AuthLogin qui transmettait le nom d’utilisateur et le mot de passe par un « = » supplémentaire qui était à l’origine le login à l’échec. Merci à Victor Vogelpoel pour trouver cela.
V2.03 (5 septembre 2000)
Ajouter une macro préprocesseur de CSMTP_NORSA pour permettre au code de CPJNSMTPConnection être compilé sans la dépendance sur le code RSA.
V2.04 (28 décembre 2000)
Supprimé une variable inutilisée de ConnectESMTP.
Autorisé le nom d’hôte envoyé dans la commande HELO à préciser au moment de l’exécution en plus d’utiliser le nom d’hôte de l’ordinateur client
Correction d’un problème des caractères ASCII élevés ne étaient pas correctement encodés dans la cité-printable version du corps envoyé.
Ajout du support pour l’utilisateur définissable charset pour le corps du message.
Limites MIME sont maintenant toujours envoyés indépendamment de savoir si les pièces jointes sont inclus ou non. Ceci est nécessaire car le corps utilise cité-imprimable.
Correction d’un bug dans sendLines qui était à l’origine corps de petit message à envoyer correctement
Supporte maintenant complètement les en-têtes personnalisés dans le message SMTP
Correction d’un bug de copier et coller le port par défaut pour la classe socket SMTP a 110.
Vous pouvez maintenant spécifier l’adresse à laquelle est liée la prise. Cela permet au programmeur de décider sur lequel les données NIC devraient être envoyées depuis. Ceci est particulièrement utile sur une machine avec plusieurs adresses IP.
Ajout de fonctions dans la classe de connexion SMTP à numérotation automatique et auto déconnexion à Internet si vous le désirez.
Exemple d’application a été amélioré pour permettre de Auto Dial et liaison à des adresses IP à configurer.
Remerciements à Yaroslav Liapkov, Josef Hampl, Duncan Strand, Fritz Roland « Nick » Bjorklund, Lev Elbert et Perry Rapp pour trouver ces problèmes et/ou de suggérer des améliorations.
V2.1 (14 mai 2001)
Charset est maintenant par défaut ISO 8859-1 au lieu de nous-ascii
Supprimé un certain nombre de variables non référencés de l’exemple d’application.
En-têtes sont désormais codés s’ils contiennent des caractères non ascii.
Correction d’un bug dans getLine, grâce à Lev Evert pour repérer celui-ci.
Fait le jeu de caractères la valeur d’un membre de la classe de message au lieu de la classe connection
Exemple d’application maintenant soutient pleinement spécifiant le jeu de caractères du message
Ajoute une méthode de AddMultipleAttachments CSMTPMessage
Pièce détachée maintenant peut être copiées, les uns aux autres grâce à des méthodes nouvelles dans CSMTPAttachment
Classe de message contient désormais des copies des pièces jointes au lieu de pointeurs pour eux
Exemple d’application permet maintenant de plusieurs pièces jointes à être ajoutées
Supprimé un inutile affirmer dans QuotedPrintableEncode
Un drapeau de Mime a ajouté à la classe CSMTPMessage qui vous permet de décider si oui ou non un message doit être envoyé comme MIME. Notez que si vous avez des pièces jointes, puis mime est supposé.
Classe CSMTPAttachment est devenu CSMTPBodyPart en prévision d’un support complet pour envoyer un MIME et MHTML
Mis à jour le message de copyright dans le code source et documentation
Correction d’un bug dans GetHeader relie à l’utilisation de _tsetlocale. Merci à Sean McKinnon pour repérer ce problème.
Correction d’un bug dans SendLines lors de l’envoi de petites pièces. Grâce à Deng Tao pour repérer ce problème.
Supprimé la nécessité de SendLines fonction entièrement.
Supporte maintenant pleinement e-mail HTML (aka MHTML)
V2.11 (17 juin 2001)
Correction d’un bug dans CSMTPMessage::HeaderEncode espaces n’étaient pas être interprétées correctement. Merci à Jim Alberico pour repérer ce.
Fixe 2 numéros avec ReadResponse, les deux ayant à voir avec les réponses de plusieurs lignes. Merci à Chris Hanson pour cette mise à jour.
V2.12 (25 juin 2001)
Code automatiquement les liens présent dans Winsock et RPCRT40. Cela évite d’avoir à spécifier dans leurs paramètres de l’éditeur de liens le code client. Merci à Malte et Phillip pour repérer cette question.
Mise à jour des exemples de code dans la documentation. Merci à Phillip pour repérer ce.
Amélioré le code de CSMTPBodyPart::SetText pour s’assurer que les lignes sont correctement emballés. Merci à Thomas Moser pour ce correctif.
V2.13 (1er juillet 2001)
Mis à jour le QuotedPrintableEncode pour empêcher le code pour entrer dans une boucle infinie en raison d’un mot long soit plus grand que SMTP_MAXLINE, dans ce cas, le mot est cassé. Merci à Manuel Gustavo Saraiva pour ce correctif.
Fourni une nouvelle variable protégée dans CSMTPBodyPart appelé m_bQuotedPrintable pour contourner la fonction QuotedPrintableEncode dans les cas que nous ne voulons pas ce genre de correction. Encore une fois Merci à Manuel Gustavo Saraiva pour ce correctif.
V2.14 (15 juillet 2001)
Améliorer la gestion des erreurs dans la fonction CSMTPMessage::AddMultipleAttachments. En outre la valeur de retour a été changée de BOOL int.
V2.15 (13 août 2001)
Correction d’un bug dans QuotedPrintableEncode qui était enveloppant le codage de caractères sur plusieurs lignes. Merci à Roy He pour repérer ce.
Fourni une méthode « SendMessage » qui envoie un email directement sur le disque. Cela vous permet de construire vos propres e-mails ainsi que l’utilisation la classe juste faire l’envoi. Cette fonction a aussi l’avantage qu’elle utilise la mémoire efficacement et signale la progression.
Fourni un appui pour notification de progression et l’annulation par l’intermédiaire de la méthode virtuelle de « OnSendProgress ».
V2.16 (29 septembre 2001)
Correction d’un bug dans ReadResponse qui s’est produite lorsque vous déconnecté via l’accès réseau à distance, alors qu’une connexion est active. Cela a été initialement repéré dans ma classe de POP3.
Correction d’un problème dans CSMTPBodyPart::GetHeader qui était toujours y compris le « quoted-printable » même lorsque
m_bQuotedPrintable pour cette partie du corps était faux. Grâce à “jason” pour repérer ce.
Eric Fontana a pris la classe CPJNSMTPConnection et mis au point une version de COM qui possède les caractéristiques suivantes :
Dans proc dll COM interface
Prend en charge IDispatch peut être appelée de l’ASP, VBScript, JScript etc.
Le code peut être téléchargé ici. Je vous demande de transmettre toutes les requêtes relatives au présent code à Eric que je suis seulement hébergement le code comme une faveur à lui.
V2.17 (12 octobre 2001)
Correction d’un problème GetBody signalait la taille en tant que plus grand qu’il aurait être de 1. Merci à « f c » pour repérer ce problème.
Correction d’un bug dans les instructions de traçage lorsque Impossible d’établir une connexion de socket.
L’exemple d’application affiche maintenant un filtre de « All Files » lors de la sélection des pièces jointes à envoyer.
Correction d’un problème à l’envoi de pièces jointes de 0 octet. Grâce à Deng Tao pour repérer ce problème.
3 décembre 2001
Élément inclus dans les droits d’auteur sur l’utilisation de classe dans des enveloppes en vrac.
V2.18 (11 janvier 2002)
Comprend maintenant une méthode pour envoyer un message directement à partir de mémoire. Merci à Tom Allebrandi pour cette suggestion.
Changer le nom de la fonction « IsReadible » pour être « IsReadable ». Je n’ai jamais très bien anglais!.
Correction d’un bug dans CSMTPBodyPart::QuotedPrintableEncode. Si une ligne a été exactement 76 caractères plus \r\n, il produit une rupture de ligne souple non valide de « \r=\r\n\n ». Merci à Gerald Egert pour repérer ce problème.
13 janvier 2002
Mise à jour mineure pour l’exemple d’application pour corriger un bug dans la navigation pour les pièces jointes, les classes de base n’a ne pas changés.
V2.19 (29 juillet 2002)
Correction d’une violation d’accès dans CSMTPBodyPart::QuotedPrintableEncode. Merci à Fergus Gallagher pour repérer ce problème.
Correction d’un problème , dans de très rares cas, la fonction de QuotedPrintableEncode produit un simple point sur une ligne, lorsque vous insérez le « = » pour éviter la limite maxline le serveur de messagerie. J’ai inséré un appel à FixSingleDot après l’appel à la fonction QuotedPrintableEncode dans GetBody. Merci à Andreas Kappler pour repérer ce problème.
Correction d’un problème en CSMTPBodyPart::GetHeader qui assure à tous les clients de messagerie peuvent gérer correctement les parties du corps et les pièces jointes qui ont un nom de fichier avec espaces dedans. Merci à Andreas Kappler pour repérer ce problème.
QP d’encodage est maintenant utilisé seulement lorsque vous spécifiez MIME. Cette version corrige un bug tel que rapporté par David Terracino.
Supprimé maintenant inutilisée « QAnywhere » lien dans le fichier HTML supportant le code.
V2.20 (10 août 2002)
Fixe un certain nombre d’exceptions non interceptée fichier dans CSMTPBodyPart::GetBody, CSMTPMessage::SaveToDisk et CPJNSMTPConnection::SendMessage. Merci à John Allan Miller pour avoir signalé ce problème.
La version CPJNSMTPConnection::SendMessage de la méthode qui envoie un fichier directement sur le disque, échoue si le fichier est vide.

Amélioré l’exemple d’application en affichant un curseur d’attente pendant envoi un message de fichier.
Amélioré l’exemple d’application en avertissant l’utilisateur s’il manquants des paramètres de messagerie et puis mettre la boîte de dialogue de configuration.
V2.21 (20 septembre 2002)
Correction d’un problème le code « Coder.EncodedMessage » ne était pas transformé d’une chaîne ASCII en une chaîne UNICODE dans les appels à CString::Format. Cela se passait lors de l’envoi que du nom d’utilisateur et le mot de passe pour « AUTH LOGIN » soutiennent en plus d’envoyer le “digest de nom d’utilisateur” “AUTH CRAM-MD5″ soutien. Merci à Serhiy Pavlov pour avoir signalé ce problème.
Supprimé un certain nombre d’appels à CString::Format et plutôt remplacé par constructeurs CString littérales de chaîne à la place.
V2.22 (3 octobre 2002)
Encodage imprimable entre guillemets ne fonctionnait pas correctement en mode UNICODE. (conversion non valide de TCHAR en octet). Merci à Serhiy Pavlov pour avoir signalé ce problème.
Objet encoding ne fonctionnait pas correctement en mode UNICODE. (conversion non valide de TCHAR en octet). Merci à Serhiy Pavlov pour avoir signalé ce problème.
Il n’a pas insérer « charset » tag dans l’en-tête de la racine pour les messages en texte brut (maintenant il comprend trop « charset » dans les messages en texte brut). Merci à Serhiy Pavlov pour avoir signalé ce problème.
V2.23 (4 octobre 2002)
Correction d’un problème l’en-tête / séparation de corps ne était pas envoyée correctement pour les mails avec pièces jointes ou lorsque le message est codé de MIME. Merci à Serhiy Pavlov pour avoir signalé ce problème.
Correction d’un bug dans QuotedPrintableEncode et HeaderEncode, qui était à l’origine des erreurs. Merci à Antonio Maiorano pour avoir signalé ce problème.
Correction d’un problème avec un séparateur de ligne supplémentaire entre l’en-tête et le corps des emails envoyé. Cela n’était évident dans les clients de messagerie si un email mime non sans pièces jointes a été envoyé.
V2.24 (11 décembre 2002)
Examiner toutes les instructions de traçage pour le correct
Fourni une méthode OnError virtuelle qui est appelée avec des informations d’erreur.
V2.25 (7 février 2003)
Ajout d’un argument « BOOL bGracefully » pour déconnecter afin que quand une application annule l’envoi d’un message, vous pouvez passez FALSE et fermer le socket sans terminaison correctement la conversation SMTP. Merci à « nabocorp » pour cette belle addition.
Un correcteur orthographique sur la documentation <g>.
9 février 2003
Mise à jour de l’exemple d’application pour afficher une boîte de dialogue de progression simple lorsque vous envoyez un message de l’option de disque (sans utiliser le Direct « envoyer »). Cela fournit un exemple de comment vous pouvez implémenter un résiliable envoi d’un message avec le soutien de progrès. Merci à « nabocorp » pour avoir suggéré cet ajout à l’échantillon.
V2.26 (19 mars 2003)
Ajout de constructeurs de copie et l’opérateur = pour la classe CSMTPMessage. Merci à Alexey Vasilyev pour cette suggestion.
V2.27 (13 avril 2003)
Correction d’un bug dans la gestion de réponses EHLO. Grâce à « Senior » pour le rapport de bogue et le correctif.
V2.28 (17 avril 2003)
Amélioré le constructeur de CSMTPAddress pour analyser l’adresse e-mail et le nom convivial plutôt que de supposer que c’est une adresse e-mail.
Retravaillé la syntaxe de la méthode CSMTPMessage::ParseMultipleRecipients. Maintenant en interne cette fonction utilise également le nouveau constructeur de CSMTPAddress.
V2.29 (19 avril 2003)
Correction d’un bug dans le constructeur de CSMTPAddress je mélangeais le nom convivial dans les séparateurs de “<>”, quand il aurait être l’adresse de courriel.
V2.30 (4 mai 2003)
Correction d’un problème la classe n’est pas convertir le corps du message et sous réserve de l’encodage désiré mais plutôt change l’encodage de l’email dans l’en-tête de l’e-mail. Étant donné que la question de la prise en charge plusieurs langues est un complexe, que j’ai décidé que nous pourrions régler pour envoyer des emails de CPJNSMTPConnection tous en UTF-8. J’ai ajouté quelques fonctions de conversion à la classe qui à ce stade toujours convertit le corps et le sujet de l’email en UTF-8. Un grand merci à Itamar Kerbel pour cette belle addition.
Vers app code et échantillon 6 VC.
V2.31 (5 mai 2003)
Remanié de la façon dont le codage UTF8 est maintenant chose fait. Ce que vous devez faire si vous voulez utiliser le codage UTF-8 est de définir le jeu de caractères « UTF-8 » et utiliser soit QP ou 64 codage de base.
Retravaillé l’encodage automatique de la ligne d’objet pour utiliser les paramètres provenant de la racine, partie du corps SMTP
Seuls les en-têtes corrects selon la RFC MIME sont désormais codés.
QP d’encodage est le mécanisme d’encodage maintenant toujours utilisé pour les en-têtes.
En-têtes sont encodés maintenant seulement si nécessaire être encodés.
V2.32 (12 mai 2003)
Correction d’un bug l’en-tête X-Mailer était envoyé incorrectement. Merci à Paolo Vernazza pour avoir signalé ce problème.
Ajout de l’en-tête X-Mailer est maintenant optionnel. En outre échantillon app maintenant n’envoie pas l’en-tête X-Mailer.
Maintenant, l’exemple d’application n’envoie pas l’en-tête Reply-To.
18 août 2003
Christian Andersen a pris la classe CPJNSMTPConnection et mis au point une version fonctionne sous Windows CE. Le code peut être téléchargé ici. Je vous demande de transmettre tout renseignement concernant ce code à Christian que je suis seulement hébergement le code comme une faveur à lui.
V2.33 (18 août 2003)
Modification de la valeur renvoyée par la méthode ConnectToInternet. Au lieu qu’il soit un booléen, c’est maintenant un enum. Cela permet de faire la différence entre les deux conditions qu’il ne pouvait pas auparavant, à savoir le code client lorsqu’il existe déjà une connexion à internet ou si une nouvelle connexion (sans doute une connexion dial-up a été effectuée). Cela permet au code client puis déconnecter si il fallait une nouvelle connexion. Grâce à Pete Arends pour cette belle addition.
19 août 2003
Mise à jour de l’exemple d’application pour éviter une fuite de mémoire. Il s’avère que c’était à voir avec l’ordre des <string>dans l’en-tête de pré compilé. Je n’ai jamais trop aimé de STL et cela a confirmé mes préjugés. Merci à Damian Willis pour avoir signalé ce problème.
V2.34 (15 octobre 2003)
Retravaillé la méthode CPJNSMTPConnection::ReadResponse pour utiliser le délai d’attente fourni par IsReadable plutôt que d’appeler le sommeil. Merci à Clarke Brunt pour avoir signalé ce problème.
V2.35 (3 novembre 2003)
Simplifié le code dans CPJNSMTPConnection::ReadResponse. Merci à Clarke Brunt pour avoir signalé ce problème.
V2.36 (3 décembre 2003)
Faites le code qui vérifie les réponses de connexion qui contiennent « Username » et « Password » insensible à la casse. Grâce à Zhang xiao Pan pour avoir signalé ce problème.
V2.37 (11 décembre 2003)
Correction d’une variable unreferrenced dans CPJNSMTPConnection::OnError tel que rapporté par VC.Net 2003
Macro DEBUG_NEW est maintenant utilisé seulement 6 VC et non VC 7 ou 7.1 de la VC. Cela permet d’éviter un problème sur ces compilateurs il existe un conflit entre elle et les fichiers d’en-têtes STL. Merci à Alex Evans pour avoir signalé ce problème.
V2.38 (31 janvier 2004)
Correction d’un bug dans CSMTPBodyPart::GetBody la taille de la partie du corps a été incorrectement calculant la taille si le codé comportait un multiple exact de 76. Merci à Kurt Emanuelson et Enea Mansutti pour avoir signalé ce problème.
V2.39 (7 février 2004)
Correction d’un bug dans CSMTPBodyPart::SetText le code serait entrer dans une boucle sans fin dans la fonction Replace. Il a maintenant été remplacé par CString::Replace. Maintenant, cela signifie que la classe ne compilera pas maintenant sur VC 5. Merci à Johannes Philipp Grohs pour avoir signalé ce problème.
Fixe un certain nombre d’avertissements lorsque le code est compilé avec VC.Net 2003. Merci à Edward Livingston pour avoir signalé ce problème.
V2.40 (18 février 2004)
Vous pouvez maintenant éventuellement définir la priorité d’un e-mail thro la variable CSMTPMessage::m_Priority. Merci à Edward Livingston pour avoir suggéré cet ajout.
V2.41 (4 mars 2004)
Pour éviter les conflits avec la classe ATL Server du même nom, à savoir « CSMTPConnection », la classe est maintenant appelée « CPJNSMTPConnection ». Pour assurer la mise à niveau facile du code, « CSMTPConnection » est maintenant définie comme étant « CPJSMTPConnection » si le code détecte que la classe ATL Server SMTP n’est pas incluse. Merci à Ken Jones pour avoir signalé ce problème.
V2.42 (13 mars 2004)
Correction d’un problème la valeur de CSMTPBodyPart::m_dwMaxAttachmentSize ne était pas copiée dans le CSMTPBodyPart::operator = méthode. Merci à Gerald Egert pour avoir signalé ce problème et le correctif.
V2.43 (5 juin 2004)
Correction d’un bug dans CSMTPConnection::ReadResponse, les mauvais paramètres sont null résilié. Merci à « caowen » pour cette mise à jour.
Mise à jour de la fonction CSMTPConnection::ReadResponse pour gérer les réponses multilignes dans tous les cas. Merci à Thomas Liebethal pour avoir signalé ce problème.
V2.44 (7 juin 2004)
Fixe un potentiel problème de débordement de tampon dans CSMTPConnection::ReadResponse lorsque certaines réponses de ligne multi sont reçus
V2.45 (30 septembre 2004)
Correction d’un problème de l’analyse en CPJNSMTPConnection::ReadResponse lorsque les réponses de ligne multi sont lues en sous forme de paquets multiples. Merci à Mark Smith pour avoir signalé ce problème.
Retravaillé le code qui prend en charge les divers mécanismes d’authentification pour prendre en charge les termes corrects. Ce qu’on appelait soutien « AUTH LOGIN PLAIN » maintenant plus correctement utilise le terme « AUTH PLAIN ». Les noms des fonctions et des enums maintenant ont également été remaniés.
Fait un examen de l’exemple de code d’application fourni avec la classe afin que le nom des modules, projets, exe, etc. est devenu « PJNSMTPApp ». Aussi retravaillé le nom de quelques classes d’assistance ainsi que le nom du module qui prend en charge la classe principale.
Reconditionné CPJNSMTPConnection::AuthLoginPlain (maintenant appelé AuthPlain) pour gérer correctement le cas une réponse non valide est reçue lorsque attend le nom d’utilisateur : réponse. Merci à Mark Smith pour avoir signalé ce problème.
V2.46 (23 décembre 2004)
Champ « Nom » dans les en-têtes Content-Type est désormais cité comme le champ de nom de fichier. Merci à Mark Smith pour avoir signalé ce problème en collaboration avec le client de messagerie Eudora.
V2.47 (24 janvier 2005)
Toutes les classes utilise maintenant des exceptions pour indiquer les erreurs. Cela signifie l’ensemble de la zone de gestion des erreurs dans le code beaucoup plus simple. Par exemple, le mécanisme de OnError est allé le long avec tous les littéraux de chaîne dans le code. Le code réel lui-même est beaucoup plus simple aussi. Vous devez examiner attentivement votre code comme beaucoup des valeurs de retour des méthodes (notamment CPJNSMTPConnection) sont maintenant nuls et lèvera de CSMTPException. Merci à Mark Smith pour demander cette mise à jour.
Général tidy up du code après l’essai du nouveau code de l’exception fondée.
19 février 2005
Mise à jour de la section utilisation de la documentation pour décrire ce qui est nécessaire pour intégrer le code dans vos applications. Merci à Matthew Tompkins pour demander cette mise à jour.
V2.48 (7 mars 2005)
Ajout de PJNSMTP_EXT_CLASS définir aux classes pour permettre à des classes pour être facilement intégré à extension dll. Merci à Arnaud Faucher pour avoir suggéré cet ajout.
Prennent désormais en charge l’authentification NTLM. Merci à Arnaud Faucher pour cette belle addition. L’authentification NTLM est fournie par une nouvelle classe réutilisable, appelée “CNTLMClientAuth” en PJNNTLMAuth.cpp/h”.
Correction d’un bug dans l’exemple d’application dans la persistance du paramètre d’authentification. Merci à Arnaud Faucher pour avoir signalé ce problème.
V2.49 (26 mars 2005)
Problèmes de compilation fixe avec le code lorsque la Force conformité dans pour boucle portée compilez paramètre est utilisé dans Visual Studio .NET 2003. Merci à Alexey Kuznetsov pour avoir signalé ce problème.
Correction de problèmes de compilation lorsque le code est compilé à l’aide du paramètre de problèmes de portabilité de détecter 64 bits dans Visual Studio .NET 2003.
V2.50 (18 avril 2005)
Ajout d’un simple IsConnected() fonction inline avec la classe CPop3Connection de l’auteur. Merci à Alexey Kuznetsov pour demander cet ajout.
Ajout d’un MXLookup la fonction qui fournit pour les recherches DNS pratiques des enregistrements MX (les adresses IP des serveurs de messagerie SMTP pour un domaine spécifique de l’hôte). Cette nouvelle fonction utilise en interne les nouvelles fonctions DNS qui sont fournies avec Windows 2000 ou version ultérieure. Pour vous assurer que le code continue à fonctionner correctement sur les versions antérieures de Windows, les pointeurs de fonction pour les fonctions requises sont construits lors de l’exécution à l’aide de GetProcAddress. Vous pouvez utiliser cette fonction pour connaître l’adresse IP des serveurs mail responsables d’un domaine spécifique. Cela vous permet de livrer les envoyer directement vers un domaine plutôt que par un serveur de messagerie tiers. Merci à Hans Dietrich pour avoir suggéré cette plus belle.
V2.51 (23 avril 2005)
Le code utilise maintenant une implémentation MS Crypto API de l’algorithme HMAC MD5 au lieu de code personnalisé basé sur le code MD5 de RSA. Cela signifie qu’il n’y a pas besoin de RSA MD5.cpp, MD5.h et glob-md5.h à inclure dans les applications clientes. En outre, les configurations de génération pour exclure le code MD5 de RSA a été supprimé de l’exemple d’application. Les nouvelles classes pour effectuer le hachage MD5 sont contenues dans PJNMD5.h et sont suffisamment génériques pour être inclus dans les applications clientes en leur nom propre.
V2.52 (1er mai 2005)
Utilise maintenant la classe wrapper de l’auteur CWSocket prises.
Ajout du support pour la connexion via proxy Socks4, Socks5 et HTTP
Le dernier paramètre à Connect a été supprimé et est configuré via un accesseur / mutateur paire Get/SetBoundAddress.
Classe de CSMTPException s’appelle maintenant CPJNSMTPException.
Classe utilise maintenant la classe Base64 comme prévu avec CWSocket. Cela signifie que les modules Base64Coder.cpp/h ne sont plus distribués ou requis et devrait être retiré de tous les projets qui utilisent les classes SMTP mis à jour.
Correction d’un bug dans SaveToDisk méthode par laquelle les fichiers existants ne étaient pas tronqués avant d’enregistrer le message électronique.
Tous les appels à allouer de la mémoire de tas maintenant génèrent une CPJNSMTPException si l’allocation échoue.
Ajout d’un MXLookupAvailable() fonctionner de manière que le code client peut savoir a priori si les recherches DNS MX sont pris en charge.
Exemple d’application vous permet maintenant d’utiliser la méthode MXLookup pour déterminer le serveur de messagerie à utiliser basé sur la première adresse de courriel que vous fournissez dans le champ à.
V2.53 (3 mai 2005)
Mise à jour de la section d’utilisation pour décrire la nécessité de disposer de la plate-forme SDK installé et configuré.
Fixe un certain nombre d’avertissements lorsque le code est compilé dans Visual Studio .NET 2003. Merci à Nigel Delaforce d’avoir signalé ces problèmes.
18 mai 2005
Correction d’un avertissement du compilateur dans la classe de CPJNMD5Hash lorsqu’il est compilé à l’aide de Visual Studio .NET 2003. Merci à Alexey Kuznetsov pour avoir signalé ce problème.
V2.54 (24 juillet 2005)
Maintenant prend en charge l’analyse des commentaires « (…) » dans les adresses. Merci à Alexey Kuznetsov pour cette belle addition.
Correction d’un problème l’en-tête du message peut contenir un en-tête « Content-Transfer-Encoding ». Cet en-tête doit être appliqué uniquement aux en-têtes MIME de parties du corps, plutôt que l’en-tête du message lui-même. Merci à Jeroen van der Laarse, Terence Dwyer et Bostjan Erzen pour avoir signalé ce problème et le correctif requis.
Maintenant appeler les AddTextBody et les AddHTMLBody tous deux la valeur du type racine corps partie MIME multipart/mixed. Auparavant les commentaires de code dit une chose et fait un autre (définie sur “multipart/related”). Merci à Bostjan Erzen pour avoir signalé ce problème.
V2.55 (14 août 2005)
Mise à jour mineure pour inclure des commentaires à côté de divers endroits dans le code pour informer les utilisateurs que faire s’ils compiler erreurs à la suite de la compilation du code sans le SDK de la plate-forme en cours d’installation. Merci à Gudjon Adalsteinsson pour demander cette mise à jour.
Correction d’un problème lorsque le code appelle la fonction DnsQuery lorsque le code est compilé pour UNICODE. Cela a été le résultat d’une erreur de documentation dans la plate-forme SDK qui dit mal que DnsQuery_W prend une chaîne ASCII, quand en réalité, il faut une chaîne UNICODE. Merci à John Oustalet III pour avoir signalé ce problème.
V2.56 (5 septembre 2005)
Correction d’un problème dans la méthode MXLookup mémoire n’était pas être correctement libérée dans l’appel à DnsRecordListFree. Merci à Raimund Mettendorf pour avoir signalé ce bug.
Correction d’un problème les lignes qui ont un seul point c’est-à-dire .” ne pas obtenir envoyé correctement. Merci à Raimund Mettendorf pour avoir signalé ce problème.
Retirés de l’appel à FixSingleDot de la méthode SetText comme cela est fait lors de l’exécution comme l’e-mail comme étant envoyé. Cela causait des problèmes de fixation de la question de la dot quand MIME codée de messages ont été envoyée vers le haut.
Pointeur de fonction de CompleteAuthToken est maintenant construit lors de l’exécution. Cela signifie que l’authentification NTLM client fonctionnera correctement sur Win9x tel qu’utilisé par la classe CPJNSMTPConnection et une autre classe au lieu d’apporter un message “Failed to load due à une exportation manquante…” à partir du chargeur de Windows. Si vous souhaitez supprimer la prise en charge NTLM de CPJNSMTPConnection alors vous pouvez continuer à utiliser la CPJNSMTP_NONTLM préprocesseur définir. Grâce à “Lior » pour avoir signalé ce problème.
Correction d’un problème la fonction FixSingleDot est appelée lorsque vous enregistrez un message sur le disque. C’était inexact et il devrait être effectué uniquement lorsque réellement courrier électronique SMTP.
V2.57 (7 septembre 2005)
Correction d’un autre simple point problème, cette fois le corps est composé de seulement un point unique. Merci à Raimund Mettendorf pour avoir signalé ce problème.
Correction d’une faute dans la fonction d’accesseur CPJNSMTPConnection::GetBoundAddress qui a été inexactement appelé CPJNSMTPConnection::SetBoundAddress. Grâce à Pavel Kolar pour avoir signalé cela.
V2.58 (29 septembre 2005)
Enlevé le lien avec secur32.lib car toutes les fonctions SSPI sont maintenant construites lors de l’exécution à l’aide de GetProcAddress. Merci à Emir Kapic pour cette mise à jour.
Méthode Format MD5 vous permet maintenant de spécifier une chaîne en majuscules ou minuscules pour le hachage. Ceci est nécessaire car le mécanisme d’authentification CRAM-MD5 nécessite un hachage MD5 en minuscules. Merci à Jian Peng pour avoir signalé ce problème.
250 ou 251 est considérée maintenant comme une réponse efficace à la commande RCPT. Merci à Jian Peng pour avoir signalé ce problème.
Les fuites de mémoire potentiel fixe dans la mise en œuvre de l’authentification NTLM que le code a été levée d’exceptions que le code d’authentification ne s’attendait pas à gérer.
V2.59 (2 octobre 2005)
MXLookup fonctionnalités de la classe peuvent maintenant être exclue par l’intermédiaire de la définition de préprocesseur « CPJNSMTP_NOMXLOOKUP ». Merci à Thiago Luiz pour demander cette mise à jour.
Exemple d’application ne dérange maintenant pas demander nom d’utilisateur et mot de passe si le type d’authentification est NTLM. Grâce à l’Emir Kapic pour repérer cette question.
Documentation a été mise à jour pour référencer des problèmes avec l’authentification NTLM et SSPI. Merci à Emir Kapic pour demander cette mise à jour.
Correction d’une erreur de mise à jour pour la version précédente qui a mal supporté la commande 251 supplémentaire pour la commande de « MAIL » au lieu de plus correctement la commande “RCPT”. Merci à Jian Peng pour avoir signalé ce problème.
V2.60 (7 octobre 2005)
Correction d’un problème les pièces jointes ont été incorrectement y compris une valeur charset dans leurs en-têtes. Merci à Asle Rokstad pour avoir signalé ce problème.
V2.61 (16 novembre 2005)
Maintenant inclut un support complet pour connexion via SSL. Par exemple l’envoi de courrier thro Gmail en utilisant le serveur « smtp.gmail.com » sur le port 465. Grâce à Vladimir Sukhoy pour offrir cette très belle addition (avec bien sûr les wrappers OpenSSL très propres de l’auteur!).
9 décembre 2005
Mise à jour de la section utilisation de la documentation sur la façon d’exclure correctement les fonctionnalités SSL de la classe. Merci à Berni Slootbeek pour demander cette mise à jour.
Mise à jour de la section utilisation de la documentation sur le meilleur moyen de mise en forme CID balises pour MHTML emails. Merci à Asle Rokstad pour demander cette mise à jour.
V2.62 (29 juin 2006)
Mise à jour de la documentation pour utiliser le même style que le site web.
Combine les fonctionnalités de la classe _PJNNTLMCLIENTAUTH_DATA dans la classe principale de CNTLMClientAuth.
Code utilise maintenant nouveaux casts de style C++ plutôt que le vieux style C jette si nécessaire.
ThrowPJNSMTPException intégrée fonctionne en classe de CPJNSMTPConnection et renommé en ThrowPJNSMTPException
Combine les fonctionnalités de la classe _PJNSMTP_DATA dans la classe principale de CPJNSMTPConnection.
Mis à jour le code pour nettoyer la compilation sur VC 2005
Mis à jour les détails du droit d’auteur.
Supprimé les contrôles inutiles pour défaut d’allouer par nouveau puisque dans MFC, il lèvera CMemoryExceptions!.
Code de constructeur CPJNSMTPException optimisé
V2.63 (14 juillet 2006)
Correction d’un bug dans CPJNSMTPConnection lorsqu’il est compilé en mode UNICODE, l’authentification NTLM échoue. Merci à Wouter Demuynck pour fournir le correctif pour ce bogue.
Retravaillé les méthodes CPJNSMTPConnection::NTLMAuthPhase(*) pour lever des exceptions CPJNSMTPException standard si il n’y a aucun problème détecté. Cela peut être fait maintenant que la classe CNTLMClientAuth est résistante aux exceptions sont levées.
Mise à jour de CNTLMClientAuth à utiliser de nouveaux moulages de style C++.
Faites la CNTLMClientAuth::NTLMAuthenticate fonction « exception » sûre, c’est les classes dérivées est libre de lever des exceptions dans leurs implémentations de NTLMAuthPhase1, de NTLMAuthPhase2 ou de NTLMAuthPhase3 et la classe CNTLMClientAuth nettoiera correctement ses ressources. Ceci est réalisé en faisant les variables de membre de valeurs CredHandle et SecHandle de la classe.
Remplacé tous les appels de ZeroMemory avec memset.
Maintenant la fonction publique de NTLMAuthenticate vous permet de passer d’une paire de nom et mot de passe d’utilisateur pour l’authentification NTLM à l’aide d’un compte spécifié au lieu des informations d’identification de l’utilisateur actuel. Si vous laissez ces valeurs null, alors vous obtiendrez l’ancien comportement qui consiste à utiliser les informations d’identification de l’utilisateur actuel. Merci à Wouter Demuynck pour cette très belle addition.
17 juillet 2006
Mis à jour le code dans l’exemple d’application pour permettre > 30000 caractères à être entrés dans la zone d’édition qui contient le corps de l’email. Ceci est réalisé en plaçant un appel à CEdit::SetLimitText dans la méthode OnInitDialog de la boîte de dialogue. Merci à Thomas Noone pour avoir signalé ce problème.
V2.64 (13 octobre 2006)
Code initialise maintenant la valeur de nom de domaine en CNTLMClientAuth::NTLMAuthenticate une chaîne vide au lieu d’une chaîne NULL. Cela évite les problèmes d’authentification NTLM lors de l’authentification comme un utilisateur de domaine avec certains serveurs de messagerie. Merci à Wouter Demuynck pour avoir signalé ce problème.
Correction d’un problème de déconnexion si l’appel à ReadCommandResponse a généré une exception, nous n’aurait pas fermer le socket ou m_bConnected la valeur false. Le code a été mis à jour afin de s’assurer que ceux-ci sont maintenant faits. Cela permet uniquement de corriger une expérience de débogage plus cohérente. Merci à Alexey Kuznetsov pour avoir signalé ce problème.
CPJNSMTPException::GetErrorMessage utilise désormais le paramètres régionaux par défaut de l’utilisateur pour mettre en forme les chaînes d’erreur.
Fixe quelques problèmes avec le nettoyage des pièces de l’en-tête et corps dans CPJNSMTPConnection::SendBodyPart et CPJNSMTPMessage::WriteToDisk. Merci à Xiao-li Ling pour avoir signalé ce problème.
V2.65 (11 novembre 2006)
Dévulcanisation CPJNSMTPException::GetErrorMessage d’utiliser le paramètres régionaux par défaut du système. Cela est compatible avec MFC comment sa propre gestion des erreurs.
Comprend maintenant un support complet pour le DSN (Delivery Status Notifications) comme spécifié dans la RFC 3461. Merci à Riccardo Raccuglia pour demander cette mise à jour.
CPJNSMTPBodyPart::GetBody et CPJNSMTPConnection::SendMessage (const CString & sMessageOnFile… maintenant ne s’ouvre pas le fichier de disque pour un accès en lecture exclusif, ce qui signifie que d’autres applications peuvent lire le fichier. Merci à Wouter Demuynck pour avoir signalé ce problème.
Correction d’un problème dans CPJNSMTPConnection::SendMessage (const CString & sMessageOnFile… , dans certaines circonstances, nous pourrions finissent par suppression local « pSendBuf » tampon deux fois. Merci à Izidor Rozman pour avoir signalé ce problème.
V2.66 (30 mars 2007)
Correction d’un bug dans CPJNSMTPConnection::SetHeloHostname une variable unitialized pile pourrait être utilisée. Merci à Anthony Kowalski pour avoir signalé ce bug.
Mis à jour les détails du droit d’auteur.
V2.67 (1er août 2007)
Les méthodes AuthCramMD5, ConnectESMTP, ConnectSMTP, AuthLogin et AuthPlain ont été maintenant rendus virtuels.
Maintenant prend en charge un protocole d’authentification de l’Auto. Cela permet de détecter quelles méthodes d’authentification du serveur SMTP prend en charge et utilise la méthode « plus sûre » disponible. Si vous n’acceptez pas l’ordre dans lequel le protocole est choisi, une fonction virtuelle appelée « ChooseAuthenticationMethod » a été fournie. Merci à « zhangbo » pour la fourniture de cette très belle addition au code.
Supprimé de la définition de la méthode de « AuthNTLM » défunte.
V2.70 (13 novembre 2007)
Mise à jour majeure pour le code à utiliser VC2005 caractéristiques. Cette version du code et de partir s’appuiera uniquement sur VC 2005 ou version ultérieure. Merci à Andrey Babushkin pour demander cette mise à jour. Veuillez noter qu’il y a eu des modifications avec rupture pour les noms et la disposition des différentes méthodes et variables membres. Vous devriez analyser attentivement l’exemple d’application inclus dans le téléchargement ainsi que votre code client pour les mises à jour requises, que vous devrez faire.
Exemple d’application inclus dans le téléchargement est maintenant construit pour Unicode et liens dynamiquement aux MFC. Elle est également liée dynamiquement aux dernières OpenSSL 0.9.8g dll.
V2.71 (19 novembre 2007)
La “Date:” en-tête est maintenant formé à l’utilisation de tableaux de recherche statiques pour le jour de la semaine et mois noms au lieu d’utiliser CTime::Format. Cela permet d’éviter de générer les en-têtes de Date non valides dans la version non anglaise de Windows les versions en langue locale de ces chaînes finirait par être utilisé. Merci pour vos commentaires à la page codeproject pour le code (spécifiquement http://www.codeproject.com/internet/csmtpconn.asp?df=100&forumid=472&mpp=50&select=2054493#xx2054493xx pour avoir signalé ce problème).
V2.72 (23 décembre 2007)
Suite à vos commentaires de Selwyn Stevens qui le mécanisme AUTH PLAIN n’était pas pour lui alors qu’il tentait d’envoyer un mail en utilisant le serveur SMTP de gmail, j’ai décidé de revenir en arrière et re-le domaine d’authentification SMTP à nouveau <g>de recherche. Il s’avère que la façon dont j’ai été mise en œuvre de soutien AUTH PLAIN n’était pas le même que celui spécifié dans la RFC pertinentes. Le code a maintenant été mis à jour afin d’être conforme à celle spécifiée dans la RFC. J’ai confirmé le fix comme fonctionnant correctement en utilisant le serveur de messagerie SMTP gmail à « smtp.gmail.com » sur le port SMTP/SSL de 465. J’ai également pris l’occasion de mettre à jour la documentation afin d’inclure une section avec des liens vers diverses RFC et outils de référence les pages web pour le fond
V2.73 (24 décembre 2007)
CPJNSMTPException::GetErrorMessage utilise désormais le drapeau FORMAT_MESSAGE_IGNORE_INSERTS. Pour plus d’informations, consultez le blog de Chen à http://blogs.msdn.com/oldnewthing/archive/2007/11/28/6564257.aspx. Merci à Alexey Kuznetsov pour avoir signalé ce problème.
Toutes les chaînes de nom d’utilisateur et mot de passe temporaires sont détruits maintenant solidement à l’aide de SecureZeroMemory.
V2.74 (31 décembre 2007)
Mise à jour de l’exemple d’application pour nettoyer la compilation sur VC 2008
Fixe un problème de compilation 64 x RemoveCustomHeader & AddMultipleAttachments.
Correction d’un problème de compilation 64 x dans CPJNSMTPAppConfigurationDlg::CBAddStringAndData
CPJNSMTPException::GetErrorMessage utilise désormais Checked::tcsncpy_s
Autre mineur mises à jours de CPJNSMTPException::GetErrorMessage
V2.75 (2 février 2008)
Mis à jour les détails du droit d’auteur.
Correction d’un bug dans CPJNSMTPMessage::FormDateHeader parfois invalide “Date:” header est créé. Le bogue se manifestera pour n’importe qui est en avance sur GMT, la différence n’est pas un multiple d’une heure. Selon l’applet de fuseau horaire Windows, ce bug n’aurait été possibles : Téhéran, Kaboul, Chennai, Kolkata, Mumbai, New Delhi, Sri Jayawardenepura, Katmandou, Yangon, Adélaïde et Darwin. Merci à Selwyn Stevens pour avoir signalé ce bug et fournissant le correctif.
V2.76 (1er mars 2008)
Valeurs enum de CPJNSMTP priorité, plus précisément de NO_PRIORITY ont été renommés afin d’éviter des accrochages avec un #define du même nom dans le fichier d’en-tête Windows SDK WinSpool.h. Les valeurs enum pour DSN_RETURN_TYPE ont également été renommés pour maintenir la compatibilité. Merci à Zoran Buntic pour avoir signalé ce problème.
Correction de problèmes de compilation liées aux changements récents dans la classe de Base64. Merci à Mat Berchtold pour avoir signalé ce problème.
Étant donné que le code est maintenant pour VC 2005 ou plus tard seulement, le code utilise désormais le soutien de codage Base64 du fichier d’en-tête ATL atlenc.h. Merci à Mat Berchtold pour avoir signalé cette optimisation. Cela signifie que le client n’est plus les projets doivent inclure Base64.cpp/h dans leurs projets.
V2.77 (31 mai 2008)
Maintenant, code compile proprement à l’aide de l’analyse du Code (/ analyze)
Supprimé l’utilisation de la fonction QuotedPrintableEncode et remplacé par ATL::QPEncode
Supprimé l’utilisation de la fonction QEncode et remplacé par ATL::QEncode
ReadResponse retravaillé d’utiliser CStringA en ligne avec la mise en œuvre dans la classe de POP3 de l’auteur.
V2.78 (20 juillet 2008)
Correction d’un bug dans ReadResponse le code est de déterminer si elle a reçu le terminateur. Merci à Tony Cool pour avoir signalé ce bug.
V2.79 (27 juillet 2008)
Mise à jour code se compile correctement à l’aide de _ATL_CSTRING_EXPLICIT_CONSTRUCTORS définir
CPJNSMTPMessage::GetHeader assure maintenant correctement tous les en-têtes de longs sont correctement pliés. En outre, cette fonction a été retravaillée pour créer l’en-tête en interne comme une chaîne ASCII plutôt que comme un style TCHAR CString.
V2.80 (16 août 2008)
Mise à jour de la prise en charge de connexion AUTH_AUTO pour revenir à aucune authentification si aucun schéma d’authentification n’est pris en charge par le serveur SMTP. Merci à Mat Berchtold pour cette mise à jour.
V2.81 (2 novembre 2008)
Améliorations au constructeur CPJNSMTPAddress qui accepte une chaîne unique. Le code supprime maintenant citations redondantes.
CPJNSMTPAddress::GetRegularFormat fait maintenant la forme régulière de l’adresse e-mail saisie Q encode.
L’exemple d’application utilise maintenant DPAPI pour crypter les paramètres de configuration username & mot de passe.
L’exemple d’application est désormais lié contre les dernières OpenSSL v0.9.8i dll.
Mis à jour les références à la documentation html de codage. En outre, le fichier zip comprend maintenant les dll de OpenSSL. Merci à Michael Grove d’avoir signalé ce problèmes.
V2.82 (6 novembre 2008)
Pour les meilleures raisons de compatibilité avec les serveurs de messagerie SMTP existants, tous les en-têtes de message incluent les adresses e-mail ne sont pas maintenant Q codé. Merci à Christian Egging pour avoir signalé ce problème.
Utilisation optimisée de CT2A classe partout dans le code
V2.83 (28 juin 2009)
Mis à jour les détails du droit d’auteur
Correction d’un bug l’adresse de courriel Reply-To n’était pas correctement ajouté au message. Merci à Dmitriy Maksimov pour avoir signalé ce problème.
Mise à jour des paramètres de projet de l’exemple d’application des valeurs par défaut plus modernes.
Mise à jour de l’exe de l’échantillon d’expédier avec OpenSSL v0.98k
Correction d’un bug dans CPJNSMTPConnection::SendBodyPart elle provoquerait des erreurs d’OpenSSL en essayant d’envoyer un corps de 0 octets en taille. Cela peut se produire lorsque MHTML basé e-mails sont envoyés et que vous utilisez une partie du corps « multipart/related ». Merci à « atota » pour avoir signalé ce problème
V2.84 (13 novembre 2009)
Maintenant prend en charge complète de MDN (Notifications de Disposition de Message) comme spécifié dans la RFC 3798. Merci à Ron Brunton pour demander cette mise à jour.
Réécrit CPJNSMTPMessage::SaveToDisk méthode pour utiliser CAtlFile
V2.85 (17 décembre 2009)
L’exemple d’application est maintenant lié contre les dernières OpenSSL v0.9.8l dll
Mise à jour de l’exemple de code dans la documentation pour mieux décrire comment utiliser les classes diverses. Merci à Dionisis Kofos pour avoir signalé ce problème.
V2.86 (23 mai 2010)
Mis à jour les détails du droit d’auteur
Mise à jour exemple d’application pour compiler proprement sur Visual Studio 2010
L’exemple d’application est maintenant lié contre les dernières dll de v1.0.0 OpenSSL
Supprimé une variable inutilisée « sRet » dans CPJNSMTPConnection::AuthCramMD5. Merci à Alain Danteny pour avoir signalé ce problème
Remplacé tous les appels à memcpy avec memcpy_s
Le code supporte maintenant le cryptage STARTTLS tel que défini dans la RFC 3207
Si l’appel à DnsQuery échoue, la valeur de l’erreur est aujourd’hui conservée à l’aide de SetLastError
AddTextBody maintenant définit le type mime de la partie du corps racine multipart/alternative. Il s’agit d’une valeur plus appropriée à utiliser qui est mieux pris en charge par plusieurs clients de messagerie. Merci à Thane Hubbell pour avoir signalé ce problème.
V2.87 (4 juin 2010)
Mis à jour le code et échantillon app pour compiler proprement lorsque CPJNSMTP_NOSSL est défini. Merci à « loggerlogger » pour avoir signalé ce problème.
V2.88 (10 juillet 2010)
À la suite des multiples utilisateurs de PJNSMTP, dont Chris Bamford et « loggerlogger », de la variation entre « multipart/mixed » et « multipart/alternative » a maintenant été revenue. L’utilisation de « multipart/mixed » est une valeur plus appropriée à utiliser. Essais réalisés par divers clients ont montré que ce paramètre fonctionne correctement lors de l’envoi HTML à base email dans GMail, Thunderbird et Outlook. Malheureusement, c’est le prix que je dois payer lors de l’acceptation de contributions de l’utilisateur final à ma base de code, je ne peux pas tester facilement. Dorénavant, que je prévois d’être beaucoup plus de discernement sur les modifications que je vais accepter pour éviter ces problèmes.
Le CPJNSMTPBodyPart a maintenant le concept de si oui ou non le corps est considéré comme une pièce jointe. Auparavant, le code suppose que si vous définissez le paramètre de m_sFilename que la partie du corps était une pièce jointe. Au lieu de cela, le code utilise maintenant la variable de membre de « m_bAttachment ». Cela permet une mémoire en représentation d’une pièce jointe à ajouter à un message sans avoir à écrire dans un fichier intermédiaire tout d’abord. Par exemple, ici est la série d’étapes vous aurait besoin de passer par l’intermédiaire d’ajouter une mémoire en jpeg image à un e-mail et l’ai apparaissent sous forme de pièce jointe :
const BYTE * pInMemoryImage = pointeur à votre image ;
DWORD dwMemoryImageSize = taille en octets de pInMemoryImage ;
CPJNSMPTBase64Encode Encoder ;
Encoder.Encoder (pInMemoryImage, dwMemoryImageSize, ATL_BASE64_FLAG_NONE) ;
CPJNSMTPBodyPart imageBodyPart ;
imageBodyPart.SetRawBody(encode.Result()) ;
imageBodyPart.SetBase64(TRUE) ;
imageBodyPart.SetAttachment(TRUE) ;
imageBodyPart.SetContentType(_T(“image/jpg”)) ;
imageBodyPart.SetTitle (_T (“le nom de l’image”)) ;
Message de CPJNSMTPMessage ;
Message.AddBodyPart(imageBodyPart) ;
Merci à Stephan Eizinga pour avoir suggéré cette plus belle.
V2.89 (28 novembre 2010)
AddTextBody et AddHTMLBody permettent maintenant de type MIME de la partie racine du corps être changé. Merci à Thane Hubbell pour demander cette mise à jour.
Ajouté une méthode CPJNSMTPBodyPart::GetBoundary.
Ajouté un exemple de code au constructeur de CPJNSMTPAppDlg de l’exemple d’application pour montrer comment créer un corps de SMTP message utilisé pièces. Merci à Thane Hubbell pour demander cette mise à jour.
CPJNSMTPBodyPart::GetHeader permet maintenant des attachements cité-imprimable et des matières premières à utiliser
L’exemple d’application est maintenant lié contre les dernières OpenSSL v1.0.0b dll
V2.90 (18 décembre 2010)
Supprimé les méthodes Set/GetQuotedPrintable et Set/GetBase64 de CPJNSMTPBodyPart et les remplacer par les nouvelles méthodes Set/GetContentTransferEncoding qui fonctionne avec une simple énumération.
CPJNSMTPBodyPart::SetAttachment et CPJNSMTPBodyPart::SetFilename maintenant affecte automatiquement le Content-Transfer-Encoding base64 pour les pièces jointes. Merci à Christian Egging pour avoir signalé ce problème.
L’exemple d’application est maintenant lié contre les dernières OpenSSL v1.0.0c dll
V2.91 (8 février 2011)
Mis à jour les détails du droit d’auteur
Code mis à jour pour soutenir la dernière classe SSL et les prises de l’auteur. Cela signifie que le code prend désormais en charge les serveurs SMTP d’IPv6
Connect, méthode permet désormais la liaison à une adresse IP spécifique
V2.92 (13 février 2011)
Supprimer le paramètre d’adresse IP binding de la méthode Connect, car il y avait déjà le support pour une liaison via les méthodes Set/GetBoundAddress.
Set/GetBoundAddress ont été renommé Set/GetBindAddress par souci de cohérence avec la classe de douilles
V2.93 (1er avril 2011)
Réintroduit la notion de codage de l’en-tête d’adresse. Par défaut, ce paramètre est désactivé, mais peut être activé via une nouvelle valeur booléenne CPJNSMPTMessage::m_bAddressHeaderEncoding. Merci à Bostjan Erzen pour avoir signalé ce problème.
L’exemple d’application est maintenant lié contre les dernières OpenSSL v1.0.0d dll
V2.94 (4 décembre 2011)
Mise à jour CPJNSMTPBodyPart::GetHeader pour encoder le titre d’un nom de fichier, s’il contient des caractères non-ASCII. Grâce à Anders Gustafsson pour avoir signalé ce problème.
L’exemple d’application est désormais lié contre la latst OpenSSL v1.0.d dll.
2 février 2012
Pour ceux intéressés Albert Ward a produit une notes de version de CPJNSMTPConnection en bulgare. Pour ceux qui sont intéressés, vous pouvez consulter la traduction à http://www.fatcow.com/edu/naughter-smtp-bg/.
David Leoney a également produit une traduction catalane des notes de version. Pour ceux qui sont intéressés, vous pouvez consulter la traduction à http://www.fatcow.com/edu/naughter-smtp-ca/.
V2.95 (12 août 2012)
Code de support STARTTLS utilise maintenant OpenSSL TLSv1_client_method fonction au lieu de SSLv23_client_method. Cette version corrige un problème l’envoi des emails en utilisant Hotmail / Windows Live a été défaillants.
CPJNSMTPConnection::_Close offre maintenant un paramètre bGracefully
Mis à jour le code pour nettoyer la compilation sur VC 2012
L’exemple d’application est désormais lié contre la latst OpenSSL v1.0.1c dll.
SendMessage lance maintenant une CPJNSMTPException si OnSendProgress retourne FALSE.
Ajout d’un nouveau ConnectionType intitulée « AutoUpgradeToSTARTTLS », qui met automatiquement à jour une connexion de texte brut à STARTTLS si le code détecte que le serveur SMTP appuie STARTTLS. Si le serveur ne supporte pas STARTTLS alors la connexion restera comme si vous avez spécifié « Texte brut »
Retravaillé le code pour déterminer s’il doit se connecter à l’aide de EHLO au lieu de HELO dans une nouvelle méthode virtuelle appelée DoEHLO.
Retravaillé le fonctionnement interne de la méthode ConnectESMTP.
14 septembre 2012
Pour ces Mario Pozner intéressé a produit une traduction de cette page en ukrainien sur son blog Archive de Gmail. Pour ceux qui sont intéressés, vous pouvez consulter la traduction à http://www.stoodio.org/gmail-archive-smtp.
V2.96 (23 septembre 2012)
Supprimé les méthodes SetContentBase et GetContentBase comme l’en-tête Content-Base est obsolète de MHTML. Pour plus d’informations, voir http://www.ietf.org/mail-archive/web/apps-discuss/current/msg03220.html. Merci à Mat Berchtold pour avoir signalé ce problème.
Le paramètre défunt prélevé à la méthode AddHTMLBody.
Retiré de la méthode de FoldHeader tel qu’il a été utilisé seulement par l’en-tête de m_sXMailer.
Mise à jour de la logique dans la méthode FolderSubjectHeader pour gérer correctement la dernière ligne de texte à plier.
V2.97 (24 septembre 2012)
Supprimé une ligne inutile du code de CPJNSMTPConnection::SendRCPTForRecipient. Merci à Mat Berchtold pour avoir signalé ce problème.
V2.98 (30 septembre 2012)
Mis à jour le code pour éviter les DLL plantation des questions de sécurité lors de l’appel à LoadLibrary. Merci à Mat Berchtold pour avoir signalé ce problème.
Un fichier d’en-tête nommé « PJNLoadLibraryFromSystem32.h » est maintenant inclus qui fournit une version de LoadLibrary qui charge une DLL sans aucune information de chemin d’accès du répertoire système de Windows. Ceci aide à éviter les problèmes de sécurité plantation de la DLL dans votre application lorsque vous appelez la fonction LoadLibrary avec un nom de module sans aucune information de chemin d’accès.
V2.99 (25 novembre 2012)
Corrigé quelques problèmes dans le code lorsque CPJNSMTP_NOSSL a été défini. Ressemble à la prise en charge pour la compilation sans le support de SSL a été rompu pour quelques versions. Merci à Bostjan Erzen pour avoir signalé ce problème.
V3.00 (12 mars 2013)
Mis à jour les détails du droit d’auteur.
CPJNSMTPAddressArray typedef est maintenant défini dans la classe de CPJNSMTPMessage au lieu de l’espace de noms global. En outre, cette classe typedef est maintenant connue comme « CAddressArray »
L’exemple de projet inclus dans le téléchargement maintenant des liens vers les différentes bibliothèques OpenSSL via définit dans le fichier stdafx.h au lieu de via les paramètres du projet. Merci à Ed Nafziger pour avoir suggéré cette plus belle.
L’exemple d’application ajoute n’est plus l’adresse hotmail de l’auteur à la liste du MDN. Merci à Ed Nafziger pour repérer ce.
L’exemple d’application est désormais lié contre les dernières OpenSSL v1.0.1e dll.
Exemple d’application maintenant liée statiquement aux MFC
V3.01 (3 juin 2013)
L’app de démo a maintenant désactive la case à cocher MIME après vérification il si l’e-mail doit être envoyé au format HTML.
Correction d’un bug dans l’exemple d’application le type mime de la partie du corps racine serait être incorrectement défini sur une chaîne vide lorsqu’elle doit utiliser la valeur par défaut qui est « multipart/mixed ». Merci à Ting L pour avoir signalé ce bug.
7 juin 2013
Mise à jour mineure pour l’exemple d’application pour corriger une faute d’orthographe dans la chaîne de type de connexion dans la boîte de dialogue de configuration. Merci à « don » pour avoir signalé ce problème.
V3.02 (5 janvier 2014)
Mis à jour les détails du droit d’auteur.
Mis à jour le code pour nettoyer la compilation sur VC 2013
Correction d’un problème avec auth NTLM le code ne pas correctement défini la valeur du paramètre « m_nSize » correctement dans CPJNSMPTBase64Encode::Encode & Decode. Merci à John Pendleton pour avoir signalé ce bug.
V3.03 (5 janvier 2014)
La méthode ConvertToUTF8 maintenant aussi gère la conversion des données ASCII en UTF8. Merci à Jean-Christophe Voogden pour cette mise à jour.

La classe CPJNSMTPConnection fournit maintenant des méthodes de jeu/GetSSLProtocol. Cela permet au code client spécifier le goût exact du SSL dont le code doit prendre la parole. Les protocoles supportés sont SSL v2/v3, TLS v1.0, v1.1 TLS, TLS v1.2 et DTLS v1.0. Ceci est indispensable pour certains serveurs SMTP qui utilisent le protocole SSLv2 ou v3 au lieu du protocole TLS v1 plus modern. La valeur par défaut consiste à utiliser TLS v1.0. Vous devrez peut-être utiliser ce paramètre de compatibilité pour les goûts de serveurs IBM Domino SMTP qui ne prennent en charge le paramètre SSLv2/v3 plus âgé. Merci à Jean-Christophe Voogden pour cette mise à jour.
Supprimé toutes les méthodes de connexion proxy car ils ne peuvent pas être facilement pris en charge / testés par l’auteur.
Retravaillé le code dans CPJNSMTPConnection::ConnectESMTP pour gérer toutes les variantes de la réponse 250 ainsi que pour exploiter le cas insensiblement, qui est requis par la RFC ESMTP.
Faites plusieurs méthodes virtuelles pour faciliter davantage la personnalisation client
Correction d’un problème dans la méthode DoSTARTTLS la prise serait laissée dans un état connecté si échec de la négociation SSL. Cela se traduirait par code ultérieur qui envoyée sur le socket au cours de la déchirure vers le bas de la phase de suspension. Merci à Jean-Christophe Voogden pour avoir signalé ce problème.
L’exemple d’application est désormais lié contre les dernières OpenSSL v1.0.1f dll.
V3.04 (26 janvier 2014)
Mise à jour logique ASSERT dans la partie supérieure de la méthode ConnectESMTP. Merci à Jean-Christophe Voogden pour avoir signalé ce problème.
V3.05 (9 février 2014)
Correction d’un problème de compilation dans la méthode CreateSSLSocket lorsque la macro préprocesseur CPJNSMTP_NOSSL est définie.
Retravaillé la logique qui fait SecureZeroMemory sur les données de type chaîne sensible
V3.06 (13 avril 2014)
L’exemple d’application est désormais lié contre les dernières OpenSSL v1.0.1g dll. Cette version est la version d’OpenSSL qui ne souffre pas le bug Heartbleed.
Veuillez noter que par défaut Qu’openssl fait pas n’hébergent validation de nom. L’exemple d’application fourni avec le code PJNSMTP aussi ne fait pas validation du nom de l’hôte. Cela signifie que tel qu’il est l’exemple d’application est vulnérable à l’homme dans les attaques du milieu si vous utilisez SSL/TLS pour vous connecter à un serveur SMTP. Pour plus amples informations et exemples de code qui vous devriez intégrer dans vos applications de client SMTP réelles, s’il vous plaît voir http://wiki.openssl.org/index.php/Hostname_validation, https://github.com/iSECPartners/ssl-conservatory et http://archives.seul.org/libevent/users/Feb-2013/msg00043.html.
V3.07 (15 novembre 2014)
CNTLMClientAuth prend maintenant une dépendance statique Secure32.dll au lieu d’utiliser GetProcAddress.
Désormais, le CNTLMClientAuth appelle QuerySecurityPackageInfo pour déterminer la taille de mémoire tampon à utiliser.
La macro SEC_SUCCESS a maintenant une méthode appelée « SEC_SUCCESS ».
Nettoyage général de la méthode CNTLMClientAuth::GenClientContext
Le destructeur de CNTLMClientAuth fait virtuel.
Enlevé la défunte méthode CPJNSMTPBodyPart::HexDigit.
Retravaillé la méthode CPJNSMTPBodyPart::GetBody pour utiliser ATL::CAtlFile et ATL::CHeapPtr
CPJNSMTPConnection prend maintenant une dépendance statique Wininet.dll au lieu d’utiliser GetProcAddress.
CPJNSMTPConnection prend maintenant une dépendance statique Dnsapi.dll au lieu d’utiliser GetProcAddress.
Le délai par défaut défini dans le constructeur CPJNSMTPConnection est maintenant construit de 60 secondes à la fois debug et release
Enlevé la défunte méthode CPJNSMTPConnection::MXLookupAvailable
Enlevé la défunte valeur préprocesseur CPJNSMTP_NOMXLOOKUP
Le module PJNLoadLibraryFromSystem32.h défunt retirés de la distribution
CPJNSMTPConnection::SendMessage a été retravaillée pour utiliser ATL::CAtlFile et ATL::CHeapPtr
CPJNSMTPConnection::SendMessage fait maintenant une conversion UTF-8 sur le corps de l’email lors de l’envoi un courriel ordinaire c’est-à-dire aucun HTML ou mime si le jeu de caractères est UTF-8. Merci à Oliver Pfister pour avoir signalé ce problème.
Exemple d’application a été mise à jour pour compiler proprement sur VS 2013 mise à jour 3 et supérieur
L’exemple d’application livré avec le code source est maintenant Visual Studio 2008 et à partir de cette version du code n’est supporté que sur Visual Studio 2008 et versions ultérieures
L’exemple d’application est maintenant lié contre les dernières OpenSSL v1.0.1j dll
V3.08 (18 novembre 2014)
Correction d’un bug dans CPJNSMTPBodyPart::GetBody les pièces jointes sont toujours traités comme 0 en taille. Merci à Oliver Pfister pour avoir signalé ce problème.
V3.09 (14 décembre 2014)
Mis à jour le code pour utiliser des classes de SSLWrappers de l’auteur (http://www.naughter.com/sslwrappers.html) pour fournir la fonctionnalité SSL pour PJNSMTP au lieu de OpenSSL. S’il vous plaît note que les SSLWrappers classes elle-même dépend de classes de CryptoWrappers de l’auteur (http://www.naughter.com/cryptowrappers.html) également. Vous devrez télécharger les deux de ces bibliothèques et copier leurs modules dans le répertoire PJNSMTP. Notez également que les classes SSLWrappers et CryptoWrapper sont pris en charge uniquement sur VC 2013 ou plus tard, ce qui signifie que le soutien PJNSMTP SSL est pris en charge uniquement lors de la compilation avec VC 2013 ou plus tard. Les fichiers de solution inclus dans le téléchargement est maintenant VC 2013.
Avec le changement à l’utilisation de SSLWrappers, le code prennent désormais des saveurs supplémentaires du protocole SSL. Ils sont : SSL v2 sur ses propres, SSL v3 sur son propre, l’OS SChannel SSL par défaut et AnyTLS. S’il vous plaît voir l’enum CPJNSMTPConnection::SSLProtocol pour plus de détails. L’exemple d’application a été mise à jour pour permettre à ces valeurs à utiliser et la valeur d’énumération par défaut est maintenant « OSDefault ».
16 décembre 2014
Pour ceux intéressés Felicia Hoffman a traduit les notes de version de CPJNSMTPConnection en polonais à http://www.onderdelenshop24.com/science/?p=40.
V3.10 (16 décembre 2014)
Mis à jour le code pour utiliser la dernière version v1.03 du SSLWrappers
V3.11 (16 janvier 2015)
Mis à jour les détails du droit d’auteur
CPJNSMTPMessage::m_ReplyTo est maintenant un tableau au lieu d’une seule adresse. Merci à Bostjan Erzen pour avoir suggéré cette mise à jour.
V3.12 (25 janvier 2015)
Ajout des méthodes CPJNSMTPBodyPart::InsertChildBodyPart et CPJNSMTPMessage::InsertBodyPart. Ces nouvelles méthodes insère une partie du corps comme le premier élément dans la hiérarchie des parties du corps enfant plutôt qu’à la fin. En outre les méthodes CPJNSMTPMessage::AddTextBody et CPJNSMTPMessage::AddHTMLBody donne CPJNSMTPBodyPart::InsertChildBodyPart au lieu de CPJNSMTPBodyPart::AddChildBodyPart pour s’assurer que la partie texte du corps du message SMTP apparaît comme la première partie de corps d’enfant. Ceci permet d’éviter les questions Microsoft Exchange modifie les messages multipart le corps du texte est déplacé d’une pièce jointe nommée ATT00001 : pour plus amples renseignements, veuillez consulter http://kb.mit.edu/confluence/pages/viewpage.action?pageId=4981187 et http://support2.microsoft.com/kb/969854. Merci à Marco Veldman pour avoir signalé ce problème.
Suppression support pour le protocole SSL DTLSv1 que ce n’est pas applicable au SMTP comme DTLS est conçu pour UDP et pas de TCP. Cette aide à résoudre le problème le code n’ai pas compiler en VC 2013 si vous avez utilisé la “Visual Studio 2013 Windows XP (v120_xp)” ensemble d’outils de la plate-forme. Merci à Bostjan Erzen pour avoir signalé ce problème.
V3.13 (31 janvier 2015)
Correction d’une erreur dans CPJNSMTPException::GetErrorMessage il utiliserait pas la pleine valeur HRESULT lors de l’appel de FormatMessage. Merci à Bostjan Erzen pour avoir signalé ce problème.
Améliorer la gestion des erreurs dans CPJNSMTPConnection::Connect lorsque surviennent des erreurs de connexion SSL. Merci à Bostjan Erzen pour avoir signalé ce problème.
Améliorer la gestion des erreurs dans CPJNSMTPConnection::DoSTARTTLS lorsque surviennent des erreurs de connexion SSL. Merci à Bostjan Erzen pour avoir signalé ce problème.

Comments are closed.