如题:我的代码:
            string server = "aaa.bb.ccc";
            string htmlBody = "<b>Embedded image file.</b><DIV>&nbsp;</DIV>";            htmlBody += @"<img alt="""" hspace=0 src=""cid:112233"" align=baseline border=0 >";
            htmlBody += "<DIV>&nbsp;</DIV><b>This is the end of Mail...</b>";
            try
            {
                AlternateView htmlView = AlternateView.CreateAlternateViewFromString(htmlBody, null, "text/html");                MailMessage message = new MailMessage("[email protected]", "[email protected]");
                message.Subject = "5";                LinkedResource imageView = new LinkedResource("c:\\pix\\a.jpg", "image/jpeg");
                imageView.ContentId = "112233";
                imageView.TransferEncoding = TransferEncoding.Base64;
                htmlView.LinkedResources.Add(imageView);                message.AlternateViews.Add(AlternateView.CreateAlternateViewFromString("plain text", null, "text/plain"));
                message.AlternateViews.Add(htmlView);                //Send the message.
                SmtpClient client = new SmtpClient(server);
                // Add credentials if the SMTP server requires them.
                client.Credentials = CredentialCache.DefaultNetworkCredentials;
                client.Send(message);
                message.Dispose();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
运行到client.send(message)后,email就是没有发出来,似乎存在queue里面.一定要关闭程序,才会发送.这个怎么解决?谢谢

解决方案 »

  1.   

    我这有个邮件发送的类
    应该比自带的要好得多
    using System;
    using System.Text;
    using System.IO;
    using System.Net;
    using System.Net.Sockets;
    using System.Collections;
    namespace SEMail
    {
        class csEmail
        {
             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 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 csEmail()
            {
                Attachments = new System.Collections.ArrayList();
            }
            /// <summary> 
            /// 邮件服务器域名和验证信息 
            /// 形如:"user:paswww.server.com:25",也可省略次要信息。如"user:paswww.server.com"www.server.com" 
            /// </summary>    
            public string MailDomain
            {
                set
                {
                    string maidomain = value.Trim();
                    int tempint;                if (maidomain != "")
                    {
                        tempint = maidomain.IndexOf("@");
                        if (tempint != -1)
                        {
                            string str = maidomain.Substring(0, tempint);
                            MailServerUserName = str.Substring(0, str.IndexOf(":"));
                            MailServerPassWord = str.Substring(str.IndexOf(":") + 1, str.Length - str.IndexOf(":") - 1);
                            maidomain = maidomain.Substring(tempint + 1, maidomain.Length - tempint - 1);
                        }                    tempint = maidomain.IndexOf(":");
                        if (tempint != -1)
                        {
                            mailserver = maidomain.Substring(0, tempint);
                            mailserverport = System.Convert.ToInt32(maidomain.Substring(tempint + 1, maidomain.Length - tempint - 1));
                        }
                        else
                        {
                            mailserver = maidomain;                    }
                    }            }
            }
      

  2.   

    /// <summary> 
            /// 邮件服务器端口号 
            /// </summary>    
            public int MailDomainPort
            {
                set
                {
                    mailserverport = value;
                }
            }        public string MailDomainServer
            {
                set { mailserver = 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发给我([email protected]),我将尽快查明原因。 
            /// </summary> 
            public string Logs
            {
                get
                {
                    return logs;
                }
            }
      

  3.   

    /// <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);
            }        /// <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.Clear();
                    Recipient.Add(RecipientNum, str);
                    RecipientNum++;
                    return true;
                }
                else
                {
                    errmsg += "收件人过多";
                    return false;
                }
            }
            /// <summary> 
            /// 最多收件人数量 
            /// </summary> 
            public int RecipientMaxNum
            {
                set
                {
                    recipientmaxnum = value;
                }
            }
            /// <summary> 
            /// 添加一组收件人(不超过recipientmaxnum个),参数为字符串数组 
            /// </summary> 
            /// <param name="str">保存有收件人地址的字符串数组(不超过recipientmaxnum个)</param>    
            public bool AddRecipient(string[] str)
            {
                for (int i = 0; i < str.Length; i++)
                {
                    if (!AddRecipient(str[i]))
                    {
                        return false;
                    }
                }
                return true;
            }        /// <summary> 
            /// 发送SMTP命令 
            /// </summary>    
            private bool SendCommand(string str)
            {
                byte[] WriteBuffer;
                if (str == null || str.Trim() == "")
                {
                    return true;
                }
                logs += str;
                WriteBuffer = Encoding.Default.GetBytes(str);
                try
                {
                    ns.Write(WriteBuffer, 0, WriteBuffer.Length);
                }
                catch
                {
                    errmsg = "网络连接错误";
                    return false;
                }
                return true;
            }        /// <summary> 
            /// 接收SMTP服务器回应 
            /// </summary> 
            private string RecvResponse()
            {
                int StreamSize;
                string Returnvalue = "";
                byte[] ReadBuffer = new byte[1024];
                try
                {
                    StreamSize = ns.Read(ReadBuffer, 0, ReadBuffer.Length);
                }
                catch
                {
                    errmsg = "网络连接错误";
                    return "false";
                }            if (StreamSize == 0)
                {
                    return Returnvalue;
                }
                else
                {
                    Returnvalue = Encoding.Default.GetString(ReadBuffer).Substring(0, StreamSize);
                    logs += Returnvalue;
                    return Returnvalue;
                }
            }
            /// <summary> 
            /// 与服务器交互,发送一条命令并接收回应。 
            /// </summary> 
            /// <param name="Command">一个要发送的命令</param> 
            /// <param name="errstr">如果错误,要反馈的信息</param> 
            private bool Dialog(string str, string errstr)
            {
                if (str == null || str.Trim() == "")
                {
                    return true;
                }
                if (SendCommand(str))
                {
                    string RR = RecvResponse();
                    if (RR == "false")
                    {
                        return false;
                    }
                    string RRCode = RR.Substring(0, 3);
                    if (RightCodeHT[RRCode] != null)
                    {
                        return true;
                    }
                    else
                    {
                        if (ErrCodeHT[RRCode] != null)
                        {
                            errmsg += (RRCode + ErrCodeHT[RRCode].ToString());
                            errmsg += enter;
                        }
                        else
                        {
                            errmsg += RR;
                        }
                        errmsg += errstr;
                        return false;
                    }
                }
                else
                {
                    return false;
                }        }
            /// <summary> 
            /// 与服务器交互,发送一组命令并接收回应。 
            /// </summary>         private bool Dialog(string[] str, string errstr)
            {
                for (int i = 0; i < str.Length; i++)
                {
                    if (!Dialog(str[i], ""))
                    {
                        errmsg += enter;
                        errmsg += errstr;
                        return false;
                    }
                }            return true;
            }
      

  4.   

    没看出来你的class好在什么地方嘛