C#发送邮件

今天谈一下C#(WinForm)如何发送带附件的电子邮件!废话少说,先截图伺候:

 

 

 

首先C#发送邮件需要smtp服务的支持,我也不知道是不是C#只支持smtp协议,不过好像在MSDN里,Mail这个命名空间下只有介绍smtp的方法的,好像没看到POP的,算了,先不要说这个

我们暂时用smtp协议来做就好了!因此首先你要确保你的发件邮箱支持smtp服务,据我说知,雅虎邮箱,HotMail邮箱和GMail邮箱都不支持smtp的,不过没事,还好我们常用的QQ邮箱,163邮箱,新浪邮箱等邮箱都支持smtp的,这样我们就可以用这些邮箱来发邮件了,哈哈,不过QQ邮箱的smtp服务默认是关闭的,需要我们手动去开通,开通很简单,进入你的QQ邮箱后,选择【设置】,在账户选项卡里就有个smtp的复选框,打个勾保存一下就OK了。163邮箱和新浪邮箱开通smtp服务也差不多这样的,很简单。好了  开通好了接下来就开始来讲代码了 OK!

为了方便菜鸟理解,我把整个程序分成一下几部分:

1.smtp服务信息设置

2.验证发件人信息

3.添加附件

4.正式发送邮件

5.发送邮件后处理

OK 以下代码伺候:

一些全局变量,都有注释的

 

复制代码
代码
   
   
SmtpClient SmtpClient = null ; // 设置SMTP协议 MailAddress MailAddress_from = null ; // 设置发信人地址 当然还需要密码 MailAddress MailAddress_to = null ; // 设置收信人地址 不需要密码 MailMessage MailMessage_Mai = null ; FileStream FileStream_my = null ; // 附件文件流
复制代码

 

 

  1.smtp服务信息设置

复制代码
代码
复制代码
   
   
#region 设置Smtp服务器信息 /// <summary> /// 设置Smtp服务器信息 /// </summary> /// <param name="ServerName"> SMTP服务名 </param> /// <param name="Port"> 端口号 </param> private void setSmtpClient( string ServerHost, int Port) { SmtpClient = new SmtpClient(); SmtpClient.Host = ServerHost; // 指定SMTP服务名 例如QQ邮箱为 smtp.qq.com 新浪cn邮箱为 smtp.sina.cn等 SmtpClient.Port = Port; // 指定端口号 SmtpClient.Timeout = 0 ; // 超时时间 } #endregion
复制代码
复制代码

2.验证发件人信息

 

复制代码
代码
复制代码
   
   
#region 验证发件人信息 /// <summary> /// 验证发件人信息 /// </summary> /// <param name="MailAddress"> 发件邮箱地址 </param> /// <param name="MailPwd"> 邮箱密码 </param> private void setAddressform( string MailAddress, string MailPwd) { // 创建服务器认证 NetworkCredential NetworkCredential_my = new NetworkCredential(MailAddress, MailPwd); // 实例化发件人地址 MailAddress_from = new System.Net.Mail.MailAddress(MailAddress, textBoxX4.Text); // 指定发件人信息 包括邮箱地址和邮箱密码 SmtpClient.Credentials = new System.Net.NetworkCredential(MailAddress_from.Address, MailPwd); ; } #endregion
复制代码
复制代码

 

3.添加附件

 

 

复制代码
代码
复制代码
   
   
#region 检测附件大小 private bool Attachment_MaiInit( string path) { try { FileStream_my = new FileStream(path, FileMode.Open); string name = FileStream_my.Name; int size = ( int )(FileStream_my.Length / 1024 / 1024 ); FileStream_my.Close(); // 控制文件大小不大于10M if (size > 10 ) { MessageBox.Show( " 文件长度不能大于10M!你选择的文件大小为 " + size.ToString() + " M " , " 警告 " ,MessageBoxButtons.OK,MessageBoxIcon.Warning); return false ; } return true ; } catch (IOException E) { MessageBox.Show(E.Message); return false ; } } #endregion
复制代码
复制代码

 

 

4.正式发送邮件

 

复制代码
代码
复制代码
   
   
private void btnSend_Click( object sender, EventArgs e) { // 检测附件大小 发件必需小于10M 否则返回 不会执行以下代码 if (txt_Path.Text != "" ) { if ( ! Attachment_MaiInit(txt_Path.Text.Trim())) { return ; } } if (txt_SmtpServer.Text == "" ) { MessageBox.Show( " 请输入SMTP服务器名! " , " 提示 " , MessageBoxButtons.OK, MessageBoxIcon.Warning); return ; } if (textBoxX2.Text == "" ) { MessageBox.Show( " 请输入发件人邮箱地址! " , " 提示 " , MessageBoxButtons.OK, MessageBoxIcon.Warning); return ; } if (txtformPwd.Text == "" ) { MessageBox.Show( " 请输入发件人邮箱密码! " , " 提示 " , MessageBoxButtons.OK, MessageBoxIcon.Warning); return ; } if (dataGridViewX1.Rows.Count == 0 ) { MessageBox.Show( " 请添加收件人! " , " 提示 " , MessageBoxButtons.OK, MessageBoxIcon.Warning); return ; } if (MessageBox.Show( " 您确定要发送当前邮件吗? " , " 询问 " , MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.OK) { try { // 初始化Smtp服务器信息 setSmtpClient( " smtp. " + txt_SmtpServer.Text.Trim() + comboBoxEx3.Text, Convert.ToInt32(numericUpDown1.Value)); } catch (Exception Ex) { MessageBox.Show( " 邮件发送失败,请确定SMTP服务名是否正确! " + " \n " + " 技术信息:\n " + Ex.Message, " 错误 " , MessageBoxButtons.OK, MessageBoxIcon.Error); return ; } try { // 验证发件邮箱地址和密码 setAddressform(textBoxX2.Text.Trim() + comboBoxEx2.Text, txtformPwd.Text.Trim()); } catch (Exception Ex) { MessageBox.Show( " 邮件发送失败,请确定发件邮箱地址和密码的正确性! " + " \n " + " 技术信息:\n " + Ex.Message, " 错误 " , MessageBoxButtons.OK, MessageBoxIcon.Error); return ; } // 清空历史发送信息 以防发送时收件人收到的错误信息(收件人列表会不断重复) MailMessage_Mai.To.Clear(); // 添加收件人邮箱地址 foreach (DataGridViewRow row in dataGridViewX1.Rows) { MailAddress_to = new MailAddress(row.Cells[ " Column1 " ].Value.ToString()); MailMessage_Mai.To.Add(MailAddress_to); } MessageBox.Show( " 收件人: " + dataGridViewX1.Rows.Count.ToString() + " " ); // 发件人邮箱 MailMessage_Mai.From = MailAddress_from; // 邮件主题 MailMessage_Mai.Subject = txttitle.Text; MailMessage_Mai.SubjectEncoding = System.Text.Encoding.UTF8; // 邮件正文 MailMessage_Mai.Body = Rtb_Message.Text; MailMessage_Mai.BodyEncoding = System.Text.Encoding.UTF8; // 清空历史附件 以防附件重复发送 MailMessage_Mai.Attachments.Clear(); // 添加附件 MailMessage_Mai.Attachments.Add( new Attachment(txt_Path.Text.Trim(), MediaTypeNames.Application.Octet)); // 注册邮件发送完毕后的处理事件 SmtpClient.SendCompleted += new SendCompletedEventHandler(SendCompletedCallback); // 开始发送邮件 SmtpClient.SendAsync(MailMessage_Mai, " 000000000 " ); } }
复制代码
复制代码

 

 

5.发送邮件后处理

 

复制代码
代码
复制代码
   
   
#region 发送邮件后所处理的函数 private static void SendCompletedCallback( object sender, AsyncCompletedEventArgs e) { try { if (e.Cancelled) { MessageBox.Show( " 发送已取消! " ); } if (e.Error != null ) { MessageBox.Show( " 邮件发送失败! " + " \n " + " 技术信息:\n " + e.ToString(), " 错误 " , MessageBoxButtons.OK, MessageBoxIcon.Error); } else { MessageBox.Show( " 邮件成功发出! " , " 恭喜! " , MessageBoxButtons.OK, MessageBoxIcon.Information); } } catch (Exception Ex) { MessageBox.Show( " 邮件发送失败! " + " \n " + " 技术信息:\n " + Ex.Message, " 错误 " , MessageBoxButtons.OK, MessageBoxIcon.Error); } } #endregion
复制代码
复制代码

 

转载自:http://www.cnblogs.com/maiweibiao/articles/1837821.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个使用C#编写的控制台程序,用于发送邮件: ```csharp using System; using System.Net; using System.Net.Mail; class Program { static void Main(string[] args) { // 设置邮件服务器 string smtpServer = args[0]; int smtpPort = 25; SmtpClient client = new SmtpClient(smtpServer, smtpPort); // 设置发件人 string from = args[1]; string displayName = args[2]; MailAddress fromAddress = new MailAddress(from, displayName); // 设置收件人 string to = args[3]; MailAddress toAddress = new MailAddress(to); // 创建邮件对象 MailMessage message = new MailMessage(fromAddress, toAddress); // 设置抄送和密送 if (args.Length > 4) { string[] cc = args[4].Split(','); foreach (string c in cc) { message.CC.Add(c); } } if (args.Length > 5) { string[] bcc = args[5].Split(','); foreach (string b in bcc) { message.Bcc.Add(b); } } // 设置主题和内容 message.Subject = args[6]; message.Body = args[7]; // 添加附件 if (args.Length > 8) { string[] attachments = args[8].Split(','); foreach (string attachment in attachments) { Attachment file = new Attachment(attachment); message.Attachments.Add(file); } } // 发送邮件 client.Send(message); Console.WriteLine("邮件发送成功!"); } } ``` 在命令行中输入以下命令即可发送邮件: ``` SendMail 邮件服务器IP 发件人 显示名称 收件人 抄送 密送 主题 内容 文件 ``` 其中,邮件服务器IP、发件人、显示名称、收件人、主题和内容是必填项,抄送、密送和文件是可选项。如果有多个收件人、抄送或密送,可以用逗号分隔。如果有多个文件,也可以用逗号分隔。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值