C#实现对邮件的发送
首先是邮件帮助类
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#实现对邮件的发送的更多相关文章
- (转载)JavaWeb学习总结(五十一)——邮件的发送与接收原理
博客源地址:http://www.cnblogs.com/xdp-gacl/p/4209586.html 一. 邮件开发涉及到的一些基本概念 1.1.邮件服务器和电子邮箱 要在Internet上提供电 ...
- zabbix监控系列(4)之zabbix报警邮件无法发送
情况介绍 首先确保邮箱规则没有把报警邮件作为垃圾邮件拉黑了. 服务器断电重启后,发现zabbix报警邮件无法发送,断电之前是好好的,但是重启后不行了,于是查看maillog日志,发现这个错误: Hos ...
- JavaWeb学习总结(五十一)——邮件的发送与接收原理
一. 邮件开发涉及到的一些基本概念 1.1.邮件服务器和电子邮箱 要在Internet上提供电子邮件功能,必须有专门的电子邮件服务器.例如现在Internet很多提供邮件服务的厂商:sina.sohu ...
- PHP 错误与异常 笔记与总结(7)将错误日志以邮件方式发送
当系统发生了很严重的问题,需要立刻发送给管理员.可以通过 error_log() 将错误以邮件形式发送到邮箱. 在 php.ini 中设置: sendmail_from = 472323087@qq. ...
- Activation successful 数据库邮件无法发送
问题现象: 配置好数据库邮件后发送测试邮件. 在数据库邮件发送日志中显示状态为:Activation successful.而邮件是无法收到的. 解决方法: 本次解决是将SQL Server Agen ...
- C#中邮件的发送基本操作
本地配置的邮箱:http://localhost:6080/index.php //邮件的收发需要用到两个类 //1.用来创建一封邮件对象 //1.MailMessage 添加对 usin ...
- 利用工具MailUtils实现邮件的发送,遇到的大坑,高能预警!!
java实现邮件的发送依赖的jar包有两个:mail.jar和activation.jar,我也找到了一个工具包:itcast-tools-1.4.jar,实现原理大家可以查看源码,先放出资源链接 h ...
- NodeJs之邮件(email)发送
NodeJs之邮件(email)发送 一,介绍与需求 1.1,介绍 1,Nodemailer简介 Nodemailer是一个简单易用的Node.js邮件发送插件 github地址 Nodemailer ...
- 使用JavaMail发送邮件-从FTP读取图片并添加到邮件正文发送
业务分析: 最近工作需要,需要从FTP读取图片内容,添加到邮件正文发送.发送邮件正文,添加附件采用Spring的MimeMessageHelper对象来完成,添加图片也将采用MimeMessageHe ...
随机推荐
- Intersecting Lines - POJ 1269(判断平面上两条直线的关系)
分析:有三种关系,共线,平行,还有相交,共线和平行都可以使用叉积来进行判断(其实和斜率一样),相交需要解方程....在纸上比划比划就出来了.... 代码如下: ================== ...
- java 运行项目不放到tomcat下的webapps文件夹下放到自己建的文件夹中的处理办法
你需要在tomcat跟目录下的conf/server.xml中进行配置,配置方法如下: <Context path="/Project" docBase="D:\s ...
- SVN 资源库报错 E175002
遇到一个问题, svn: E175002: OPTIONS request failed on '/' Connection timed out: connect 试了网上好多办法,都没有,最后公司大 ...
- FIREDAC TFDCONNECTION连接MYSQL数据库
FIREDAC TFDCONNECTION连接MYSQL数据库 procedure TfrmDB.ConnectDB;begin FDMoniFlatFileClientLink1.FileName ...
- PHP——四种基本排序算法
分别用冒泡排序法,快速排序法,选择排序法,插入排序法将下面数组中的值按照从小到大的顺序进行排序. $arr(1,43,54,62,21,66,32,78,36,76,39); 1. 冒泡排序 思路分析 ...
- VM网络无法连接--提示ethernet0无法连接到虚拟网络
打开 “编辑->虚拟网络设置"里面,点“恢复默认” 如果还不行 然后 开网络和共享中心 左击 本地连接(若是无线网络,则点击无线网络连接)----属性----共享---- 在:允许其 ...
- MySQL基础 (DML)
DML语句 DML操作是指对数据库中表记录的操作,主要包括表记录的插入(insert).更新(update).删除(delete)和查询(select) 1.插入记录 插入一条 ...
- (C#)与Windows用户账户信息的获取
Console.WriteLine(Environment.UserName); //计算机NetBIOS名称 Console.WriteLine(Environment.MachineName); ...
- cocos2d-x创建的九宫图变白块
用UIImageView 创建的九宫图变白,直接用CCScale9Sprite创建的也是变白,找了半天原来是自己为了调整UI方便,开启了CCSprite边缘画线导致的,在ccConfig.h下 宏CC ...
- PHP运行出现Notice : Use of undefined constant 的完美解决方案
Notice: Use of undefined constant title - assumed 'title' in F:\wamp\www\load_myweb.php on line 22No ...