发送邮件的方法

#region --------------------发送邮件-----------------------






    #region --------------------发送邮件,测试成功过-----------------------
    /// <summary>
    /// 发送邮件
    /// </summary>
    ///<param name="to">收件人邮件地址</param> 
    /// <param name="from">发件人邮件地址</param> 
    /// <param name="subject">邮件主题</param> 
    /// <param name="body">邮件内容</param> 
    /// <param name="username">登录smtp主机时用到的用户名,注意是邮件地址'@'以前的部分</param> 
    /// <param name="password">登录smtp主机时用到的用户密码</param> 
    /// <param name="server">发送邮件用到的smtp主机</param> 
    public void Send(string from, string[] to, string subject, string body, string server, string username, string pwd)
    {
        try
        {
            foreach (string var in to)
            {
                MailAddress mailform = new MailAddress(from);
                MailAddress mailto = new MailAddress(var);
                MailMessage mail = new MailMessage(mailform, mailto);


                mail.IsBodyHtml = true;
                mail.Body = body;
                mail.Subject = subject;


                SmtpClient sclient = new SmtpClient(server);
                sclient.Credentials = new NetworkCredential(username, pwd);
                sclient.Send(mail);
            }
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }
    #endregion






    /// <summary>
    /// smtp方式发邮件
    /// </summary>
    /// <param name="m_from">发件人</param>
    /// <param name="m_to">收件人多个以,分开</param>
    /// <param name="m_cc_to">抄送人</param>
    /// <param name="m_subject">邮件标题</param>
    /// <param name="m_body">邮件内容</param>
    public void SendMail(string m_from, string m_to, string m_cc_to, string m_subject, string m_body)
    {
        SmtpClient _smtpClient = new SmtpClient();
        _smtpClient.Host = host;
        _smtpClient.Credentials = new NetworkCredential(userName, password);
        MailMessage message = new MailMessage();
        message.From = new MailAddress(m_from);
        try
        {
            string[] m_tos = m_to.Split(',');
            for (int i = 0; i < m_tos.Length; i++)
            {
                message.To.Add(new MailAddress(m_tos[i])); // the email you want to send email to
            }
            if (!string.IsNullOrEmpty(m_cc_to))
            {
                string[] m_ccs = m_cc_to.Split(',');
                for (int i = 0; i < m_ccs.Length; i++)
                {
                    message.CC.Add(new MailAddress(m_ccs[i])); // the email you want to CC email to
                }
            }
            message.Subject = m_subject;
            message.IsBodyHtml = true;
            message.BodyEncoding = System.Text.Encoding.UTF8;
            message.Body = m_body;
            message.Priority = MailPriority.High;


            //object userState = message; 
            _smtpClient.Send(message);
        }
        catch
        {


        }
    }










    /// <summary>
    /// 发邮件
    /// </summary>
    /// <param name="m_from">来自</param>
    /// <param name="m_to">发送到</param>
    /// <param name="m_title">标题</param>
    /// <param name="m_body">内容</param>
    /// <returns></returns>
    public static void SendMail(string m_from, string m_to, string m_title, string m_body)
    {
        string[] sIpList = DnsRecord.GetMXRecords(m_to.Substring(m_to.IndexOf("@") + 1));
        if (sIpList.Length < 1)
        {
            throw new Exception("找不到邮箱的mx记录");
        }
        string MxHost = System.Net.Dns.GetHostAddresses(sIpList[new Random().Next(0, sIpList.Length)])[0].ToString();


        MailContent EMail = new MailContent();
        EMail.toAddress = m_to;
        EMail.toNickname = m_to;
        EMail.fromAddress = m_from;
        EMail.fromNickname = m_from;
        EMail.title = m_title;
        EMail.body = m_body;
        EMail.attachmentList = new string[0];


        #region 邮件格式化为标准的内容行
        string splitline = "======NoSmtpSender_7Aurora_lizhiping======";
        string MailHeader = string.Format("charset: utf-8;\r\nDate: {0}\r\n", DateTime.Now.ToString("R", System.Globalization.DateTimeFormatInfo.InvariantInfo))
            + string.Format("From: \"{0}\" <{1}>\r\n", EMail.fromAddress, EMail.fromAddress)
            + string.Format("To: \"{0}\" <{1}>\r\n", EMail.toAddress, EMail.toAddress)
            + string.Format("Subject: {0}\r\n", EMail.title)
            + string.Format("X-mailer: NoSmtpSender 1,0,0,0 [{0}]\r\n", "7Aurora")
            + string.Format("MIME-Version: 1.0\r\n")
            + string.Format("Content-Type: multipart/alternative;\r\n\tBoundary=\"{0}\"\r\n", splitline)
            + string.Format("Content-Transfer-Encoding: 8Bit\r\n")
            + string.Format("\r\nThis is a multi-part message in MIME format.\r\n");


        string MailContent = string.Format("\r\n--{0}\r\n", splitline)
            + string.Format("Content-Type: {0};\r\n\tCharset={1}\r\n", "text/html", "gb2312")
            + string.Format("Content-Transfer-Encoding: {0}\r\n", "base64")
            + string.Format("\r\n{0}\r\n", Convert.ToBase64String(Encoding.Default.GetBytes(EMail.body)));


        string MailAttachment = "";
        for (int i = 0; i < EMail.attachmentList.Length; i++)
        {
            MailAttachment += string.Format("\r\n--{0}\r\n", splitline)
                + string.Format("Content-Type:application/octet-stream;\r\n\tName=\"{0}\"\r\n", Path.GetFileName(EMail.attachmentList[i]))
                + string.Format("Content-Transfer-Encoding: {0}\r\n", "base64")
                + string.Format("Content-Disposition: attachment;\r\n\tfilename=\"{0}\"\r\n", Path.GetFileName(EMail.attachmentList[i]))
                + string.Format("\r\n{0}\r\n", Convert.ToBase64String(File.ReadAllBytes(EMail.attachmentList[i])));
        }
        string MailFooter = string.Format("\r\n--{0}--\r\n", splitline)
            + "\r\n.\r\n";
        #endregion


        TcpClient sock = new TcpClient();
        NetworkStream netStream;
        sock.NoDelay = true; //不使用延时算法,以加快小数据包的发送。 
        sock.ReceiveTimeout = 10000; //接收超时为10秒。 
        sock.Connect(MxHost, 25);
        netStream = sock.GetStream();
        string recvString = dataReceive(netStream);


        #region 发送邮件过程
        if (!recvString.StartsWith("220"))
        {
            throw new Exception("连接邮箱服务器失败");
        }


        //欢迎命令
        string cmd = string.Format("HELO {0}\r\n", EMail.toAddress);//mailto NickName
        dataSend(netStream, cmd);
        recvString = dataReceive(netStream);
        if (!recvString.StartsWith("250"))
        {
            throw new Exception("发送欢迎命令失败");
        }


        //指定邮件来源命令
        cmd = string.Format("MAIL FROM: <{0}>\r\n", EMail.fromAddress);
        dataSend(netStream, cmd);
        recvString = dataReceive(netStream);
        if (!recvString.StartsWith("250"))
        {
            throw new Exception("指定邮件来源命令失败");
        }


        //指定邮件接收者命令
        string[] mailList = EMail.toAddress.Split(',');
        for (int i = 0; i < mailList.Length; i++)
        {
            cmd = string.Format("RCPT TO: <{0}>\r\n", mailList[i]);
            dataSend(netStream, cmd);
            recvString = dataReceive(netStream);
            if (!recvString.StartsWith("250"))
            {
                throw new Exception("指定邮件接收者" + mailList[i] + "命令失败");
            }
        }


        //发送邮件内容命令,返回354表示开始接受邮件内容
        cmd = "Data\r\n";
        dataSend(netStream, cmd);
        recvString = dataReceive(netStream);
        if (!recvString.StartsWith("354"))
        {
            throw new Exception("发送邮件内容命令失败");
        }


        //发送邮件内容数据
        cmd = MailHeader + MailContent + MailAttachment + MailFooter;
        dataSend(netStream, cmd);
        recvString = dataReceive(netStream);
        if (!recvString.StartsWith("250"))
        {
            throw new Exception("发送邮件内容数据失败");
        }


        //端口与邮件服务器的连接命令
        cmd = "Quit\r\n";
        dataSend(netStream, cmd);
        recvString = dataReceive(netStream);
        if (!recvString.StartsWith("221"))
        {
            throw new Exception("端口与邮件服务器的连接命令失败");
        }
        #endregion


        netStream.Close();
        sock.Close();
    }






    #endregion



看注释大家就知道,第一个方法是测试成功过。后面2个方法我不记得是否成功过了,有待大家去验证。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值