C#发送邮件
以下代码已用 .yeah 、qq 以及本人公司邮箱测试通过,可多发,可挂附件
本次测试邮件发送类,是用的winform
页面如下
窗口的后台代码如下:
1 using System; 2 using System.Collections.Generic; 3 using System.ComponentModel; 4 using System.Data; 5 using System.Drawing; 6 using System.Linq; 7 using System.Text; 8 using System.Threading.Tasks; 9 using System.Windows.Forms; 10 11 namespace MailServer 12 { 13 public partial class MailSend : Form 14 { 15 public MailSend() 16 { 17 InitializeComponent(); 18 } 19 20 /// <summary> 21 /// 发送按钮 的点击事件 22 /// </summary> 23 /// <param name="sender"></param> 24 /// <param name="e"></param> 25 private void btnSend_Click(object sender, EventArgs e) 26 { 27 string name = txtName.Text.Trim(); //输入邮件地址(发件人的) 28 string pwd = txtPwd.Text.Trim(); //输入的邮箱密码(发件人的) 29 string content = txtContent.Text.Trim(); //邮件内容 30 string recieve = txtRecieve.Text.Trim(); //收件人邮件地址 31 string title = txtTitle.Text.Trim(); //邮件标题 32 string attachFile = txtFileName.Text; //附件的路径 33 try 34 { 35 //调用接口,发送邮件 36 EMailUtil.SendMail(name, pwd, title, content, recieve, attachFile); 37 MessageBox.Show("发送成功"); 38 } 39 catch (Exception) 40 { 41 MessageBox.Show("发送失败"); 42 } 43 44 } 45 46 /// <summary> 47 /// 浏览 按钮的点击事件 48 /// </summary> 49 /// <param name="sender"></param> 50 /// <param name="e"></param> 51 private void button1_Click(object sender, EventArgs e) 52 { 53 54 DialogResult result = OFD.ShowDialog(); //打开文件浏览窗口 55 if (result == DialogResult.OK) 56 txtFileName.Text = OFD.FileName; //将附件路径保存到文本框 57 } 58 } 59 }
接口代码如下:
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Net.Mail; 6 7 namespace MailServer 8 { 9 public class EMailUtil 10 { 11 12 /// <summary> 13 /// 邮件发送 14 /// </summary> 15 /// <param name="userName">发件人邮箱地址</param> 16 /// <param name="pwd">发件人邮箱密码</param> 17 /// <param name="mailSubject">邮件主题</param> 18 /// <param name="mailBody">邮件内容</param> 19 /// <param name="sendMailAddress">收件人地址(以";"分隔)</param> 20 /// <param name="attachment">附件</param> 21 public static void SendMail(string userName, string pwd, string mailSubject, string mailBody, string sendMailAddress, string attachment) 22 { 23 MailMessage m = new MailMessage(); 24 string[] arrTo = sendMailAddress.Split(';'); //将以分号分隔的收件人地址拆开 25 foreach (string t in arrTo) 26 { 27 if (!string.IsNullOrEmpty(t)) 28 m.To.Add(new MailAddress(t)); //添加收件人 29 } 30 m.From = new MailAddress(userName); //发件人 31 m.Subject = mailSubject; //邮件标题 32 m.Body = mailBody; //邮件内容 33 m.IsBodyHtml = true; 34 35 m.SubjectEncoding = Encoding.GetEncoding("GB2312"); 36 m.BodyEncoding = Encoding.GetEncoding("GB2312"); 37 if (attachment.Length > 0) 38 { 39 m.Attachments.Add(new Attachment(attachment)); //添加附件 40 } 41 SmtpClient sm = new SmtpClient(); 42 sm.Credentials = new System.Net.NetworkCredential(userName, pwd); 43 sm.DeliveryMethod = SmtpDeliveryMethod.Network; 44 sm.Host = "smtp.yeah.net"; //此处是邮件的服务器主机名,如果用163邮箱发送,就写smtp.163.com;126邮箱则写smtp.126.com 45 sm.Send(m); 46 } 47 } 48 }
此方法可以正常的发送邮件,
但是有一个尚未解决的问题。就是接口中,最后调用的Send方法没有返回值,这样不容易判断邮件的发送状态。
望大神们有知道的给个方案~在此多谢~