首先是邮件帮助类
  using System;
  using System.Collections.Generic;
  using System.Text;
  using System.Net.Mail;
  using System.Windows.Forms;
  namespace zzEmail
  {
  //邮件帮助类
  class MailHelper
  {
  SmtpClient smtpClient;
  //邮件实体类,包含用户名密码
  MailModel mail;
  UserModel to;
  public MailHelper()
  {
  }
  public MailHelper(MailModel mail, UserModel t)
  {
  smtpClient = new SmtpClient();
  this.mail = mail;
  this.to = t;
  }
  public void send()
  {
  MailMessage msg=null;
  smtpClient.Credentials = new System.Net.NetworkCredential(mail.from.Send_Address.Address, mail.from.password);//设置发件人身份的票据
  smtpClient.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network;
  smtpClient.Host = "smtp." + mail.from.Send_Address.Host;
  try
  {
  msg = mail.GetMail();
  msg.To.Add(to.Send_Address.Address);
  smtpClient.Send(msg);
  MessageBox.Show("发送成功");
  }
  catch (SmtpException err)
  {
  //如果错误原因是没有找到服务器,则尝试不加smtp.前缀的服务器
  if (err.StatusCode == SmtpStatusCode.GeneralFailure)
  {
  try
  {
  //有些邮件服务器不加smtp.前缀
  smtpClient.Host = null;
  smtpClient.Send(mail.GetMail());
  }
  catch (SmtpException err1)
  {
  MessageBox.Show(err1.Message, "发送失败");
  }
  }
  else
  {
  MessageBox.Show(err.Message, "发送失败");
  }
  }
  finally
  {
  //及时释放占用的资源
  msg.Dispose();
  }
  }
  }
  }
  邮件实体类
  using System;
  using System.Collections.Generic;
  using System.Text;
  using System.Net.Mail;
  namespace zzEmail
  {
  //邮件实体类
  class MailModel
  {
  //主题
  public string Subject { get;set;}
  public string SubjectEncoding { get; set; }
  //内容
  public string Body { get;set;}
  public string BodyEncoding { get; set; }
  //附件
  public List<Attachment> Attachments=new List<Attachment>();
  public MailMessage message;
  //发送人
  public UserModel from;
  public MailModel(string subject,string body,UserModel f)
  {
  message = new MailMessage();
  this.Subject = subject;
  this.Body = body;
  this.from = f;
  }
  //添加附件
  public void AddAttach(Attachment file)
  {
  Attachments.Add(file);
  }
  //添加一群附件
  public void AddAttach(List<Attachment> files)
  {
  foreach (Attachment item in files)
  {
  if(item!=null)
  this.Attachments.Add(item);
  }
  }
  //返回邮件实体
  public MailMessage GetMail()
  {
  if (this.message != null)
  {
  message.Subject = this.Subject;
  message.SubjectEncoding = System.Text.Encoding.UTF8;
  message.Body = this.Body;
  message.BodyEncoding = System.Text.Encoding.UTF8;
  message.From = from.Send_Address;//设置发邮件人地址
  foreach (Attachment item in Attachments)
  {
  if (item != null)
  this.message.Attachments.Add(item);
  }
  return message;
  }
  else
  return null;
  }
  }
  }
  邮件的用户类
  using System;
  using System.Collections.Generic;
  using System.Text;
  using System.Net.Mail;
  namespace zzEmail
  {
  //接收邮件的用户实体类
  class UserModel
  {
  public string nickname { get; set; }
  public string password { get; set; }
  public MailAddress Send_Address{get;set;}
  public UserModel(string useraddr)
  {
  Send_Address = new MailAddress(useraddr);
  }
  public UserModel(string useraddr,string nickname)
  {
  this.nickname = nickname;
  Send_Address = new MailAddress(useraddr);
  }
  }
  }
  使用多线程来对邮件进行发送
  using System;
  using System.Collections.Generic;
  using System.ComponentModel;
  using System.Data;
  using System.Drawing;
  using System.Text;
  using System.Windows.Forms;
  using System.Net.Mail;
  using System.Threading;
  namespace zzEmail
  {
  public partial class Form1 : Form
  {
  public Form1()
  {
  InitializeComponent();
  }
  private void btn_addFile_Click(object sender, EventArgs e)
  {
  OpenFileDialog myOpenFileDialog = new OpenFileDialog();
  myOpenFileDialog.CheckFileExists = true;
  //只接收有效的文件名托福答案
  myOpenFileDialog.ValidateNames = true;
  //允许一次选择多个文件作为附件
  myOpenFileDialog.Multiselect = true;
  myOpenFileDialog.ShowDialog();
  if (myOpenFileDialog.FileNames.Length > 0)
  {
  FileList.Items.AddRange(myOpenFileDialog.FileNames);
  }
  }
  private void btn_Send_Click(object sender, EventArgs e)
  {
  UserModel from = new UserModel(txt_UserName.Text);
  from.password = txt_Pass.Text;
  UserModel to = new UserModel(txt_rec.Text);
  MailModel mail = new MailModel(txt_sub.Text, txt_content.Text, from);
  List<Attachment> filelist = new List<Attachment>();
  //添加附件托福答案
  if (FileList.Items.Count > 0)
  {
  for (int i = 0; i < FileList.Items.Count; i++)
  {
  Attachment attachFile = new Attachment(FileList.Items[i].ToString());
  filelist.Add(attachFile);
  }
  }
  mail.AddAttach(filelist);//添加附件
  MailHelper helper = new MailHelper(mail, to);
  //启动一个线程发送邮件
  Thread mythread = new Thread(new ThreadStart(helper.send));
  mythread.Start();
  }
  }
  }

C#实现对邮件的发送的更多相关文章

  1. (转载)JavaWeb学习总结(五十一)——邮件的发送与接收原理

    博客源地址:http://www.cnblogs.com/xdp-gacl/p/4209586.html 一. 邮件开发涉及到的一些基本概念 1.1.邮件服务器和电子邮箱 要在Internet上提供电 ...

  2. zabbix监控系列(4)之zabbix报警邮件无法发送

    情况介绍 首先确保邮箱规则没有把报警邮件作为垃圾邮件拉黑了. 服务器断电重启后,发现zabbix报警邮件无法发送,断电之前是好好的,但是重启后不行了,于是查看maillog日志,发现这个错误: Hos ...

  3. JavaWeb学习总结(五十一)——邮件的发送与接收原理

    一. 邮件开发涉及到的一些基本概念 1.1.邮件服务器和电子邮箱 要在Internet上提供电子邮件功能,必须有专门的电子邮件服务器.例如现在Internet很多提供邮件服务的厂商:sina.sohu ...

  4. PHP 错误与异常 笔记与总结(7)将错误日志以邮件方式发送

    当系统发生了很严重的问题,需要立刻发送给管理员.可以通过 error_log() 将错误以邮件形式发送到邮箱. 在 php.ini 中设置: sendmail_from = 472323087@qq. ...

  5. Activation successful 数据库邮件无法发送

    问题现象: 配置好数据库邮件后发送测试邮件. 在数据库邮件发送日志中显示状态为:Activation successful.而邮件是无法收到的. 解决方法: 本次解决是将SQL Server Agen ...

  6. C#中邮件的发送基本操作

    本地配置的邮箱:http://localhost:6080/index.php //邮件的收发需要用到两个类   //1.用来创建一封邮件对象     //1.MailMessage 添加对 usin ...

  7. 利用工具MailUtils实现邮件的发送,遇到的大坑,高能预警!!

    java实现邮件的发送依赖的jar包有两个:mail.jar和activation.jar,我也找到了一个工具包:itcast-tools-1.4.jar,实现原理大家可以查看源码,先放出资源链接 h ...

  8. NodeJs之邮件(email)发送

    NodeJs之邮件(email)发送 一,介绍与需求 1.1,介绍 1,Nodemailer简介 Nodemailer是一个简单易用的Node.js邮件发送插件 github地址 Nodemailer ...

  9. 使用JavaMail发送邮件-从FTP读取图片并添加到邮件正文发送

    业务分析: 最近工作需要,需要从FTP读取图片内容,添加到邮件正文发送.发送邮件正文,添加附件采用Spring的MimeMessageHelper对象来完成,添加图片也将采用MimeMessageHe ...

随机推荐

  1. Little Kings - SGU 223(状态压缩)

    题目大意:在一个N*N的棋盘上放置M个国王,已知国王会攻击与它相邻的8个格子,要求放置的额国王不能相互攻击,求放置的方式有多少种. 分析:用dp[row][state][nOne],表示本行状态sta ...

  2. hpuoj 问题 A: 做不出来踢协会!!!

    问题 A: 做不出来踢协会!!! 时间限制: 1 Sec  内存限制: 128 MB提交: 291  解决: 33[提交][状态][讨论版] 题目描述 这是今天最水的一道题,如果没写出来的,呵呵,踢协 ...

  3. Linux命令 — 设置或查看网络配置命令ifconfig

    ifconfig命令用于设置或查看网络配置,包括IP地址.网络掩码.广播地址等.它是linux系统中,使用频率最高的关于网络方面的命令. 1. 命令介绍 命令格式: ifconfig [interfa ...

  4. 【Android - 框架】之刷新加载框架Ultra-Pull-To-Refresh的使用

    Ultra-Pull-To-Refresh框架是用来嵌套其他布局,实现下拉刷新和上拉加载的框架.它其中可以嵌套任何控件,ListView.GridView.ScrollView.RecyclerVie ...

  5. android中选择控件与选择界面自然过度效果的实现--一种新的交互设计

    转载请标明出处: http://blog.csdn.net/jianghejie123/article/details/40648931 在安卓中经常遇到须要选择一个东西的功能,比方选择日期.选择文件 ...

  6. 重复记录(duplicate records)相关运营数据

    MySQL 中查找反复数据,删除反复数据 创建表和測试数据 /* 表结构 */ DROPTABLEIFEXISTS `t1`; CREATETABLEIFNOTEXISTS `t1`( `id` IN ...

  7. struts2 json 定义全局Date格式

    使用struts2的json插件时,自己定义日期格式经常使用的方式是在get属性上加入@JSON注解,这个对于少量Date属性还能够,可是假设date字段多了,总不可能去给每一个date get方法加 ...

  8. Qt 学习之路:QStringListModel

    上一章我们已经了解到有关 list.table 和 tree 三个最常用的视图类的便捷类的使用.前面也提到过,由于这些类仅仅是提供方便,功能.实现自然不如真正的 model/view 强大.从本章起, ...

  9. linux下MySQL安装登录及操作

    linux下MySQL安装登录及操作 二.安装Mysql 1.下载MySQL的安装文件 安装MySQL需要下面两个文件: MySQL-server-4.0.16-0.i386.rpm MySQL-cl ...

  10. 为什么我选择使用 Blocks(块)

    扯淡:到了新公司接手新框架之后,发现大量的使用Blocks,之前很多时候都是使用代理,突然面对这个陌生的语法,特地科普总结了一番. 什么是Blocks 一句话概括就是,带有局部变量的匿名函数(即不带名 ...