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. POJ2586Y2K Accounting Bug

    http://poj.org/problem?id=2586 Description Accounting for Computer Machinists (ACM) has sufferred fr ...

  2. 00 - Oracle体系结构课程内容

    1.导论 自己把本书内容分为几个部分, (1)体系结构,(2)并发控制和事务,(3)物理存储, (4)其他. 嗯,拿到一个新的数据库,我们也要从这几个方面去认识它.   2.体系结构 3.Oracle ...

  3. 李洪强iOS开发之OC语言description方法和sel

    OC语言description方法和sel 一.description方法 Description方法包括类方法和对象方法.(NSObject类所包含) (一)基本知识 -description(对象 ...

  4. ubuntu 映射网络驱动器到本地

    公司办公都是在ubuntu服务器上,所以每每拷贝修改文件都要ftp之类的,实在不方便. 索性将服务器挂载到自己本地目录下. 服务器端参考其他samba安装和配置.这里只是说下本地自动挂载方法. 一.首 ...

  5. QTP之对测试用例的自动化过程的分解

    第一部分:自动化一个测试用例 当你要开始自动化一个测试用例的时候,有一些重要的事情需要完成.当你完成所有这些事情的时候,测试脚本的自动化也随之完成. 在这里,我们将首先在大部分的自动化测试用例里找出所 ...

  6. python 批量更换图片格式脚本

    问题:将某文件下的所有jpg的图片更换为png的图片 简单的实现: # -*- coding:utf-8 -*- from os.path import splitext import glob fr ...

  7. 网站常见问题及解决方法(div/css)

    18.<a> 在IE6,7 下面重新定义宽和高的代码:{  display:block; display:-moz-inline-stack; display:inline-block;  ...

  8. Qt之QTableView添加复选框(QAbstractTableModel)

    简述 使用QTableView,经常会遇到复选框,要实现一个好的复选框,除了常规的功能外,还应注意以下几点: 三态:不选/半选/全选 自定义风格(样式) 下面我们介绍一下常见的实现方式: 编辑委托. ...

  9. Firefox和Chrome浏览器导出书签

    Chrome浏览器: 或者直接在地址栏中输入:“chrome://bookmarks/#1”也可以 Firefox浏览器:

  10. 注解框架ButterKnife

    将插件升级到1.3后支持Android Studio1.3 + ButterKnife7 如何使用 有所使用的布局 ID 上点击右键 (例如上图中的 R.layout.activity_setting ...