您的位置:首页 > 编程语言 > C#

.NET 发送邮件(C#)

2010-03-21 11:46 363 查看
配置web.config,当然这配置文件非必须的,你可以直接写在Code中,但是这样对以后维护比较麻烦。

首先看一下配置文件:(从mailSettings开始)

<system.net>
<configuration>
....
....
<!--如果是第三方smtp服务器,需要指定userName 和 password,并根据host指定发件人邮件地址from
测试发现from值必须是userName值加上指定的smpt服务器才行,而且是必须指定的
如果是本机smtp服务器,只需指定defaultCredentials="true"即可-->
<mailSettings>
<smtp deliveryMethod="Network" from="changxxx@163.com">
<network host="smtp.163.com" port="25" userName="changxxx@163.com" password="xxxxx"/>
</smtp>
</mailSettings>
</system.net>

</configuration>


引入两个命名空间:

using System.Web.Configuration;
using System.Net.Configuration;


主要发送函数代码:(稍微修改就可以为你所用了)

public void sendMail(string subject, string body)
{

Configuration config = WebConfigurationManager.OpenWebConfiguration(HttpContext.Current.Request.ApplicationPath);
MailSettingsSectionGroup settings = (MailSettingsSectionGroup)config.GetSectionGroup("system.net/mailSettings");
string username = settings.Smtp.Network.UserName;
string password = settings.Smtp.Network.Password;
string smtpserver = settings.Smtp.Network.Host;
string frommail = settings.Smtp.From;
string tomail = settings.Smtp.From;

MailAddress EmailFrom = new MailAddress(frommail);
MailAddress EmailTo = new MailAddress(tomail);
MailMessage Email = new MailMessage(EmailFrom, EmailTo);
Email.Priority = MailPriority.High;
Email.Subject = subject;
Email.Body = body;
//添加抄送电子邮件
//Email.CC.Add("这里就是你发送邮件的目标拉,填写抄送收件人的邮件地址");
// string file = Server.MapPath("d://") + "vs2008 key.txt";//附件路径
// Attachment data = new Attachment(file,System.Net.Mime.MediaTypeNames.Application.Octet);
// Add time stamp information for the file.
// System.Net.Mime.ContentDisposition disposition = data.ContentDisposition;
// disposition.CreationDate = System.IO.File.GetCreationTime(file);
// disposition.ModificationDate = System.IO.File.GetLastWriteTime(file);
// disposition.ReadDate = System.IO.File.GetLastAccessTime(file);
// Add the file attachment to this e-mail message.
// Email.Attachments.Add(data);
SmtpClient Client = new SmtpClient(smtpserver);
//验证 (Credentials 凭证)
Client.Credentials = new System.Net.NetworkCredential(username, password);
//处理待发的电子邮件的方法  (Delivery  发送,传输)
Client.DeliveryMethod = SmtpDeliveryMethod.Network;
try
{
Client.Send(Email);
Response.Write("已发送成功啦");
Response.Redirect("send_mail_success.html");
}
catch (SmtpFailedRecipientsException ex)
{
for (int i = 0; i < ex.InnerExceptions.Length; i++)
{
SmtpStatusCode status = ex.InnerExceptions[i].StatusCode;
if (status == SmtpStatusCode.MailboxBusy || status ==
SmtpStatusCode.MailboxUnavailable)
{
Response.Write("Delivery failed - retrying in 5 seconds.");
System.Threading.Thread.Sleep(5000);
Client.Send(Email);
}
else
{
Response.Write("Failed to deliver message to {0}" + ex.FailedRecipient[i].ToString().Trim() + "");
Response.Redirect("send_mail_fail.html");
}
}

}
}


奇怪的是,我用QQ邮箱时不行,不知道为什么,SMTP都开通,而且之前用PHP SMTP时发送也成功,如果你用QQ邮箱不行,请更换为网易的试试。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: