Recientemente, necesito mantener el programa ASP.NET 1.1 debido al trabajo. Solía usar muy bien el espacio de nombres System.Net.Mail de C# 2.0 para enviar correos electrónicos, pero hay muchos problemas con System.Web.Mail en ASP.NET. 1.1, así que elegí otra. La estrategia encapsula la interfaz para enviar correos electrónicos y luego implementa el envío de correos electrónicos de otras maneras, por lo que existen las siguientes palabras.
Defina una interfaz abstracta para encapsular todas las implementaciones:
usando System;
usando System.Web.Mail
espacio de nombres YywMail;
{
clase abstracta pública MySmtpMail
{
Campos#región Campos
cadena privada _defaultCharset = "GB2312";
privado int _defaultSmtpPort = 25
#endregion
Propiedades#región Propiedades
cadena protegida DefaultCharset
{
obtener {return this._defaultCharset}
}
protegido int DefaultSmtpPort
{
obtener {return this._defaultSmtpPort;}
}
#endregion
Métodos#region Métodos
/**////
/// Obtener la instancia predeterminada
///
///
público estático MySmtpMail GetDefaultInstance()
{
// Aquí puede definir el tipo de implementación específico a través de un archivo de configuración externo y luego
// Obtener la instancia de tipo a través de Activator.CreateInstance()
}
/**////
/// Realizar un trabajo de inicialización
///
vacío abstracto público Abrir();
/**////
/// Destruye el objeto
///
public abstract void Cerrar();
/**////
/// Enviar correo electrónico
///
///
///
///
///
///
public bool Enviar (mensaje de mensaje de correo, cadena smtpServer, cadena nombre de usuario del servidor, cadena contraseña del servidor)
{
return Enviar (mensaje, servidor smtp, nombre de usuario del servidor, contraseña del servidor, this._defaultSmtpPort);
}
public abstract bool Enviar (mensaje de mensaje de correo, cadena smtpServer, cadena nombre de usuario del servidor, cadena contraseña del servidor, int
cadena estática pública [] GetTo (mensaje de mensaje de correo)
{
si (mensaje == nulo)
lanzar nueva ArgumentNullException ("mensaje");
si (Globals.IsNullorEmpty(message.To))
devolver nulo;
devolver mensaje.To.Split(';');
}
cadena estática pública[] GetCc(mensaje de mensaje de correo)
{
si (mensaje == nulo)
lanzar nueva ArgumentNullException ("mensaje");
si (Globals.IsNullorEmpty(message.Cc))
devolver nulo;
devolver mensaje.Cc.Split(';');
}
cadena estática pública[] GetBcc(mensaje de mensaje de correo)
{
si (mensaje == nulo)
lanzar nueva ArgumentNullException ("mensaje");
si (Globals.IsNullorEmpty(message.Bcc))
devolver nulo;
devolver mensaje.Bcc.Split(';');
}
#endregion
}
}
Nota: según el sentido común, abra() antes de usarlo y no olvide cerrar() después de usarlo.
Plan de implementación uno (componente Jmail):
el uso de Jmail en .NET requiere las siguientes configuraciones:
1. Instalar jmail;
2. Encuentre jmail.dll;
3. Para registrar el componente Jmail.dll, copie el archivo jmail.dll en el directorio system32 y luego ejecute el comando "regsvr32 jmail.dll" (excluyendo las comillas). Para desinstalar, ejecute "regsvr32 /u jmail.dll". ;
4. Ejecute Archivos de programaMicrosoft Visual Studio .NETFrameworkSDKBinildasm.exe (puede usar el símbolo del sistema de Visual Studio .Net 2003),
El formato es el siguiente: tlbimp c:Program FilesDimacw3JMail4jmail.dll /out:MyJmail.dll /namespace:MyJmail
Después de generar MyJmail.dll, haga referencia a él en el proyecto.
descargar el componente,
el siguiente paso es escribir la clase de implementación:
usando System;
usando System.Web.Mail
espacio de nombres YywMail;
{
clase pública JMailSmtpMail: MySmtpMail
{
Campos#región Campos
MyJmail.Message jmail = null
#endregion
Métodos#región Métodos
public override void Open();
{
jmail = nuevo MiJmail.Mensaje();
}
anulación pública bool Enviar (mensaje de mensaje de correo, cadena smtpServer, cadena nombre de usuario del servidor, cadena contraseña del servidor, int smtpPort)
{
si (jmail == nulo)
lanzar una nueva excepción ("¡smtp está cerrado!");
si (mensaje == nulo)
throw new ArgumentNullException("message");
DateTime t = DateTime.Now;
//Atributo silencioso: si se establece en verdadero, JMail no generará un error de excepción. JMail.Send( () devolverá verdadero o falso según el resultado de la operación.
jmail.Silent = false;
//Registro creado por jmail, siempre que el atributo de registro esté establecido en verdadero
jmail.Logging = true;
//Conjunto de caracteres, el valor predeterminado es "US-ASCII"
jmail.Charset = base.DefaultCharset;
//El tipo de contenido de la carta El valor predeterminado es "texto/plain"): Cadena Si envía el correo electrónico en formato HTML, cámbielo a "texto/html".
si (mensaje.BodyFormat == MailFormat.Html)
jmail.ContentType = "texto/html";
jmail.Priority = GetJmailPriority(message.Priority
//Agregar destinatario
);
cadena[] toArray = MySmtpMail.GetTo(mensaje);
si (toArray! = nulo && toArray.Length > 0)
{
bool isAddedRecipient = false;
para (int i = 0; i < toArray.Length; i++)
{
si (Globals.IsNullorEmpty(toArray[i]))
continuar
si (!isAddedRecipient)
{
jmail.AddRecipient(toArray[i], String.Empty, String.Empty);
isAddedRecipient = verdadero;
}
demás
{
jmail.AddRecipientCC(toArray[i], String.Empty, String.Empty);
}
}
}
cadena[] ccArray = MySmtpMail.GetCc(mensaje);
si (ccArray! = nulo)
{
foreach (cadena cc en ccArray)
{
si (!Globals.IsNullorEmpty(cc))
jmail.AddRecipientCC(cc, String.Empty, String.Empty);
}
}
cadena[] bccArray = MySmtpMail.GetBcc(mensaje);
si (ccArray! = nulo)
{
foreach (cadena bcc en bccArray)
{
si (!Globals.IsNullorEmpty(bcc))
jmail.AddRecipientBCC(bcc, String.Empty);
}
}
jmail.From = message.From;
//Nombre de usuario de correo electrónico del remitente
jmail.MailServerUserName = nombre de usuario del servidor;
//Contraseña de correo electrónico del remitente
jmail.MailServerPassWord = contraseñadelservidor;
//Establecer título de correo electrónico
jmail.Asunto = mensaje.Asunto;
//Agregue archivos adjuntos al correo electrónico (si hay varios archivos adjuntos, puede agregar jmail.AddAttachment("c:\test.jpg",true,null);) y estará listo. [Nota]: Después de agregar un archivo adjunto, elimine el jmail.ContentType="text/html" anterior. De lo contrario, aparecerán caracteres confusos en el correo electrónico.
//jmail.AddAttachment("c:\test.jpg", verdadero, nulo);
//Contenido del correo electrónico
jmail.Body = mensaje.Cuerpo;
si (mensaje.BodyFormat == MailFormat.Html)
jmail.Cuerpo += "
";
demás
jmail.Body += "rnrn";
jmail.Body += DateTime.Now.ToString();
smtpServer = String.Format("{0}:{1}", smtpServer, smtpPort);
//Método de envío de Jmail
resultado bool = jmail.Send(smtpServer, falso)
;
}
anulación pública nula Cerrar()
{
jmail.Cerrar();
}
byte estático privado GetJmailPriority (prioridad System.Web.Mail.MailPriority)
{
// Nivel de correo, 1 es urgente, 3 es normal, 5 es de bajo nivel
si (prioridad == System.Web.Mail.MailPriority.High)
devolver 1;
si (prioridad == System.Web.Mail.MailPriority.Low)
devolver 5;
devolver 3;
}
#endregion
}
}
Plan de implementación dos (componente OpenSmtp.Net):
para aquellos que no han entrado en contacto con OpenSmtp.Net, pueden buscarlo en Google primero. No presentaré el concepto aquí. Al mismo tiempo, también tiene un hermano gemelo, OpenPop. .Net. En cuanto a OpenSmtp.Net, podemos descargarlo desde http://sourceforge.net/projects/opensmtp-net/ . La última versión es 1.11.
A continuación, entremos en el tema:
usar System;
utilizando System.Web.Mail;
usando OpenSmtp.Mail
espacio de nombres YywMail;
{
clase pública OpenSmtpMail: MySmtpMail
{
Archivos#región Archivos
OpenSmtp.Mail.MailMessage msg = null;
Smtp smtp = null;
#endregion
Métodos#region Métodos
public override void Open()
{
mensaje = nuevo OpenSmtp.Mail.MailMessage();
smtp = nuevo Smtp();
}
anulación pública bool Enviar (mensaje System.Web.Mail.MailMessage, cadena smtpServer, cadena serverUsername, cadena serverPassword, int smtpPort)
{
si (msj == nulo || smtp == nulo)
lanzar nueva excepción ("smtp está cerrado!");
si (mensaje == nulo)
lanzar nueva ArgumentNullException("mensaje");
SmtpConfig.VerifyAddresses = false;
Dirección de correo electrónico de = nueva dirección de correo electrónico (mensaje.De, mensaje.De);
msg.Charset = base.DefaultCharset;
msg.From = de;
msg.Priority = GetOpenSmtpPriority(message.Priority
//Agregar destinatario
);
cadena[] toArray = MySmtpMail.GetTo(mensaje);
si (toArray! = nulo)
{
foreach (cadena en toArray)
{
si (!Globals.IsNullorEmpty(a))
msg.AddRecipient(a, AddressType.To);
}
}
cadena[] ccArray = MySmtpMail.GetCc(mensaje);
si (ccArray! = nulo)
{
foreach (cadena cc en ccArray)
{
si (!Globals.IsNullorEmpty(cc))
msg.AddRecipient(cc, AddressType.Cc);
}
}
cadena[] bccArray = MySmtpMail.GetBcc(mensaje);
si (ccArray! = nulo)
{
foreach (cadena bcc en bccArray)
{
si (!Globals.IsNullorEmpty(bcc))
msg.AddRecipient(bcc, AddressType.Bcc);
}
}
msg.Subject = mensaje.Subject;
si (mensaje.BodyFormat == System.Web.Mail.MailFormat.Html)
{
msg.HtmlBody = mensaje.Cuerpo + "
" + DateTime.Now.ToString();
}
demás
{
msg.Body = mensaje.Body + "rnrn" + DateTime.Now.ToString();;
}
cadena str1 = msg.HtmlBody;
cadena str2 = mensaje.Cuerpo;
smtp.Host = smtpServer;
smtp.Nombre de usuario = nombre de usuario del servidor;
smtp.Contraseña = contraseñadelservidor;
smtp.Port = smtpPort;
smtp.SendMail(msg)
devuelve verdadero;
}
anulación pública nula Cerrar()
{
mensaje = nulo;
smtp = nulo;
}
cadena estática privada GetOpenSmtpPriority (prioridad System.Web.Mail.MailPriority)
{
// Nivel de correo, 1 es urgente, 3 es normal, 5 es de bajo nivel
si (prioridad == System.Web.Mail.MailPriority.High)
devolver OpenSmtp.Mail.MailPriority.High
si (prioridad == System.Web.Mail.MailPriority.Low)
devolver OpenSmtp.Mail.MailPriority.Low;
devolver OpenSmtp.Mail.MailPriority.Normal;
}
#endregion
}
}
Plan de implementación tres:
(Los dos planes de implementación anteriores son suficientes para satisfacer las necesidades actuales y pueden ampliarse si es necesario)