using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net.Mail;
using System.Net;
using System.IO;
using System.Net.Mime;
using System.Threading;

服务引用

private void Form1_Load(object sender, EventArgs e)
{
comboBoxEx3.SelectedIndex = ;
txtMailFrom.SelectedIndex = ;
txtSmtpServer.SelectedIndex = ;
txtMailTo.SelectedIndex = ;
}
//发送邮件
private void btnSend_Click(object sender, EventArgs e)
{
if (IsValid())
{
if (MessageBox.Show("您确定要发送当前邮件吗?", "询问", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.OK)
{
string serverHost = "smtp." + txtSmtpServer.Text + comboBoxEx3.Text; //smtp 地址
int port = Int32.Parse(numericUpDown1.Value.ToString()); //smtp 密码
string mailFrom = txtMailFromEx.Text + "@" + txtMailFrom.Text; //发信人,必须是提供smtp服务的邮件服务器
string mailPwd = txtformPwd.Text; //密码
string displayName = txtDisplayName.Text; //显示名
string mailSubject = txtMailSubject.Text; //主题
string mailBody = txtMailBody.Text; //正文
string file = string.IsNullOrEmpty(txtPath.Text) ? null : txtPath.Text;
int contactNum = dgvContact.Rows.Count - ; //联系人数量
//循环给每个联系人发送指定数量的邮件
for (int i = ; i < contactNum; i++)
{
string mailTo = dgvContact.Rows[i].Cells[].Value.ToString(); //收件人
//发送指定数量的邮件
for (int j = ; j <= Int32.Parse(txtNum.Text); j++)
{
try
{
EmailHelper.SendEmail(serverHost, port, mailFrom, mailPwd, displayName, mailTo, mailSubject, mailBody, file);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}
}
}
}
//验证输入是否有误
private bool IsValid()
{
//检测附件大小 发件必需小于10M 否则返回 不会执行以下代码
if (txtPath.Text != "")
{
if (!EmailHelper.CheckAttachment(txtPath.Text.Trim()))
{
return false;
}
}
if (txtSmtpServer.Text == "")
{
MessageBox.Show("请输入SMTP服务器名!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return false;
}
if (txtMailFromEx.Text == "")
{
MessageBox.Show("请输入发件人邮箱地址!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return false;
}
if (txtformPwd.Text == "")
{
MessageBox.Show("请输入发件人邮箱密码!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return false;
} if (dgvContact.Rows.Count <= )
{
MessageBox.Show("请添加收件人!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return false;
}
return true;
}
//添加联系人
int i = ; //拼接联系人描述字段,加入联系人框
private void btnAddContact_Click(object sender, EventArgs e)
{
string Contact = txtMailToEx.Text + "@" + txtMailTo.Text;
for (int m = ; m < dgvContact.Rows.Count - ; m++)
{
if (dgvContact.Rows[m].Cells[].Value.ToString().Equals(Contact))
{
MessageBox.Show("已存在!");
return;
}
}
string[] row1 = new string[] { Contact, "Contacter" + i };
dgvContact.Rows.Add(row1);
i++;
}
//移除联系人
private void btnDelContact_Click(object sender, EventArgs e)
{
dgvContact.Rows.RemoveAt(dgvContact.Rows.Count - );
i--;
}
//添加附件
private void btnAttachment_Click(object sender, EventArgs e)
{
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
txtPath.Text = openFileDialog1.FileName;
}
}
// 发送邮件后所处理的函数
private static void SendCompletedCallback(object sender, AsyncCompletedEventArgs e)
{
try
{
if (e.Cancelled)
{
MessageBox.Show("发送已取消!");
}
if (e.Error != null)
{
MessageBox.Show("邮件发送失败!" + "\n" + "技术信息:\n" + e.Error.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);
}
}

                                                          2013-12-19  11:05:05

C# 邮件发送系统的更多相关文章

  1. [工具-008] C#邮件发送系统

    邮件发送系统很多,但是我这边给大家展示下我最近开发的一款邮件发送系统,有参照网上的一个兄弟的界面,进行了升级,界面如下. 从界面上我们可以看到了该邮件系统有如下功能: 1)服务器的设置 2)发件人的设 ...

  2. Smtp邮件发送系统公用代码整理—总结

    1.前言 a.在软件开发中,我们经常能够遇到给用户或者客户推送邮件,推送邮件也分为很多方式,比如:推送一句话,推送一个网页等等.那么在系统开发中我们一般在什么情况下会使用邮件发送呢?下面我简单总结了一 ...

  3. EDM营销算法:python自动批量发邮件

    EDM营销:全称Email Direct Marketing,即电子邮件营销.企业可以通过使用EDM软件向目标客户发送EDM邮件,建立同目标顾客的沟通渠道,向其直接传达相关信息,用来促进销售.EDM软 ...

  4. SpringBoot邮件推送功能

    鞠躬,道歉 抱歉,迟到了近一年的更新,这一年挺忙的,发生了很多事情,就厚脸皮拖更了,抱歉. 现在状态回来了,打算分享下近期学到的东西,这一年期间学到的东西可能会随意更新,其实也就是玩了下C# + un ...

  5. 玩转 SpringBoot2.x 之整合邮件发送

    序 在实际项目中,经常需要用到邮件通知功能.比如,用户通过邮件注册,通过邮件找回密码等:又比如通过邮件发送系统情况,通过邮件发送报表信息等等,实际应用场景很多. 原文地址:https://www.mm ...

  6. 程序开发心理学阅读笔记——第II篇

    作为社会行为的软件开发程序开发组->程序开发团队->程序开发项目1.要判断程序员的某个集体是否构成一支团队,要看其中的成员以何种方式相互协作,以共同开发软件产品.2.健康的团队要始终能够保 ...

  7. Django——发送邮件

    Django--发送邮件 在web应用中,服务器对客户发送邮件来通知用户一些信息,可以使用邮件来实现. Django中提供了邮件接口,使我们可以快捷的建设一个邮件发送系统. 以下是一个简单实例: se ...

  8. Delphi 发送邮件 通过Office Outlook

    Delphi 发送邮件 通过Office Outlook 网上搜到的Delphi邮件发送系统,绝大多数是使用SMTP协议来发送. 但是事实上它们已经过时了,大多数邮件服务器已经屏蔽了Delphi In ...

  9. Web.Config文件配置之限制上传文件大小和时间

    在邮件发送系统或者其他一些传送文件的网站中,用户传送文件的大小是有限制的,因为这样不但可以节省服务器的空间,还可以提高传送文件的速度.下面介绍如何在Web.Config文件中配置限制上传文件大小与时间 ...

随机推荐

  1. java 多线程 CountDownLatch用法

    CountDownLatch,一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待. 主要方法 public CountDownLatch(int count); pu ...

  2. Python中Lambda, filter, reduce and map 的区别

    Lambda, filter, reduce and map Lambda Operator Some like it, others hate it and many are afraid of t ...

  3. emms指令在MMX指令中的作用

    emms指令在MMX指令中的作用 转自:http://blog.csdn.net/psusong/archive/2009/01/08/3737047.aspx MMX和SSE都是INTEL开发的基于 ...

  4. http怎样保持有状态?

    HTTP协议的特点 HTTP协议是无状态的协议,发送的请求不记录用户的状态,不记录用户的信息.就相当于它被访问了2次,不知道是哪两人访问的,或者是一个人访问两次. 正是因为HTTP协议的这一特点,用户 ...

  5. mysql级联删除更新

    首先,目前在产品环境可用的MySQL版本(指4.0.x和4.1.x)中,只有InnoDB引擎才允许使用外键,所以,我们的数据表必须使用InnoDB引擎. 下面,我们先创建以下测试用数据库表: CREA ...

  6. 设计模式之工厂方法模式VS简单工厂方法模式

    名词解释: 简单工厂:这个实在是没什么解释的,就是一个工厂类,然后有一个方法,根据传递的参数可以通过switch(你也可以是if,或者是使用高端的反射 )来进行对象的创建. 工厂方法:定义一个用于创建 ...

  7. jQuery 表格排序插件 Tablesorter 使用

    jQuery 表格排序插件 Tablesorter 使用方式如下: 1.引入头文件(注意一定要把jQuery放在前面): <script src="lib/jquery-1.8.3.m ...

  8. python中的MySQL数据库操作 连接 插入 查询 更新 操作

    MySQL数据库 就数据库而言,连接之后就要对其操作.但是,目前那个名字叫做qiwsirtest的数据仅仅是空架子,没有什么可操作的,要操作它,就必须在里面建立“表”,什么是数据库的表呢?下面摘抄自维 ...

  9. NFC(3)Android上的NFC,开启NFC,3种NDEF数据

    Android对NFC技术的支持 Android2.3.1(API Level = 9)开始支持NFC技术,但Android2.x和Android3.x对NFC的支持非常有限.而从Android4.0 ...

  10. Android用户界面布局(layouts)

    Android用户界面布局(layouts) 备注:view理解为视图 一个布局定义了用户界面的可视结构,比如activity的UI或是APP widget的UI,我们可以用下面两种方式来声明布局: ...