Récemment, j'ai besoin de maintenir le programme ASP.NET 1.1 en raison de mon travail. J'utilisais très bien l'espace de noms C# 2.0 System.Net.Mail pour envoyer des e-mails, mais il existe de nombreux problèmes avec System.Web.Mail dans ASP.NET. 1.1, j'en ai donc choisi une autre. La stratégie encapsule l'interface d'envoi d'e-mails, puis implémente l'envoi d'e-mails d'une autre manière, il y a donc les mots suivants.
Définissez une interface abstraite pour encapsuler toutes les implémentations :
en utilisant System ;
l'espace de noms
System.Web.Mail ;
{
classe abstraite publique MySmtpMail
{
Fields#region Champs
chaîne privée _defaultCharset = "GB2312";
25
;
Properties#region Propriétés
chaîne protégée DefaultCharset
{
get { return this._defaultCharset }
}
protégé int DefaultSmtpPort
{
get {return this._defaultSmtpPort;}
}
#endregion
#Méthodes région
/**////
/// Récupère l'instance par défaut
///
///
public statique MySmtpMail GetDefaultInstance()
{
// Ici, vous pouvez définir le type d'implémentation spécifique via un fichier de configuration externe, puis
// Récupère l'instance de type via Activator.CreateInstance()
}
/**////
/// Effectuer un travail d'initialisation
///
public abstract void Open();
/**////
/// Détruire l'objet
///
public abstract void Close();
/**////
/// Envoyer un email
///
///
///
///
///
///
public bool Send (message MailMessage, chaîne smtpServer, chaîne serverUsername, chaîne serverPassword)
{
return Send (message, smtpServer, serverUsername, serverPassword, this._defaultSmtpPort);
}
public abstract bool Send (message MailMessage, chaîne smtpServer, chaîne nom d'utilisateur serveur, chaîne mot de passe serveur, int smtpPort
chaîne statique publique [] GetTo (message MailMessage)
;
{
si (message == nul)
throw new ArgumentNullException("message");
if (Globals.IsNullorEmpty(message.To))
renvoie null ;
renvoie message.To.Split(';');
}
chaîne statique publique[] GetCc (message MailMessage)
{
si (message == nul)
lancer un nouveau ArgumentNullException("message");
if (Globals.IsNullorEmpty(message.Cc))
renvoie null ;
renvoie message.Cc.Split(';');
}
chaîne statique publique[] GetBcc (message MailMessage)
{
si (message == nul)
throw new ArgumentNullException("message");
if (Globals.IsNullorEmpty(message.Bcc))
renvoie null ;
renvoie message.Bcc.Split(';');
}
#endregion
}
}
Remarque : selon le bon sens, ouvrez() avant utilisation, et n'oubliez pas de fermer() après utilisation.
Plan d'implémentation 1 (composant Jmail) :
L'utilisation de Jmail dans .NET nécessite les paramètres suivants :
1. Installez jmail ;
2. Recherchez jmail.dll ;
3. Pour enregistrer le composant Jmail.dll, copiez le fichier jmail.dll dans le répertoire system32, puis exécutez la commande "regsvr32 jmail.dll" (à l'exclusion des guillemets). Pour désinstaller, exécutez "regsvr32 /u jmail.dll". ;
4. Exécutez Program FilesMicrosoft Visual Studio .NETFrameworkSDKBinildasm.exe (vous pouvez utiliser l'invite de commande Visual Studio .Net 2003),
Le format est le suivant : tlbimp c:Program FilesDimacw3JMail4jmail.dll /out:MyJmail.dll /namespace:MyJmail
Après avoir généré MyJmail.dll, référencez-le dans le projet.
avoir téléchargé le composant,
l'étape suivante consiste à écrire la classe d'implémentation :
using System ;
l'espace de noms
System.Web.Mail ;
{
classe publique JMailSmtpMail : MySmtpMail
{
Champs#region Champs
MyJmail.Message jmail = null;
#endregion
Méthodes#region Méthodes
public override void Open()
{
jmail = new MonJmail.Message();
}
public override bool Send (message MailMessage, chaîne smtpServer, chaîne serverUsername, chaîne serverPassword, int smtpPort)
{
si (jmail == nul)
throw new Exception("smtp est fermé!");
si (message == nul)
throw new ArgumentNullException("message");
DateTime t = DateTime.Now;
//Attribut Silent : s'il est défini sur true, JMail.Send( () renverra true ou false selon le résultat de l'opération.
jmail.Silent = false;
//Journal créé par jmail, à condition que l'attribut de journalisation soit défini sur true
jmail.Logging = true;
//Jeu de caractères, la valeur par défaut est "US-ASCII"
jmail.Charset = base.DefaultCharset;
//Le type de contenu de la lettre par défaut est "text/plain") : String Si vous envoyez l'e-mail au format HTML, remplacez-le par "text/html".
si (message.BodyFormat == MailFormat.Html)
jmail.ContentType = "texte/html";
jmail.Priority = GetJmailPriority(message.Priority);
//Ajouter un destinataire
string[] toArray = MySmtpMail.GetTo(message);
si (toArray != null && toArray.Length > 0)
{
bool isAddedRecipient = false;
pour (int i = 0; i < toArray.Length; i++)
{
si (Globals.IsNullorEmpty(toArray[i]))
continuer ;
si (!isAddedRecipient)
{
jmail.AddRecipient(toArray[i], String.Empty, String.Empty);
isAddedRecipient = vrai ;
}
autre
{
jmail.AddRecipientCC(toArray[i], String.Empty, String.Empty);
}
}
}
string[] ccArray = MySmtpMail.GetCc(message);
si (ccArray != null)
{
foreach (chaîne cc dans ccArray)
{
si (!Globals.IsNullorEmpty(cc))
jmail.AddRecipientCC(cc, String.Empty, String.Empty);
}
}
string[] bccArray = MySmtpMail.GetBcc(message);
si (ccArray != null)
{
foreach (chaîne bcc dans bccArray)
{
si (!Globals.IsNullorEmpty(bcc))
jmail.AddRecipientBCC(bcc, String.Empty);
}
}
jmail.From = message.From;
//Nom d'utilisateur de messagerie de l'expéditeur
jmail.MailServerUserName = serverUsername;
//Mot de passe email de l'expéditeur
jmail.MailServerPassWord = serverPassword;
//Définir le titre de l'e-mail
jmail.Sujet = message.Sujet;
//Ajoutez des pièces jointes à l'e-mail (s'il y a plusieurs pièces jointes, vous pouvez ajouter jmail.AddAttachment("c:\test.jpg",true,null);) et ce sera fait. [Remarque] : Après avoir ajouté une pièce jointe, veuillez supprimer le jmail.ContentType="text/html" ci-dessus. Sinon, des caractères tronqués apparaîtront dans l'e-mail.
//jmail.AddAttachment("c:\test.jpg", true, null);
//Contenu de l'e-mail
jmail.Body = message.Body;
if (message.BodyFormat == MailFormat.Html)
jmail.Body += "
";
autre
jmail.Body += "rnrn";
jmail.Body += DateTime.Now.ToString();
smtpServer = String.Format("{0}:{1}", smtpServer, smtpPort);
//Méthode d'envoi Jmail
bool result = jmail.Send(smtpServer, false);
renvoie le résultat ;
}
remplacement public void Close()
{
jmail.Close();
}
octet statique privé GetJmailPriority (priorité System.Web.Mail.MailPriority)
{
// Niveau de messagerie, 1 est urgent, 3 est normal, 5 est de bas niveau
si (priority == System.Web.Mail.MailPriority.High)
renvoie 1 ;
si (priorité == System.Web.Mail.MailPriority.Low)
renvoyer 5 ;
renvoyer 3 ;
}
#endregion
}
}
Deuxième plan de mise en œuvre (composant OpenSmtp.Net) :
Pour ceux qui ne sont pas entrés en contact avec OpenSmtp.Net, vous pouvez d'abord le rechercher sur Google. Je ne présenterai pas le concept ici. En même temps, il a également un frère jumeau OpenPop. .Net Quant à OpenSmtp.Net, nous pouvons le télécharger depuis http://sourceforge.net/projects/opensmtp-net/ .
Ensuite, entrons dans le sujet :
utiliser System ;
en utilisant System.Web.Mail ;
OpenSmtp.Mail
;
{
classe publique OpenSmtpMail : MySmtpMail
{
Fichiers#region Fichiers
OpenSmtp.Mail.MailMessage msg = null;
Smtp smtp = null;
#endregion
Méthodes#region Méthodes
public override void Open()
{
msg = new OpenSmtp.Mail.MailMessage();
smtp = nouveau Smtp();
}
public override bool Send (message System.Web.Mail.MailMessage, chaîne smtpServer, chaîne serverUsername, chaîne serverPassword, int smtpPort)
{
si (msg == nul || smtp == nul)
throw new Exception("smtp est fermé!");
if (message == null)
throw new ArgumentNullException("message");
SmtpConfig.VerifyAddresses = false;
EmailAddress from = new EmailAddress(message.From, message.From);
msg.Charset = base.DefaultCharset;
msg.From = from;
msg.Priority = GetOpenSmtpPriority(message.Priority);
//Ajouter un destinataire
string[] toArray = MySmtpMail.GetTo(message);
si (toArray != null)
{
foreach (chaîne vers dans toArray)
{
si (!Globals.IsNullorEmpty(to))
msg.AddRecipient(to, AddressType.To);
}
}
string[] ccArray = MySmtpMail.GetCc(message);
si (ccArray != null)
{
foreach (chaîne cc dans ccArray)
{
si (!Globals.IsNullorEmpty(cc))
msg.AddRecipient(cc, AddressType.Cc);
}
}
string[] bccArray = MySmtpMail.GetBcc(message);
si (ccArray != null)
{
foreach (chaîne bcc dans bccArray)
{
si (!Globals.IsNullorEmpty(bcc))
msg.AddRecipient(bcc, AddressType.Bcc);
}
}
msg.Sujet = message.Sujet;
if (message.BodyFormat == System.Web.Mail.MailFormat.Html)
{
msg.HtmlBody = message.Body + "
" + DateTime.Now.ToString();
}
autre
{
msg.Body = message.Body + "rnrn" + DateTime.Now.ToString();;
}
chaîne str1 = msg.HtmlBody;
chaîne str2 = msg.Body ;
smtp.Host = smtpServer ;
smtp.Username = serverUsername;
smtp.Password = mot de passe serveur ;
smtp.Port = smtpPort;
smtp.SendMail(msg);
renvoie vrai ;
}
public override void Fermer()
{
msg = nul ;
smtp = nul ;
}
chaîne statique privée GetOpenSmtpPriority (priorité System.Web.Mail.MailPriority)
{
// Niveau de messagerie, 1 est urgent, 3 est normal, 5 est de bas niveau
si (priority == System.Web.Mail.MailPriority.High)
retourner OpenSmtp.Mail.MailPriority.High;
si (priorité == System.Web.Mail.MailPriority.Low)
renvoyer OpenSmtp.Mail.MailPriority.Low ;
renvoyer OpenSmtp.Mail.MailPriority.Normal ;
}
#endregion
}
}
Troisième plan de mise en œuvre :
(Les deux plans de mise en œuvre ci-dessus sont suffisants pour répondre aux besoins actuels et peuvent être étendus si nécessaire)