Vor Kurzem musste ich aus beruflichen Gründen das ASP.NET 1.1-Programm warten. Früher habe ich den C# 2.0-Namespace System.Net.Mail sehr gut zum Senden von E-Mails verwendet, aber es gibt viele Probleme mit System.Web.Mail in ASP.NET 1.1, also habe ich eine andere gewählt. Die Strategie kapselt die Schnittstelle zum Senden von E-Mails und implementiert dann das Senden von E-Mails auf andere Weise, daher gibt es die folgenden Wörter.
Definieren Sie eine abstrakte Schnittstelle, um alle Implementierungen zu kapseln:
using System;
mit System.Web.Mail;
Namespace YywMail
{
öffentliche abstrakte Klasse MySmtpMail
{
Fields#region Fields
private string _defaultCharset = "GB2312";
private int _defaultSmtpPort = 25;
#endregion
Properties#region Properties
protected string DefaultCharset
{
get { return this._defaultCharset }
}
protected int DefaultSmtpPort
{
get { return this._defaultSmtpPort;}
}
#endregion
-Methoden#region-Methoden
/**//// <summary>
/// Holen Sie sich die Standardinstanz
/// </summary>
/// <returns></returns>
öffentliche statische MySmtpMail GetDefaultInstance()
{
// Hier können Sie den spezifischen Implementierungstyp über eine externe Konfigurationsdatei definieren und dann
// Holen Sie sich die Typinstanz über Activator.CreateInstance()
}
/**//// <Zusammenfassung>
/// Führen Sie einige Initialisierungsarbeiten durch
/// </summary>
public abstract void Open();
/**//// <summary>
/// Zerstöre das Objekt
/// </summary>
public abstract void Close();
/**//// <summary>
/// E-Mail senden
/// </summary>
/// <param name="message"></param>
/// <param name="smtpServer"></param>
/// <param name="serverUsername"></param>
/// <param name="serverPassword"></param>
/// <returns></returns>
public bool Send(MailMessage message, string smtpServer, string serverUsername, string serverPassword)
{
return Send(message, smtpServer, serverUsername, serverPassword, this._defaultSmtpPort);
}
public
abstract bool Send(MailMessage message, string smtpServer, string serverUsername, string serverPassword, int smtpPort);
{
if (Nachricht == null)
throw new ArgumentNullException("message");
if (Globals.IsNullorEmpty(message.To))
return null;
return message.To.Split(';');
}
public static string[] GetCc(MailMessage-Nachricht)
{
if (Nachricht == null)
throw new ArgumentNullException("message");
if (Globals.IsNullorEmpty(message.Cc))
return null;
return message.Cc.Split(';');
}
public static string[] GetBcc(MailMessage-Nachricht)
{
if (Nachricht == null)
throw new ArgumentNullException("message");
if (Globals.IsNullorEmpty(message.Bcc))
return null;
return message.Bcc.Split(';');
}
#endregion
}
}
Hinweis: Laut gesundem Menschenverstand öffnen Sie () vor der Verwendung und vergessen Sie nicht, nach der Verwendung zu schließen
(Jmail-Komponente):
Die Verwendung von Jmail in .NET erfordert die folgenden Einstellungen:
1. Jmail installieren;
2. Suchen Sie jmail.dll;
3. Um die Komponente Jmail.dll zu registrieren, kopieren Sie die Datei jmail.dll in das Verzeichnis system32 und führen Sie dann den Befehl „regsvr32 jmail.dll“ aus (ohne Anführungszeichen). Führen Sie zum Deinstallieren „regsvr32 /u jmail.dll“ aus. ;
4. Führen Sie ProgrammeMicrosoft Visual Studio .NETFrameworkSDKBinildasm.exe aus (Sie können die Eingabeaufforderung von Visual Studio .Net 2003 verwenden).
Das Format ist wie folgt: tlbimp c:Program FilesDimacw3JMail4jmail.dll /out:MyJmail.dll /namespace:MyJmail
Nachdem Sie MyJmail.dll generiert haben, verweisen Sie darauf im Projekt.
dem Herunterladen der Komponente
besteht der nächste Schritt darin, die Implementierungsklasse zu schreiben:
using System;
mit System.Web.Mail;
Namespace YywMail
{
öffentliche Klasse JMailSmtpMail: MySmtpMail
{
Felder#region Felder
MyJmail.Message jmail = null;
#endregion
Methoden#region Methoden
public override void Open()
{
jmail = new MyJmail.Message();
}
public override bool Send(MailMessage message, string smtpServer, string serverUsername, string serverPassword, int smtpPort)
{
if (jmail == null)
throw new Exception("smtp is Closed!");
if (Nachricht == null)
throw new ArgumentNullException("message");
DateTime t = DateTime.Now;
//Silent-Attribut: Wenn JMail auf true gesetzt ist, gibt JMail.Send( () je nach Operationsergebnis true oder false zurück
jmail.Silent = false;
//Von jmail erstelltes Protokoll, sofern das Protokollierungsattribut auf true gesetzt ist
jmail.Logging = true;
//Zeichensatz, der Standard ist „US-ASCII“
jmail.Charset = base.DefaultCharset;
//Der Inhaltstyp des Briefes ist „text/plain“): String Wenn Sie die E-Mail im HTML-Format senden, ändern Sie ihn in „text/html“.
if (message.BodyFormat == MailFormat.Html)
jmail.ContentType = "text/html";
jmail.Priority = GetJmailPriority(message.Priority);
//Empfänger hinzufügen
string[] toArray = MySmtpMail.GetTo(message);
if (toArray != null && toArray.Length > 0)
{
bool isAddedRecipient = false;
for (int i = 0; i < toArray.Length; i++)
{
if (Globals.IsNullorEmpty(toArray[i]))
fortfahren;
if (!isAddedRecipient)
{
jmail.AddRecipient(toArray[i], String.Empty, String.Empty);
isAddedRecipient = true;
}
anders
{
jmail.AddRecipientCC(toArray[i], String.Empty, String.Empty);
}
}
}
string[] ccArray = MySmtpMail.GetCc(message);
if (ccArray != null)
{
foreach (String cc in ccArray)
{
if (!Globals.IsNullorEmpty(cc))
jmail.AddRecipientCC(cc, String.Empty, String.Empty);
}
}
string[] bccArray = MySmtpMail.GetBcc(message);
if (ccArray != null)
{
foreach (String bcc in bccArray)
{
if (!Globals.IsNullorEmpty(bcc))
jmail.AddRecipientBCC(bcc, String.Empty);
}
}
jmail.From = message.From;
//E-Mail-Benutzername des Absenders
jmail.MailServerUserName = serverUsername;
//E-Mail-Passwort des Absenders
jmail.MailServerPassWord = serverPassword;
//E-Mail-Titel festlegen
jmail.Subject = message.Subject;
//Anhänge zur E-Mail hinzufügen (wenn es mehrere Anhänge gibt, können Sie jmail.AddAttachment("c:\test.jpg",true,null); hinzufügen) und es wird erledigt. [Hinweis]: Nachdem Sie einen Anhang hinzugefügt haben, löschen Sie bitte jmail.ContentType="text/html"; Andernfalls werden in der E-Mail verstümmelte Zeichen angezeigt.
//jmail.AddAttachment("c:\test.jpg", true, null);
//E-Mail-Inhalt
jmail.Body = message.Body;
if (message.BodyFormat == MailFormat.Html)
jmail.Body += "<br><br>";
anders
jmail.Body += "rnrn";
jmail.Body += DateTime.Now.ToString();
smtpServer = String.Format("{0}:{1}", smtpServer, smtpPort);
//Jmail-Sendemethode
bool result = jmail.Send(smtpServer, false)
;
}
public override void Close()
{
jmail.Close();
}
privates statisches Byte GetJmailPriority(System.Web.Mail.MailPriority-Priorität)
{
// Mail-Level, 1 ist dringend, 3 ist normal, 5 ist niedriger Level
if (priority == System.Web.Mail.MailPriority.High)
return 1;
if (priority == System.Web.Mail.MailPriority.Low)
Rückkehr 5;
Rückkehr 3;
}
#endregion
}
}
Implementierungsplan zwei (OpenSmtp.Net-Komponente):
Für diejenigen, die noch nicht mit OpenSmtp.Net in Berührung gekommen sind, können Sie es zuerst googeln. Ich werde das Konzept hier nicht vorstellen. Gleichzeitig gibt es auch einen Zwillingsbruder OpenPop .Net. Was OpenSmtp.Net betrifft, können wir es von http://sourceforge.net/projects/opensmtp-net/ herunterladen. Die neueste Version ist 1.11.
Kommen wir als Nächstes zum Thema:
System verwenden;
mit System.Web.Mail;
mit OpenSmtp.Mail;
Namespace YywMail
{
öffentliche Klasse OpenSmtpMail: MySmtpMail
{
Dateien#Region Dateien
OpenSmtp.Mail.MailMessage msg = null;
Smtp smtp = null;
#endregion
-Methoden#region-Methoden
public override void Open()
{
msg = new OpenSmtp.Mail.MailMessage();
smtp = new Smtp();
}
public override bool Send(System.Web.Mail.MailMessage message, string smtpServer, string serverUsername, string serverPassword, int smtpPort)
{
if (msg == null || smtp == null)
throw new Exception("smtp is Closed!");
if (message == null)
throw new ArgumentNullException("message");
SmtpConfig.VerifyAddresses = false;
EmailAddress from = neue EmailAddress(message.From, message.From);
msg.Charset = base.DefaultCharset;
msg.From = from;
msg.Priority = GetOpenSmtpPriority(message.Priority);
//Empfänger hinzufügen
string[] toArray = MySmtpMail.GetTo(message);
if (toArray != null)
{
foreach (Zeichenfolge in toArray)
{
if (!Globals.IsNullorEmpty(to))
msg.AddRecipient(to, AddressType.To);
}
}
string[] ccArray = MySmtpMail.GetCc(message);
if (ccArray != null)
{
foreach (String cc in ccArray)
{
if (!Globals.IsNullorEmpty(cc))
msg.AddRecipient(cc, AddressType.Cc);
}
}
string[] bccArray = MySmtpMail.GetBcc(message);
if (ccArray != null)
{
foreach (String bcc in bccArray)
{
if (!Globals.IsNullorEmpty(bcc))
msg.AddRecipient(bcc, AddressType.Bcc);
}
}
msg.Subject = message.Subject;
if (message.BodyFormat == System.Web.Mail.MailFormat.Html)
{
msg.HtmlBody = message.Body + "<br><br>" + DateTime.Now.ToString();
}
anders
{
msg.Body = message.Body + "rnrn" + DateTime.Now.ToString();;
}
string str1 = msg.HtmlBody;
string str2 = msg.Body;
smtp.Host = smtpServer;
smtp.Username = serverUsername;
smtp.Password = serverPassword;
smtp.Port = smtpPort;
smtp.SendMail(msg)
;
}
öffentliches Override void Close()
{
msg = null;
smtp = null;
}
private statische Zeichenfolge GetOpenSmtpPriority(System.Web.Mail.MailPriority-Priorität)
{
// Mail-Level, 1 ist dringend, 3 ist normal, 5 ist niedriger Level
if (priority == System.Web.Mail.MailPriority.High)
return OpenSmtp.Mail.MailPriority.High;
if (priority == System.Web.Mail.MailPriority.Low)
return OpenSmtp.Mail.MailPriority.Low;
return OpenSmtp.Mail.MailPriority.Normal;
}
#endregion
}
}
Implementierungsplan drei:
(Die beiden oben genannten Implementierungspläne reichen aus, um den aktuellen Bedarf zu decken, und können bei Bedarf erweitert werden.)