发送邮件使用SMTP服务器,有两种方案,一种是使用IIS的SMTP功能;另一种是直接使用邮件供应商的SMTP,比如Gmail、Sina、QQ等,使用这些SMTP服务器必须得注册帐号,一般可以直接用邮箱及密码,但是有些邮箱必须开启POP3/SMTP服务才可以,比如QQ邮箱默认是关闭的,可以在“设置”->“账户”里面找到。我今天整理的都是用的第二种。
早期的.NET版本用的是 System.Web.Mail 类提供的功能来发邮件;2.0版本推出了 System.Net.Mail 类来代替 System.Web.Mail ,但是我在 WebForm 里面使用的时候用System.Net.Mail 老是触发异常,后来改用 System.Web.Mail 才成功了,可以看下我代码里的区别;ASP.NET MVC 3 提供了 WebMail 类来发送邮件,更加方便。
控制台程序、WPF、WebForm 及 ASP.NET MVC 我都测试了一下,控制台程序和 WPF 都用了 System.Net.Mail ,WebForm 和 ASP.NET MVC 都可以用 System.Web.Mail ,而 ASP.NET MVC 3 直接用 WebMail 更方便。下面我把代码分别贴出来。
控制台程序:
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Net.Mail;//添加引用 6 7 namespace SendEmail 8 { 9 class Program 10 { 11 static void Main(string[] args) 12 { 13 Program p = new Program(); 14 bool flag = p.SendEmail(); 15 if (flag) 16 { 17 Console.Write("Success !"); 18 } 19 20 Console.Read(); 21 } 22 23 public bool SendEmail() 24 { 25 MailMessage msg = new MailMessage(); 26 msg.To.Add("1234567@qq.com");//邮件接收者的帐号 27 msg.From = new MailAddress("1234567@qq.com", "nickname", System.Text.Encoding.UTF8);//发送邮件的帐号及显示名称和字符编码 28 msg.Subject = "Subject";//邮件标题 29 msg.SubjectEncoding = System.Text.Encoding.UTF8;//邮件标题编码 30 msg.Body = "Content";//邮件内容 31 msg.BodyEncoding = System.Text.Encoding.UTF8;//邮件内容编码 32 msg.IsBodyHtml = false;//是否是HTML邮件 33 msg.Priority = MailPriority.High;//邮件优先级 34 35 SmtpClient client = new SmtpClient(); 36 client.Credentials = new System.Net.NetworkCredential("1234567@qq.com", "password");//注册的邮箱和密码,就QQ邮箱而言,如果设置了独立密码,要用独立密码代替密码 37 client.Host = "smtp.qq.com";//QQ邮箱对应的SMTP服务器 38 object userState = msg; 39 try 40 { 41 client.SendAsync(msg, userState); 42 return true; 43 } 44 catch (Exception ex) 45 { 46 Console.WriteLine(ex.Message); 47 return false; 48 } 49 } 50 } 51 }
WPF:
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Net.Mail;//添加引用 5 using System.Text; 6 using System.Windows; 7 using System.Windows.Controls; 8 using System.Windows.Data; 9 using System.Windows.Documents; 10 using System.Windows.Input; 11 using System.Windows.Media; 12 using System.Windows.Media.Imaging; 13 using System.Windows.Navigation; 14 using System.Windows.Shapes; 15 16 namespace WPFSendMail 17 { 18 /// <summary> 19 /// MainWindow.xaml 的交互逻辑 20 /// </summary> 21 public partial class MainWindow : Window 22 { 23 public MainWindow() 24 { 25 InitializeComponent(); 26 } 27 28 private void Button_Click(object sender, RoutedEventArgs e) 29 { 30 bool flag = SendMail(); 31 if (flag) 32 { 33 MessageBox.Show("Success !","Tips"); 34 } 35 } 36 37 public bool SendMail() 38 { 39 MailMessage message = new MailMessage(); 40 message.To.Add(" @qq.com"); 41 message.From = new MailAddress(" @qq.com","nickname",Encoding.UTF ); 42 message.Subject = "Sending e-mail in WPF !"; 43 message.SubjectEncoding = Encoding.UTF ; 44 message.Body = "Awesome"; 45 message.BodyEncoding = Encoding.UTF ; 46 message.IsBodyHtml = false; 47 message.Priority = MailPriority.Normal; 48 Attachment att = new Attachment("text.txt");//添加附件,确保路径正确 49 message.Attachments.Add(att); 50 51 SmtpClient smtp = new SmtpClient(); 52 smtp.Credentials = new System.Net.NetworkCredential(" @qq.com","password"); 53 smtp.Host = "smtp.qq.com"; 54 object userState = message; 55 56 try 57 { 58 smtp.SendAsync(message,userState); 59 return true; 60 } 61 catch (Exception ex) 62 { 63 MessageBox.Show(ex.Message,"Tips"); 64 return false; 65 } 66 } 67 } 68 }
Winform:
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Web; 6 using System.Web.UI; 7 using System.Web.UI.WebControls; 8 using System.Web.Mail;//添加引用 9 10 namespace WebFormSendEmail 11 { 12 public partial class WebForm : System.Web.UI.Page 13 { 14 protected void Page_Load(object sender, EventArgs e) 15 { 16 17 } 18 19 protected void Button _Click(object sender, EventArgs e) 20 { 21 bool flag = SendMail(); 22 if (flag) 23 { 24 Response.Write("<script>alert(‘Success !‘);</script>"); 25 } 26 } 27 28 public bool SendMail() 29 { 30 MailMessage message = new MailMessage(); 31 message.To = " @qq.com"; 32 message.From = " @qq.com"; 33 message.Subject = "Sending e-mail in Web !"; 34 message.Body = "Awesome"; 35 //基本权限 36 message.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate", " "); 37 //用户名 38 message.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendusername", " @qq.com"); 39 //密码 40 message.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendpassword", "password"); 41 42 SmtpMail.SmtpServer = "smtp.qq.com"; 43 try 44 { 45 SmtpMail.Send(message); 46 return true; 47 } 48 catch (Exception ex) 49 { 50 Response.Write(ex.Message); 51 return false; 52 } 53 } 54 } 55 }
MVC:
1 try 2 { 3 WebMail.SmtpServer = "smtp.qq.com"; 4 WebMail.SmtpPort = 25;//端口号,不同SMTP服务器可能不同,可以查一下 5 WebMail.EnableSsl = false;//禁用SSL 6 WebMail.UserName = "1234567@qq.com"; 7 WebMail.Password = "password"; 8 WebMail.From = "1234567@qq.com"; 9 WebMail.Send("1234567@qq.com","Subject",“Content"); 10 } 11 catch (Exception) 12 { 13 14 }