⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 smtpmail.cs

📁 smtp收邮件
💻 CS
📖 第 1 页 / 共 2 页
字号:
using System;
using System.Text;
using System.IO;
using System.Net;
using System.Net.Sockets;
using System.Collections;
namespace devApp.MailClass
{
    class smtpmail
    {

        /*  
        Create By lion  
        2002-11-20 01:44  
        Copyright (C) 2001,2002 www.LionSky.Net. All rights reserved. 
        Web: http://www.Lionsky.net ;;
        Email: lion-a@sohu.com 
        Support .Net Framework Beta 2  
        */
        public class ESmtpMail
        {
            private string enter = "\r\n";
            /// <summary> 
            /// 设定语言代码,默认设定为GB2312,如不需要可设置为"" 
            /// </summary> 
            public string Charset = "GB2312";
            /// <summary> 
            /// 发件人地址 
            /// </summary> 
            public string From = "";
            /// <summary> 
            /// 发件人姓名 
            /// </summary> 
            public string FromName = "";
            /// <summary> 
            /// 回复邮件地址 
            /// </summary> 
            //public string ReplyTo=""; 
            /// <summary> 
            /// 收件人姓名 
            /// </summary>    
            public string RecipientName = "";
            /// <summary> 
            /// 收件人列表 
            /// </summary> 
            private Hashtable Recipient = new Hashtable();
            /// <summary> 
            /// 邮件服务器域名 
            /// </summary>    
            private string mailserver = "";
            /// <summary> 
            /// 邮件服务器端口号 
            /// </summary>    
            private int mailserverport = 25;
            /// <summary> 
            /// SMTP认证时使用的用户名 
            /// </summary> 
            private string username = "";
            /// <summary> 
            /// SMTP认证时使用的密码 
            /// </summary> 
            private string password = "";
            /// <summary> 
            /// 是否需要SMTP验证 
            /// </summary>       
            private bool ESmtp = false;
            /// <summary> 
            /// 是否Html邮件 
            /// </summary>       
            public bool Html = false;
            /// <summary> 
            /// 邮件附件列表 
            /// </summary> 
            private System.Collections.ArrayList Attachments;
            /// <summary> 
            /// 邮件发送优先级,可设置为"High","Normal","Low"或"1","3","5" 
            /// </summary> 
            private string priority = "Normal";
            /// <summary> 
            /// 邮件主题 
            /// </summary>       
            public string Subject = "";
            /// <summary> 
            /// 邮件正文 
            /// </summary>       
            public string Body = "";
            /// <summary> 
            /// 收件人数量 
            /// </summary> 
            private int RecipientNum = 0;
            /// <summary> 
            /// 最多收件人数量 
            /// </summary> 
            private int recipientmaxnum = 1;
            /// <summary> 
            /// 密件收件人数量 
            /// </summary> 
            private string cc;
            //private int RecipientBCCNum=0; 
            /// <summary> 
            /// 错误消息反馈 
            /// </summary> 
            private string errmsg;
            /// <summary> 
            /// TcpClient对象,用于连接服务器 
            /// </summary>    
            private TcpClient tc;
            /// <summary> 
            /// NetworkStream对象 
            /// </summary>    
            private NetworkStream ns;
            /// <summary> 
            /// SMTP错误代码哈希表 
            /// </summary> 
            private Hashtable ErrCodeHT = new Hashtable();
            /// <summary> 
            /// SMTP正确代码哈希表 
            /// </summary> 
            private Hashtable RightCodeHT = new Hashtable();
            public ESmtpMail()
            {
                Attachments = new System.Collections.ArrayList();
            }
            /// <summary> 
            /// 邮件服务器域名和验证信息 
            /// 形如:"user:paswww.server.com:25",也可省略次要信息。如"user:paswww.server.com"www.server.com" 
            /// </summary>    
            public string MailDomain
            {
                set
                {
                    mailserver = value;
                }
            }

            /// <summary> 
            /// 邮件服务器端口号 
            /// </summary>    
            public int MailDomainPort
            {
                set
                {
                    mailserverport = value;
                }
            }

            /// <summary> 
            /// SMTP认证时使用的用户名 
            /// </summary> 
            public string MailServerUserName
            {
                set
                {
                    if (value.Trim() != "")
                    {
                        username = value.Trim();
                        ESmtp = true;
                    }
                    else
                    {
                        username = "";
                        ESmtp = false;
                    }
                }
            }
            /// <summary> 
            /// SMTP认证时使用的密码 
            /// </summary> 
            public string MailServerPassWord
            {
                set
                {
                    password = value;
                }
            }
            /// <summary> 
            /// 邮件发送优先级,可设置为"High","Normal","Low"或"1","3","5" 
            /// </summary> 
            public string Priority
            {
                set
                {
                    switch (value.ToLower())
                    {
                        case "high":
                            priority = "High";
                            break;
                        case "1":
                            priority = "High";
                            break;
                        case "normal":
                            priority = "Normal";
                            break;
                        case "3":
                            priority = "Normal";
                            break;
                        case "low":
                            priority = "Low";
                            break;
                        case "5":
                            priority = "Low";
                            break;
                        default:
                            priority = "Normal";
                            break;
                    }
                }
            }

            /// <summary> 
            /// 错误消息反馈 
            /// </summary>       
            public string ErrorMessage
            {
                get
                {
                    return errmsg;
                }
            }

            /// <summary> 
            /// 服务器交互记录 
            /// </summary> 
            private string logs = "";
            /// <summary> 
            /// 服务器交互记录,如发现本组件不能使用的SMTP服务器,请将出错时的Logs发给我(lion-a@sohu.com),我将尽快查明原因。 
            /// </summary> 
            public string Logs
            {
                get
                {
                    return logs;
                }
            }


            /// <summary> 
            /// SMTP回应代码哈希表 
            /// </summary> 
            private void SMTPCodeAdd()
            {
                ErrCodeHT.Add("500", "邮箱地址错误");
                ErrCodeHT.Add("501", "参数格式错误");
                ErrCodeHT.Add("502", "命令不可实现");
                ErrCodeHT.Add("503", "服务器需要SMTP验证");
                ErrCodeHT.Add("504", "命令参数不可实现");
                ErrCodeHT.Add("421", "服务未就绪,关闭传输信道");
                ErrCodeHT.Add("450", "要求的邮件操作未完成,邮箱不可用(例如,邮箱忙)");
                ErrCodeHT.Add("550", "要求的邮件操作未完成,邮箱不可用(例如,邮箱未找到,或不可访问)");
                ErrCodeHT.Add("451", "放弃要求的操作;处理过程中出错");
                ErrCodeHT.Add("551", "用户非本地,请尝试<forward-path>");
                ErrCodeHT.Add("452", "系统存储不足,要求的操作未执行");
                ErrCodeHT.Add("552", "过量的存储分配,要求的操作未执行");
                ErrCodeHT.Add("553", "邮箱名不可用,要求的操作未执行(例如邮箱格式错误)");
                ErrCodeHT.Add("432", "需要一个密码转换");
                ErrCodeHT.Add("534", "认证机制过于简单");
                ErrCodeHT.Add("538", "当前请求的认证机制需要加密");
                ErrCodeHT.Add("454", "临时认证失败");
                ErrCodeHT.Add("530", "需要认证");
                RightCodeHT.Add("220", "服务就绪");
                RightCodeHT.Add("250", "要求的邮件操作完成");
                RightCodeHT.Add("251", "用户非本地,将转发向<forward-path>");
                RightCodeHT.Add("354", "开始邮件输入,以<enter>.<enter>结束");
                RightCodeHT.Add("221", "服务关闭传输信道");
                RightCodeHT.Add("334", "服务器响应验证Base64字符串");
                RightCodeHT.Add("235", "验证成功");
            }

            /// <summary> 
            /// 将字符串编码为Base64字符串 
            /// </summary> 
            /// <param name="estr">要编码的字符串</param> 
            private string Base64Encode(string str)
            {
                byte[] barray;
                barray = Encoding.Default.GetBytes(str);
                return Convert.ToBase64String(barray);
            }

            /// <summary> 
            /// 将Base64字符串解码为普通字符串 
            /// </summary> 
            /// <param name="dstr">要解码的字符串</param> 
            private string Base64Decode(string str)
            {
                byte[] barray;
                barray = Convert.FromBase64String(str);
                return Encoding.Default.GetString(barray, 0, barray.Length);
            }
            /// <summary> 
            /// 得到上传附件的文件流 
            /// </summary> 
            /// <param name="FilePath">附件的绝对路径</param> 
            private string GetStream(string FilePath)
            {
                //建立文件流对象 
                System.IO.FileStream FileStr = new System.IO.FileStream(FilePath, System.IO.FileMode.Open);
                byte[] by = new byte[System.Convert.ToInt32(FileStr.Length)];
                FileStr.Read(by, 0, by.Length);
                FileStr.Close();
                return (System.Convert.ToBase64String(by));
            }

            /// <summary> 
            /// 添加邮件附件 
            /// </summary> 
            /// <param name="path">附件绝对路径</param> 
            public void AddAttachment(string path)
            {
                Attachments.Add(path);
            }


            /// <summary> 
            /// 添加一个收件人 
            /// </summary>    
            /// <param name="str">收件人地址</param> 
            public bool AddRecipient(string str)
            {
                str = str.Trim();
                if (str == null || str == "" || str.IndexOf("@") == -1)
                    return true;
                if (RecipientNum < recipientmaxnum)
                {
                    Recipient.Add(RecipientNum, str);
                    RecipientNum++;
                    return true;
                }
                else
                {
                    errmsg += "收件人过多";
                    return false;
                }
            }

            /// <summary> 
            /// 最多收件人数量 
            /// </summary> 
            public int RecipientMaxNum
            {
                set
                {
                    recipientmaxnum = value;
                }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -