Recentemente, precisei manter o programa ASP.NET 1.1 devido ao trabalho. Eu costumava usar o namespace System.Net.Mail C# 2.0 para enviar e-mails muito bem, mas há muitos problemas com System.Web.Mail no ASP.NET. 1.1, então escolhi outra estratégia que encapsula a interface de envio de e-mail e depois implementa o envio de e-mail de outras formas, então existem as seguintes palavras.
Defina uma interface abstrata para encapsular todas as implementações:
using System;
o namespace
System.Web.Mail;
{
classe abstrata pública MySmtpMail
{
Campos#região Campos
private string _defaultCharset = "GB2312";
25
;
Propriedades#region Propriedades
string protegida DefaultCharset
{
obter {retornar isto._defaultCharset};
}
protegido int DefaultSmtpPort
{
obter {retornar isto._defaultSmtpPort;}
}
#métodosendregion
#métodosregion
/**//// <summary>
/// Obtém a instância padrão
/// </sumário>
/// <retorna></retorna>
público estático MySmtpMail GetDefaultInstance()
{
// Aqui você pode definir o tipo de implementação específico através de um arquivo de configuração externo e então
// Obtém a instância do tipo através de Activator.CreateInstance()
}
/**//// <resumo>
/// Faça algum trabalho de inicialização
/// </sumário>
público abstrato void Open()
;
/// Destrua o objeto
/// </sumário>
público abstrato void Close()
;
/// Enviar e-mail
/// </sumário>
/// <param name="message"></param>
/// <param name="smtpServer"></param>
/// <param name="serverUsername"></param>
/// <param name="serverPassword"></param>
/// <retorna></retorna>
public bool Send (mensagem MailMessage, string smtpServer, string serverUsername, string serverPassword)
{
return Enviar (mensagem, smtpServer, serverUsername, serverPassword, this._defaultSmtpPort);
}
public abstract bool Send (mensagem MailMessage, string smtpServer, string serverUsername, string serverPassword, int smtpPort
public static string [] GetTo (mensagem MailMessage))
;
{
if (mensagem == nulo)
lançar novo ArgumentNullException("mensagem");
if (Globals.IsNullorEmpty(message.To))
retornar nulo;
retornar mensagem.To.Split(';');
}
string estática pública[] GetCc(mensagem MailMessage)
{
if (mensagem == nulo)
lançar novo ArgumentNullException("mensagem");
if (Globals.IsNullorEmpty(message.Cc))
retornar nulo;
retornar mensagem.Cc.Split(';');
}
string estática pública[] GetBcc(mensagem MailMessage)
{
if (mensagem == nulo)
lançar novo ArgumentNullException("mensagem");
if (Globals.IsNullorEmpty(message.Bcc))
retornar nulo;
retornar mensagem.Bcc.Split(';');
}
#endregion
}
}
Nota: De acordo com o bom senso, Open() antes do uso, e não se esqueça de Close() após o uso.
Plano de implementação um (componente Jmail):
O uso do Jmail no .NET requer as seguintes configurações:
1. Instale o jmail;
2. Encontre jmail.dll;
3. Para registrar o componente Jmail.dll, copie o arquivo jmail.dll para o diretório system32 e execute o comando "regsvr32 jmail.dll" (excluindo as aspas). ;
4. Execute Program FilesMicrosoft Visual Studio .NETFrameworkSDKBinildasm.exe (você pode usar o prompt de comando do Visual Studio .Net 2003),
O formato é o seguinte: tlbimp c:Program FilesDimacw3JMail4jmail.dll /out:MyJmail.dll /namespace:MyJmail
Depois de gerar MyJmail.dll, referencie-o no projeto.
baixar o componente,
o próximo passo é escrever a classe de implementação:
using System;
o namespace
System.Web.Mail;
{
classe pública JMailSmtpMail: MySmtpMail
{
Campos#região Campos
MyJmail.Message jmail = null;
#endregion
Métodos#região Métodos
public override void Open()
{
jmail = new MyJmail.Message();
}
public override bool Send(mensagem MailMessage, string smtpServer, string serverUsername, string serverPassword, int smtpPort)
{
if (jmail == nulo)
throw new Exception("smtp está fechado!");
if (mensagem == nulo)
throw new ArgumentNullException("message");
DateTime t = DateTime.Now;
//Atributo silencioso: Se definido como verdadeiro, JMail não lançará um erro de exceção.
jmail.Silent = false;
//Log criado por jmail, desde que o atributo logging esteja definido como true
jmail.Logging = true;
//Conjunto de caracteres, o padrão é "US-ASCII"
jmail.Charset = base.DefaultCharset;
//O tipo de conteúdo da carta O padrão é "text/plain"): String Se você enviar o e-mail em formato HTML, altere-o para "text/html".
if (mensagem.BodyFormat == MailFormat.Html)
jmail.ContentType = "texto/html";
=
GetJmailPriority(message.Priority);
string[] toArray = MySmtpMail.GetTo(mensagem);
if (toArray! = null && toArray.Length > 0)
{
bool isAddedRecipient = falso
para (int i = 0; i <toArray.Length; i++)
{
if (Globals.IsNullorEmpty(toArray[i]))
continuar;
se (!isAddedRecipient)
{
jmail.AddRecipient(toArray[i], String.Empty, String.Empty);
isAddedRecipient = verdadeiro;
}
outro
{
jmail.AddRecipientCC(toArray[i], String.Empty, String.Empty);
}
}
}
string[] ccArray = MySmtpMail.GetCc(mensagem);
if (ccArray! = nulo)
{
foreach (string cc em ccArray)
{
if (!Globals.IsNullorEmpty(cc))
jmail.AddRecipientCC(cc, String.Empty, String.Empty);
}
}
string[] bccArray = MySmtpMail.GetBcc(mensagem);
if (ccArray! = nulo)
{
foreach (string bcc em bccArray)
{
if (!Globals.IsNullorEmpty(coco))
jmail.AddRecipientBCC(coco, String.Empty);
}
}
jmail.From = message.From;
//Nome de usuário do e-mail do remetente
jmail.MailServerUserName = nome de usuário do servidor;
//Senha do e-mail do remetente
jmail.MailServerPassWord = senhadoservidor;
//Definir título do e-mail
jmail.Assunto = mensagem.Assunto;
//Adicione anexos ao e-mail (se houver vários anexos, você pode adicionar jmail.AddAttachment("c:\test.jpg",true,null);) e pronto. [Nota]: Após adicionar um anexo, exclua jmail.ContentType="text/html"; Caso contrário, caracteres ilegíveis aparecerão no e-mail.
//jmail.AddAttachment("c:\test.jpg", verdadeiro, nulo);
//Conteúdo do e-mail
jmail.Body = mensagem.Body
if (mensagem.BodyFormat == MailFormat.Html)
jmail.Body += "<br><br>";
outro
jmail.Body += "rnrn";
jmail.Body += DateTime.Now.ToString()
;
//Método de envio Jmail
resultado bool = jmail.Send(smtpServer, false)
;
}
substituição pública void Close()
{
jmail.Fechar();
}
byte estático privado GetJmailPriority (prioridade System.Web.Mail.MailPriority)
{
// Nível de correio, 1 é urgente, 3 é normal, 5 é de baixo nível
if (priority == System.Web.Mail.MailPriority.High)
retornar 1;
se (prioridade == System.Web.Mail.MailPriority.Low)
retornar 5;
retornar 3;
}
#endregion
}
}
Plano de implementação dois (componente OpenSmtp.Net):
Para quem não entrou em contato com OpenSmtp.Net, você pode pesquisar no Google primeiro. Não vou apresentar o conceito aqui, mas também tem um irmão gêmeo OpenPop. .Net. Quanto ao OpenSmtp.Net, podemos baixá-lo em http://sourceforge.net/projects/opensmtp-net/ . A versão mais recente é 1.11.
A seguir, vamos entrar no tópico:
usando System;
usando System.Web.Mail;
o namespace
OpenSmtp.Mail;
{
classe pública OpenSmtpMail: MySmtpMail
{
Arquivos#região Arquivos
OpenSmtp.Mail.MailMessage msg = null;
Smtp smtp = null;
#endregion
Métodos#region Métodos
public override void Open()
{
mensagem = new OpenSmtp.Mail.MailMessage();
smtp = novo Smtp();
}
substituição pública bool Enviar (mensagem System.Web.Mail.MailMessage, string smtpServer, string serverUsername, string serverPassword, int smtpPort)
{
if (msg == nulo || smtp == nulo)
throw new Exception("smtp está fechado!");
if (mensagem == null)
lançar new ArgumentNullException("mensagem")
;
EmailAddress de = novo EmailAddress(message.From, message.From);
msg.Charset = base.DefaultCharset
;
msg.Priority = GetOpenSmtpPriority(message.Priority)
;
string[] toArray = MySmtpMail.GetTo(mensagem);
if (toArray! = nulo)
{
foreach (string para em toArray)
{
if (!Globals.IsNullorEmpty(to))
msg.AddRecipient(to, AddressType.To);
}
}
string[] ccArray = MySmtpMail.GetCc(mensagem);
if (ccArray! = nulo)
{
foreach (string cc em ccArray)
{
if (!Globals.IsNullorEmpty(cc))
msg.AddRecipient(cc, AddressType.Cc);
}
}
string[] bccArray = MySmtpMail.GetBcc(mensagem);
if (ccArray! = nulo)
{
foreach (string bcc em bccArray)
{
if (!Globals.IsNullorEmpty(coco))
msg.AddRecipient(coco, AddressType.Cco);
}
}
msg.Subject = mensagem.Subject
if (message.BodyFormat == System.Web.Mail.MailFormat.Html)
{
msg.HtmlBody = mensagem.Body + "<br><br>" + DateTime.Now.ToString();
}
outro
{
msg.Body = mensagem.Body + "rnrn" + DateTime.Now.ToString();;
}
string str1 = msg.HtmlBody;
string str2 = msg.Body;
smtp.Host = smtpServer;
smtp.Username = serverUsername;
smtp.Password = servidorPassword;
smtp.Port = smtpPort;
smtp.SendMail(msg)
;
}
substituição pública void Close()
{
mensagem = nulo;
smtp = nulo;
}
string estática privada GetOpenSmtpPriority (prioridade System.Web.Mail.MailPriority)
{
// Nível de correio, 1 é urgente, 3 é normal, 5 é de baixo nível
if (priority == System.Web.Mail.MailPriority.High)
retornar OpenSmtp.Mail.MailPriority.High
se (prioridade == System.Web.Mail.MailPriority.Low)
retornar OpenSmtp.Mail.MailPriority.Low;
retornar OpenSmtp.Mail.MailPriority.Normal;
}
#endregion
}
}
Plano de implementação três:
(Os dois planos de implementação acima são suficientes para atender às necessidades atuais e podem ser expandidos se necessário)