一、发送邮箱方法如下:
private void SendEmail()
{
System.Net.Mail.MailMessage mail = new System.Net.Mail.MailMessage();
//设置邮件的标题
//1)设置邮件标题
mail.Subject =this.TextBox3.Text;
//设置邮件的发件人
//Pass:如果不想显示自己的邮箱地址,这里可以填符合mail格式的任意名称,真正发mail的用户不在这里设定,这个仅仅只做显示用
//2)设定发件人邮箱和显示名称
MailAddress from = new MailAddress("xxxxx@qq.com", "xxxxx");
mail.From = from;
string address = "";
string displayName = "";
//如果永远都只需要发给一个收件人那么就简单了 mail.To.Add("收件人mail");
#region 多个收件人,发一个人也可以用这个方法
string[] mailNames = (TextBox1.Text + ";").Split(';');
foreach (string name in mailNames)
{
if (name != string.Empty)
{
if (name.IndexOf('<') > 0)
{
displayName = name.Substring(0, name.IndexOf('<'));
address = name.Substring(name.IndexOf('<') + 1).Replace('>', ' ');
}
else
{
displayName = string.Empty;
address = name.Substring(name.IndexOf('<') + 1).Replace('>', ' ');
}
mail.To.Add(new MailAddress(address, displayName));
}
}
#endregion
#region 添加附件
if (FileUpload1.HasFile)
{
string fileName = FileUpload1.PostedFile.FileName.Trim();
fileName = Server.MapPath(@"UpFile/") + fileName.Substring(fileName.LastIndexOf("/") + 1);
FileUpload1.PostedFile.SaveAs(fileName); // 将文件保存至服务器*/
mail.Attachments.Add(new Attachment(fileName));
}
#endregion
//设置邮件的抄送收件人
//这个就简单多了,如果不想快点下岗重要文件还是CC一份给领导比较好
if (this.TextBox2.Text!=" ")
{
#region 多个抄送或单个
string[] mailName1s = (“TextBox2.Text”+ ";").Split(';');
foreach (string name in mailName1s)
{
if (name != string.Empty)
{
if (name.IndexOf('<') > 0)
{
displayName = name.Substring(0, name.IndexOf('<'));
address = name.Substring(name.IndexOf('<') + 1).Replace('>', ' ');
}
else
{
displayName = string.Empty;
address = name.Substring(name.IndexOf('<') + 1).Replace('>', ' ');
}
mail.CC.Add(new MailAddress(address, displayName));
}
}
#endregion
}
//4)设置要发送的邮件的正文
mail.Body =this.TextBox4.Text;
//设置邮件的格式
mail.BodyEncoding = System.Text.Encoding.UTF8;
mail.IsBodyHtml = true;
//设置邮件的发送级别
mail.Priority = MailPriority.Normal;
mail.DeliveryNotificationOptions = DeliveryNotificationOptions.OnSuccess;
SmtpClient client = new SmtpClient();
//5)设置用于发送邮件的邮箱服务器的smtp地址;如果是qq,一半就是smtp.qq.com,如果是163,一般就是smtp.163.com......
client.Host = "smtp.qq.com";
//设置用于 SMTP 事务的端口,默认的是 25
//client.Port = 25;
client.UseDefaultCredentials = false;
//6)设置发件人的邮箱的账号和密码
//这里才是真正的邮箱登陆名和密码,比如我的邮箱地址是 hbgx@hotmail, 我的用户名为 hbgx ,我的密码是 xgbh
client.Credentials = new System.Net.NetworkCredential("hbgx", "xgbh");
client.DeliveryMethod = SmtpDeliveryMethod.Network;
//都定义完了,正式发送了,很是简单吧!
client.Send(mail);
}
二、验证码
1)添加〉新建项...〉一般处理程序 (也可以在Web窗体中写)
在 public void ProcessRequest(HttpContext context)
{
}方法中插入
public void ProcessRequest(HttpContext context)
{
var Response = context.Response;
Response.ContentType = "image/jpeg"; //需要输出图象信息 要修改HTTP头
int size = 5;//验证码的长度
string authCode = GetRandomNumberString(size);// 获得验证码字符
//在生成验证码的地方将验证码放到Session中,这样在用的时候就能从Session中取出正确的验证码了
context.Session["AuthCode"] = authCode;
using (Bitmap theBitmap = CreateImage(authCode))// 获得验证码图片
{
theBitmap.Save(Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg);
}
Response.End();
}
2)复制两个方法
private string GetRandomNumberString(int codeCount)
{
string strChoice = "2,3,4,5,6,7,8,9,A,B,C,D,E,F,G,H,J,K,L,M,N,P,Q,R,S,T,U,V,W,X,Y,Z";
string[] strResult = strChoice.Split(new Char[] { ',' });
string strReturn = "";
Random rnd = new Random();
for (int i = 0; i < codeCount; i++)
{
int j = rnd.Next(strResult.Length);//随机数不能大于数组的长度
strReturn = strReturn + strResult[j].ToString();
}
return strReturn;
}
private Bitmap CreateImage(string str_AuthCode)
{
int width = str_AuthCode.Length * 13;
int height = 20;
Random rad = new Random();
Bitmap bmp = new Bitmap(width, height);
using (Graphics grp = Graphics.FromImage(bmp))
{
grp.Clear(Color.White);//填充bmp的背景色
grp.DrawRectangle(new Pen(Color.Red, 1), 0, 0, width - 1, height - 1);//绘制边框
int num = width * height;
for (int i = 0; i < num; i += 3)//在图片的指定坐标上画上有颜色的圆点
{
int x = rad.Next(width);
int y = rad.Next(height);
int r = rad.Next(255);
int g = rad.Next(255);
int b = rad.Next(255);
Color c = Color.FromArgb(r, g, b);
bmp.SetPixel(x, y, c);//在图片的指定坐标上画上有颜色的圆点
}
using (Font f = new Font("宋体", 12, FontStyle.Bold))//定义字体
{
using (Brush br = new SolidBrush(Color.Black))//定义画笔的颜色及字体的颜色
{
for (int i = 0; i < str_AuthCode.Length; i++)
{
string s = str_AuthCode.Substring(i, 1);//单个单个的将字画到图片上
Point p = new Point(i * 12 + rad.Next(3), rad.Next(3) + 1);//字体出现的位置(坐标)
grp.DrawString(s, f, br, p);//绘制字符串
}
}
}
return bmp;//返回
}
}
3)在一般处理程序中Session无法获取到,所以要添加继承
public class Yanzhengma : IHttpHandler, IRequiresSessionState
4)在页面上显示
在页面上插入一个图片空间,src=" "写成以上代码所在的web窗体,当前的是一般处理程序的窗体。src="xxxx.ashx"
5)实现点击图片换一张验证码,即使页面刷新,写一个js代码,重新使图片控件的src为以上地址。
方法如下:
<script type="text/javascript">
function shuaxin() {
document.getElementById('img1').setAttribute('src', 'Yanzhengma.ashx);
}
</script>
但是仅以上代码无法实现,因为浏览器存在记忆问题,当前已经打开无法再次刷新。所以我们可以根据参数的不同来解决问题
以上方法即为:
<script type="text/javascript">
function shuaxin() {
document.getElementById('img1').setAttribute('src', 'Yanzhengma.ashx?id='+Math.random());
}
</script>