Dans ASP, vous pouvez envoyer des emails simples en appelant le composant CDONTS. Dans ASP.Net, c'est également possible. La différence est que dans .Net Framework, ce composant est encapsulé dans l'espace de noms System.Web.Mail.
Un programme typique d’envoi d’e-mails est le suivant :
<%@ Importer l'espace de noms="System.Web.Mail" %>
<script runat="serveur">
MailMessage mail=nouveau MailMessage();
mail.From=" [email protected] ";
mail.To=" [email protected] ";
mail.BodyFormat=MailFormat.Text;
mail.Body="un courrier SMTP de test.";
mail.Subject="ça va?";
SmtpMail.SmtpServer="localhost";
SmtpMail.Send(mail);
</script>
Normalement, le système appelle le serveur virtuel SMTP par défaut fourni avec IIS pour envoyer des e-mails. Cependant, nous rencontrons souvent ce message d'erreur :
Le serveur a rejeté une ou plusieurs adresses de destinataire. La réponse du serveur était : 550 5.7.1 Impossible de relayer pour [email protected]
La raison de cette erreur n'est pas seulement la possibilité d'une mauvaise adresse, Il y a une autre raison importante. Comme mentionné ci-dessus, IIS ne dispose pas de véritable fonction de messagerie, mais utilise uniquement un « serveur virtuel SMTP » pour transférer les e-mails. Dans MSDN, il y a le conseil suivant :
Si votre serveur SMTP local (inclus dans Windows 2000 et Windows Server 2003) se trouve derrière un pare-feu qui bloque tout trafic SMTP direct (via le port 25), vous devez savoir s'il existe des hôtes disponibles sur le réseau Peut être utilisé pour relayer des messages SMTP destinés à Internet.
Un hôte intelligent est un serveur SMTP qui relaie les e-mails sortants envoyés directement vers Internet depuis un serveur SMTP interne. L'hôte intelligent doit pouvoir se connecter à la fois au réseau interne et à Internet pour servir de passerelle de messagerie.
Ouvrez les restrictions par défaut du serveur virtuel SMTP-Propriétés-Accès-Relais. Vous pouvez voir que cette fonction de transfert ou de relais est restreinte. Dans la liste des restrictions, ajoutez l'adresse IP de l'hôte qui doit utiliser ce serveur pour résoudre le problème mentionné ci-dessus.
Si vous n'utilisez pas le serveur virtuel SMTP fourni avec IIS mais utilisez d'autres serveurs de messagerie réels, tels que IMail, Exchange, etc., vous rencontrez souvent le problème que le serveur nécessite une authentification de l'expéditeur (ESMTP). Lors de l'utilisation d'un serveur qui nécessite une vérification de l'identité de l'expéditeur, une erreur se produira :
Le serveur a rejeté une ou plusieurs adresses de destinataire. La réponse du serveur était : 550, ce n'est pas l'hôte local ckocoo.com, ce n'est pas une passerelle.
Dans le passé, j'ai rencontré cela dans. ASP Il n'y a aucune possibilité de résoudre le problème. Nous ne pouvons utiliser que le composant CDO (le composant parent de CDONTS) :
conf.Fields[CdoConfiguration.cdoSMTPAuthenticate].Value=CdoProtocolsAuthentication.cdoBasic;
conf.Fields[CdoConfiguration.cdoSendUserName].Value="brookes";
conf.Fields[CdoConfiguration.cdoSendPassword].Value="XXXXXXX";
Dans .Net Framework 1.1, cette exigence a évidemment été prise en compte. La collection Fields a été ajoutée au composant MailMessage pour augmenter facilement l'identité de l'expéditeur dans le serveur de messagerie ESMTP. Problèmes de vérification. Cependant, cette méthode s'applique uniquement à la version .Net Framework 1.1, et non à la version .Net Framework 1.0. La procédure d'envoi d'emails avec authentification de l'expéditeur est la suivante :
<%@ Importer l'espace de noms="System.Web.Mail" %>
<script runat="serveur">
MailMessage mail=nouveau MailMessage();
mail.From=" [email protected] ";
mail.To=" [email protected] ";
mail.BodyFormat=MailFormat.Text;
mail.Body="un courrier SMTP de test.";
mail.Subject="ça va?";
mail.Fields.Add(" http://schemas.microsoft.com/cdo/configuration/smtpauthenticate ", "1" //authentification de base);
mail.Fields.Add(" http://schemas.microsoft.com/cdo/configuration/sendusername ", "brookes" //définissez votre nom d'utilisateur ici);
mail.Fields.Add(" http://schemas.microsoft.com/cdo/configuration/sendpassword ", "walkor" // définissez votre mot de passe ici);
SmtpMail.SmtpServer="lsg.moon.net";
SmtpMail.Send(mail);
</script>
Avec cette méthode, vous n'avez plus besoin de vous appuyer sur des composants tiers tels que Jmail et EasyMail, mais utilisez simplement SmtpMai pour finaliser l'envoi des emails !