C#通用邮件发送类分享

此类的功能包括发送邮件,邮箱格式是否正确,和在不发送邮件的情况下判断邮箱用户名和密码是否正确,鉴于POP检查邮箱用户名和密码出现错误情况返回结果的延迟,用异步线程解决此问题,见代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net.Mail;
using System.Web;
using System.Net;
using System.Text.RegularExpressions;
using System.Net.Sockets;
using System.IO;
using System.Collections;
using System.Threading;

namespace Com.Web
{
  /// <summary>
  /// 邮箱类
  /// </summary>
  public class CheckEmailInfo
  {
    public string server { get; set; }//服务器
    public string user { get; set; }//用户名
    public string pwd { get; set; }//密码
  }

  /// <summary>
  /// SendEmail通用类,通过smtp服务器发送邮件
  /// </summary>
  public class SendEmail
  {
    public Dictionary<string, string> smtpServer;
    public Dictionary<string, string> popServer;

    public SendEmail()
    {
      IniSmtpServer();
      IniPopServer();
    }

    /// <summary>
    /// 初始化常用smtpServer,用于绑定下拉选择菜单
    /// </summary>
    private void IniSmtpServer()
    {
      smtpServer = new Dictionary<string, string>();
      smtpServer.Add("网易163邮箱", "smtp.163.com");
      smtpServer.Add("网易vip.163邮箱", "smtp.vip.163.com");
      smtpServer.Add("网易126邮箱", "smtp.126.com");
      smtpServer.Add("网易188邮箱", "smtp.188.com");
      smtpServer.Add("新浪邮箱", "smtp.sina.com");
      smtpServer.Add("雅虎邮箱", "smtp.mail.yahoo.com");
      smtpServer.Add("搜狐邮箱", "smtp.sohu.com");
      smtpServer.Add("TOM邮箱", "smtp.tom.com");
      smtpServer.Add("Gmail邮箱", "smtp.gmail.com");
      smtpServer.Add("QQ邮箱", "smtp.qq.com");
      smtpServer.Add("QQ企业邮箱", "smtp.biz.mail.qq.com");
      smtpServer.Add("139邮箱", "smtp.139.com");
      smtpServer.Add("263邮箱", "smtp.263.com");
    }

    /// <summary>
    /// 初始化常用popServer,用于绑定下拉选择菜单
    /// </summary>
    private void IniPopServer()
    {
      popServer = new Dictionary<string, string>();
      popServer.Add("网易163邮箱", "pop3.163.com");
      popServer.Add("网易vip.163邮箱", "pop3.vip.163.com");
      popServer.Add("网易126邮箱", "pop3.126.com");
      popServer.Add("网易188邮箱", "pop3.188.com");
      popServer.Add("新浪邮箱", "pop3.sina.com");
      popServer.Add("雅虎邮箱", "pop3.mail.yahoo.com");
      popServer.Add("搜狐邮箱", "pop3.sohu.com");
      popServer.Add("TOM邮箱", "pop.tom.com");
      popServer.Add("Gmail邮箱", "pop.gmail.com");
      popServer.Add("QQ邮箱", "pop.qq.com");
      popServer.Add("QQ企业邮箱", "pop.biz.mail.qq.com");
      popServer.Add("139邮箱", "pop.139.com");
      popServer.Add("263邮箱", "pop.263.com");
    }

    /// <summary>
    /// 发送邮件功能
    /// </summary>
    /// <param name="fromEmail">登录邮箱</param>
    /// <param name="password">登录密码</param>
    /// <param name="user">邮件昵称</param>
    /// <param name="title">邮件标题</param>
    /// <param name="toEmail">邮件地址</param>
    /// <param name="email">邮件内容</param>
    /// <param name="smtpServer">smtp服务器</param>
    public bool SendMessage(string fromEmail,string password, string user, string title, string toEmail, string email,string smtpServer)
    {
      try
      {
        SmtpClient smtp = new SmtpClient(); //实例化一个SmtpClient
        smtp.DeliveryMethod = SmtpDeliveryMethod.Network; //将smtp的出站方式设为 Network
        smtp.EnableSsl = false;//smtp服务器是否启用SSL加密
        smtp.Host = smtpServer;//指定 smtp 服务器
        smtp.Credentials = new NetworkCredential(fromEmail, password);
        MailMessage mm = new MailMessage(); //实例化一个邮件类
        mm.Priority = MailPriority.High; //邮件的优先级,分为 Low, Normal, High,通常用 Normal即可
        mm.From = new MailAddress(fromEmail, user, Encoding.GetEncoding(936));
        mm.CC.Add(new MailAddress(toEmail, "", Encoding.GetEncoding(936)));
        mm.Subject = title; //邮件标题
        mm.SubjectEncoding = Encoding.GetEncoding(936);
        mm.IsBodyHtml = true; //邮件正文是否是HTML格式mm.BodyEncoding = Encoding.GetEncoding(936);
        mm.Body = email;
        smtp.Send(mm);
        return true;
      }
      catch
      {
        return false;
      }
    }

    /// <summary>
    /// 检查邮箱是否正确的委托
    /// </summary>
    delegate bool MyDelegate(object checkEmailInfo);

    /// <summary>
    /// 利用异步方式检查邮箱账号和密码是否正确
    /// </summary>
    public bool CheckUser(string server, string user, string pwd)
    {
      MyDelegate myDelegate = new MyDelegate(CheckUser);
      CheckEmailInfo checkEmailInfo = new CheckEmailInfo();
      checkEmailInfo.server = server;
      checkEmailInfo.user = user;
      checkEmailInfo.pwd = pwd;
      IAsyncResult result = myDelegate.BeginInvoke(checkEmailInfo, null, null);
      Thread.Sleep(1000);//主线程1秒后检查异步线程是否运行完毕
      if (result.IsCompleted)
      { return myDelegate.EndInvoke(result); }//如果错误的邮箱和密码,函数将会运行很慢
      else
      { return false; }
    }

    /// <summary>
    /// 判断用户邮箱账号和密码是否正确
    /// </summary>
    /// <param name="server">PopServer地址</param>
    /// <param name="user">用户名</param>
    /// <param name="pwd">密码</param>
    private bool CheckUser(object checkEmailInfo)
    {
      CheckEmailInfo checkInfo = (CheckEmailInfo)checkEmailInfo;
      TcpClient sender = new TcpClient(checkInfo.server, 110);//pop协议使用TCP的110端口
      Byte[] outbytes;
      NetworkStream ns;
      StreamReader sr;
      string input;
      string readuser = string.Empty;
      string readpwd = string.Empty;
      try
      {
        ns = sender.GetStream();
        sr = new StreamReader(ns);
        sr.ReadLine();
        //检查用户名和密码
        input = "user " + checkInfo.user+ "\r\n";
        outbytes = Encoding.ASCII.GetBytes(input.ToCharArray());
        ns.Write(outbytes, 0, outbytes.Length);
        readuser = sr.ReadLine();
        input = "pass " + checkInfo.pwd + "\r\n";
        outbytes =Encoding.ASCII.GetBytes(input.ToCharArray());
        ns.Write(outbytes, 0, outbytes.Length);
        readpwd = sr.ReadLine();
        if (readuser.Substring(0, 3) == "+OK" && readpwd.Substring(0, 3) == "+OK")
        { return true; }
        else
        { return false; }
      }
      catch
      {
        return false;
      }
    }

    /// <summary>
    /// 判断邮箱格式是否正确
    /// </summary>
    /// <param name="email">邮箱地址</param>
    public bool IsEmail(string email)
    {
      string paterner = @"\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*";
      if (!Regex.IsMatch(email, paterner))
      { return false;}
      else
      {return true;}
    }
  }
}
(0)

相关推荐

  • C#使用CDO发送邮件的方法

    本文实例讲述了C#使用CDO发送邮件的方法.分享给大家供大家参考.具体分析如下: CDO是一个名为Microsoft CDO For Exchange 2000 Library的COM组件,我们可以用它来连接SMTP Server,使用用户名/密码验证发送邮件. /** * C# Programmers Pocket Consultant * Author: Gregory S. MacBeth * Email: gmacbeth@comporium.net * Create Date: Jun

  • C#实现SMTP邮件发送程序实例

    通常来说邮件发送功能在网站应用程序中经常会用到,包括大家经常看到的博客,在添加评论后,系统会自动发送邮件通知到我邮箱的,把系统发送邮件的功能整理了下,本文展示了一个客户端Demo,希望对有需要的朋友有所帮助.运行效果如下图所示: 核心代码如下: 复制代码 代码如下: using System; using System.Net; using System.Net.Mail; using System.Text; namespace HC.Email {     /// <summary>   

  • C#编写发送邮件组件

    在MailSetting里的配置好邮件服务器,然后MailEntity里配置好要发送的邮件主体,最后使用MailServer里的方法Send发送邮件 MailEntity.cs using System; using System.Collections.Generic; using System.Linq; using System.Web; namespace AutoOutTicket.Mail { public class MailEntity { public string from

  • C#实现发送邮件的三种方法

    本文实例讲述了C#实现发送邮件的三种方法.分享给大家供大家参考.具体方法分析如下: 一.问题: 最近公司由于一个R&I项目的需要,用户要求在购买产品或出货等一些环节,需要发送邮件提醒或者说每周一让系统自动采集数据发送一封E-mail,因此我也就找来相关资料,写了一个Demo分享给大家,大家共同学习学习. 二.实现代码: 通过.Net FrameWork 2.0下提供的"System.Net.Mail"可以轻松的实现,本文列举了3种途径来发送: 1.通过Localhost: 2.

  • C#实现的自定义邮件发送类完整实例(支持多人多附件)

    本文实例讲述了C#实现的自定义邮件发送类.分享给大家供大家参考,具体如下: using System; using System.Collections.Generic; using System.Text; using System.Net; using System.Net.Mail; using System.Net.Mime; namespace ConsoleApplication1 { /// <summary> /// 发送邮件类 的摘要说明 /// </summary&g

  • C#实现按数据库邮件列表发送邮件的方法

    本文实例讲述了C#实现按数据库邮件列表发送邮件的方法.分享给大家供大家参考.具体实现方法如下: using System; using System.Net; using System.Net.Mail; using System.Text; using System.Threading; delegate void sendDelegate(string from, string to, string subject, string body, string host, int port, s

  • C#编程实现发送邮件的方法(可添加附件)

    本文实例讲述了C#编程实现发送邮件的方法.分享给大家供大家参考,具体如下: 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; namespace WindowsFo

  • C#发送内置图片html格式邮件的方法

    本文实例讲述了C#发送内置图片html格式邮件的方法.分享给大家供大家参考.具体如下: 下面的代码用于发送html格式的邮件,并且可以将图片附加到邮件一起发出 MailMessage m = new MailMessage(); m.From = new MailAddress("ir@jb51.net", "Raja Item"); m.To.Add(new MailAddress("su@jb51.net", "Sekaran Um

  • C# 邮件发送和接收实现代码

    邮件发送 方法一:使用System.Web.Mail命名空间(此方法我测试没有成功过)  复制代码 代码如下: #region 发送邮件:此方法失败 protected void SendFailed() { System.Web.Mail.MailMessage mail = new System.Web.Mail.MailMessage(); mail.From = "test@ gmail.com"; mail.To = " test@ gmail.com "

  • C#通用邮件发送类分享

    此类的功能包括发送邮件,邮箱格式是否正确,和在不发送邮件的情况下判断邮箱用户名和密码是否正确,鉴于POP检查邮箱用户名和密码出现错误情况返回结果的延迟,用异步线程解决此问题,见代码: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Net.Mail; using System.Web; using System.Net; using System.

  • PHP实现发送邮件的方法(基于简单邮件发送类)

    本文实例讲述了PHP实现发送邮件的方法.分享给大家供大家参考,具体如下: 邮件发送类 <?php /*邮件发送类 *功能:使用smtp服务器发送邮件 */ class smtp { /* 全局变量 */ var $smtp_port; var $time_out; var $host_name; var $log_file; var $relay_host; var $debug; var $auth; var $user; var $pass; var $sock; /* 构造函数 */ fu

  • PHP实现支持SSL连接的SMTP邮件发送类

    本文实例讲述了PHP实现支持SSL连接的SMTP邮件发送类.分享给大家供大家参考.具体如下: 该实例代码测试过了gmail和QQ邮箱的SMTP.具体代码如下: 复制代码 代码如下: <?php /** * 邮件发送类 * 支持发送纯文本邮件和HTML格式的邮件,可以多收件人,多抄送,多秘密抄送,带附件(单个或多个附件),支持到服务器的ssl连接 * 需要的php扩展:sockets.Fileinfo和openssl. * 编码格式是UTF-8,传输编码格式是base64 * @example *

  • CI框架简单邮件发送类实例

    本文实例讲述了CI框架简单邮件发送类.分享给大家供大家参考,具体如下: ci框架绝对是php初学中想要的东西,它能极大的缩短你的代码量! 下面看看我的发送邮件的简单演示: function email() { $this->load->library('email'); $config['protocol'] = 'smtp'; $config['smtp_host'] = 'smtp.163.com'; $config['smtp_user'] = 'jb51@163.com';//这里写上

  • PHP邮件发送类PHPMailer用法实例详解

    本文实例讲述了PHP邮件发送类PHPMailer用法,并详细讲述了其具体的操作步骤.分享给大家供大家参考.具体步骤如下: 1.在服务器安装 sendmail sudo apt-get install sendmail 2.启动 sendmail sudo /etc/init.d/sendmail start 3.修改 php.ini [mail function] SMTP = localhost smtp_port = 25 sendmail_from = me@example.com 4.F

  • 使用PHPMailer实现邮件发送代码分享

    发送邮件是常用的功能,LZ今天在项目中也碰到了,特此分享一下. 首先,去下载PHPMailer 1.https://github.com/dwqs/PHPMailer 2.http://download.csdn.net/detail/u011043843/8063583 下载之后,将文件解压到项目目录的对应位置,将class.phpmailer.php和class.smtp.php引入项目中,看代码:(解压的文件不要删除,否则不行) <?php // 必要导入 require("clas

  • winform开发使用通用多线程基类分享(以队列形式)

    复制代码 代码如下: /// <summary>    /// 队列多线程,T 代表处理的单个类型~    /// </summary>    /// <typeparam name="T"></typeparam>    public abstract class QueueThreadBase<T>    {        #region 变量&属性        /// <summary>      

  • Spring Boot利用Java Mail实现邮件发送

    本文实例为大家分享了Spring Boot利用Java Mail实现邮件发送的具体代码,供大家参考,具体内容如下 实现邮件发送的方法有很多,这里只是简单记录一个demo实现 1. 引入maven依赖 <!-- https://mvnrepository.com/artifact/org.springframework/spring-context-support --> <dependency> <groupId>org.springframework</grou

  • Java实现简单邮件发送

    JAVA MAIL是利用现有的邮件账户发送邮件的工具,比如说,我在网易注册一个邮箱账户,通过JAVA Mail的操控,我可以不亲自登录网易邮箱,让程序自动的使用网易邮箱发送邮件.这一机制被广泛的用在注册激活和垃圾邮件的发送等方面. Java邮件发送的大致过程是这样的: 1.构建一个继承自javax.mail.Authenticator的具体类,并重写里面的getPasswordAuthentication()方法.此类是用作登录校验的,以确保你对该邮箱有发送邮件的权利. 2.构建一个proper

随机推荐