using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Net.Mail;
using System.Data.OleDb;
using System.Data.SqlClient;
using System.IO;
using System.Text.RegularExpressions;public partial class E3_SB_Goods3_SendMail : System.Web.UI.Page
{
    string userId = null;
    string mail = null;//发送者邮箱
    string pwd = null;//发送者邮箱密码
    string tomail = null;//发送给
    string fileName = null;//附件名
    private static int j = 0;
    protected void Page_Load(object sender, EventArgs e)
    {
       
        userId = Request.QueryString["userId"].ToString();
        if (userId == null || userId == "")
         {
             Response.Redirect("../Default.aspx");
         }
         else
         {
             SqlConnection conn = new SqlConnection("Data Source=.;Database=information;User Id=sa;Password=sa2005;");
             conn.Open();
             string sql = "select Email,other1 from sb_users where userId='" + userId + "'";
             SqlCommand cmd = new SqlCommand(sql, conn);
             SqlDataReader reader = cmd.ExecuteReader();
             if (reader.Read())
             {
                 mail = reader["email"].ToString();
                 pwd = reader["other1"].ToString();
             }
         }       
        
    }    public void send()
    { 
        MailAddress EmailFrom =new MailAddress(mail);
        tomail = this.TextBox1.Text;
        MailAddress EmailTo = new MailAddress(tomail);        MailMessage Email = new MailMessage(EmailFrom, EmailTo);
        Email.Priority = MailPriority.High;        Email.Subject = this.TextBox2.Text;
        Email.Body = this.Editor1.Text;
        //添加抄送电子邮件
        Email.CC.Add(EmailTo);             if (j > 0)
        {
            Attachment data = new Attachment(fileName, System.Net.Mime.MediaTypeNames.Application.Octet);            //Add time stamp information for the file.
            System.Net.Mime.ContentDisposition disposition = data.ContentDisposition;
            disposition.CreationDate = System.IO.File.GetCreationTime(fileName);
            disposition.ModificationDate = System.IO.File.GetLastWriteTime(fileName);
            disposition.ReadDate = System.IO.File.GetLastAccessTime(fileName);
            // Add the file attachment to this e-mail message.
            Email.Attachments.Add(data);
        }        string smtpString = null;
        Regex reg = new Regex(@"@([^\.]*?)\.");
        Match m = reg.Match(tomail);
        string mailStr = null;
        if (m.Success)
        {
            mailStr = m.Result("$1");
        }
        if (mailStr.Equals("qq"))
        {
            smtpString = "smtp.qq.com";
        }
        if (mailStr.Equals("163"))
        {
            smtpString = "smtp.163.com";
        }
        if (mailStr.Equals("sohu"))
        {
            smtpString = "smtp.sohu.com";
        }
        if (mailStr.Equals("sina"))
        {
            smtpString = "smtp.sina.com";
        }
        SmtpClient Client = new SmtpClient(smtpString);        //验证 (Credentials 凭证)
        Client.Credentials = new System.Net.NetworkCredential(mail, pwd);        //处理待发的电子邮件的方法 (Delivery 发送,传输)
        Client.DeliveryMethod = SmtpDeliveryMethod.Network;
        try
        {
            Client.Send(Email);
            Response.Write("<script>alert('已发送成功啦');</script>");
            
        }
        catch (SmtpFailedRecipientsException ex)
        {
            for (int i = 0; i < ex.InnerExceptions.Length; i++)
            {
                SmtpStatusCode status = ex.InnerExceptions[i].StatusCode;
                if (status == SmtpStatusCode.MailboxBusy || status == SmtpStatusCode.MailboxUnavailable)
             {
                    Response.Write("Delivery failed - retrying in 5 seconds.");
                    System.Threading.Thread.Sleep(5000);
                    Client.Send(Email);
             }
              else
               {
            Response.Write("Failed to deliver message to {0}" + ex.FailedRecipient[i].ToString().Trim() + "");
              }
         }        }
    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        if (this.TextBox1.Text == null || this.TextBox1.Text == "")
        {
            Response.Write("<script>alert('请填写邮件地址!');</script>");
        }
        send();
    }    protected void Button2_Click(object sender, EventArgs e)
    {
        Boolean fileOk = false;
        string path = Server.MapPath("~/upload/");
        //判断是否已经选取文件
        if (FileUpload1.HasFile)
        {
            //取得文件的扩展名,并转换成小写
            string fileExtension = System.IO.Path.GetExtension(this.FileUpload1.FileName).ToLower();
            //限定只能上传jpg和gif图片
            string[] allowExtension = { ".jpg", ".gif",".jpeg" };
            //对上传的文件的类型进行一个个匹对
            for (int i = 0; i < allowExtension.Length; i++)
            {
                if (fileExtension == allowExtension[i])
                {
                    fileOk = true;
                    break;
                }
            }
            //对上传文件的大小进行检测,限定文件最大不超过10M
            if (FileUpload1.PostedFile.ContentLength > 10240000)
            {
                fileOk = false;
            }
            //最后的结果
            if (fileOk)
            {
                try
                {
                                      string time = DateTime.Now.Year.ToString() + DateTime.Now.Month.ToString() + DateTime.Now.Day.ToString("00") + DateTime.Now.Hour.ToString("00") + DateTime.Now.Minute.ToString("00");
                    fileName = userId + "_" + time + "_" + this.FileUpload1.FileName;
                    this.FileUpload1.PostedFile.SaveAs(path + fileName);
                    j = 1;
                
                }
                catch
                {
                    this.Label4.Text = "上传失败!";
                }
            }
            else
            {
                Response.Write("<script>window.alert('文件类型或者文件大小超出10M')</script>");
            }        }
    
    }
}
我定义一个整数型j,当上传邮件附件后,j就=1,我点击发送判断j是不是>0,是的话就添加附件发送,不是的话就直接发送。为什么报错?错误信息为:命令顺序不正确。 服务器响应为: Error: need EHLO and AUTH first ! 

解决方案 »

  1.   

    楼主把
        if (j > 0)
            {
                Attachment data = new Attachment(fileName, System.Net.Mime.MediaTypeNames.Application.Octet);            //Add time stamp information for the file.
                System.Net.Mime.ContentDisposition disposition = data.ContentDisposition;
                disposition.CreationDate = System.IO.File.GetCreationTime(fileName);
                disposition.ModificationDate = System.IO.File.GetLastWriteTime(fileName);
                disposition.ReadDate = System.IO.File.GetLastAccessTime(fileName);
                // Add the file attachment to this e-mail message.
                Email.Attachments.Add(data);
            }
    放到
    try
            {
                Client.Send(Email);
                Response.Write("<script>alert('已发送成功啦');</script>");
                
            }
    前面,试试
      

  2.   


     /// <summary>
            /// 指定用户邮箱发邮件
            /// </summary>
            /// <param name="subject">邮件主题</param>
            /// <param name="content">邮件内容</param>
            /// <param name="Recipient">收件人</param>
            /// <param name="companyname">收件人名称</param>
            ///   <param name="CCFlag">是否抄送</param>
            /// <returns></returns>
            public static bool EnSystemMail(string subject, string content, string Recipient, string companyname,bool CCFlag)
            {
                
                System.Net.Mail.SmtpClient client = new SmtpClient();
                client.Host = "mail.XXXX.cc";
                client.UseDefaultCredentials = false;
                client.Credentials = new System.Net.NetworkCredential("[email protected]","yaXX");
                client.DeliveryMethod = SmtpDeliveryMethod.Network;            client.EnableSsl = false;
                client.Timeout = 100000;            System.Net.Mail.MailMessage message = new MailMessage();            message.From = new MailAddress("[email protected]", "上XXX司");//发送方            message.To.Add(new MailAddress(Recipient,companyname));  //接收方            if (CCFlag)
                {
                    message.CC.Add(new MailAddress("[email protected]", "染料展项目组"));
                     
                }
                             message.Subject = subject;
                message.Body = content;
                message.BodyEncoding = System.Text.Encoding.UTF8;
                message.IsBodyHtml = true;            try
                {
                    client.Send(message);                return true;
                }
                catch
                {
                    return false;
                }        }
        
    参考下吧.
      

  3.   


    不懂你的意思,我不是放在try语句块的前面了么? 是让我放入try语句的里面?
      

  4.   

    先获得用户授权,再添加附件。

      if (j > 0)
            {
                Attachment data = new Attachment(fileName, System.Net.Mime.MediaTypeNames.Application.Octet);            //Add time stamp information for the file.
                System.Net.Mime.ContentDisposition disposition = data.ContentDisposition;
                disposition.CreationDate = System.IO.File.GetCreationTime(fileName);
                disposition.ModificationDate = System.IO.File.GetLastWriteTime(fileName);
                disposition.ReadDate = System.IO.File.GetLastAccessTime(fileName);
                // Add the file attachment to this e-mail message.
                Email.Attachments.Add(data);
            }
    放到
    //处理待发的电子邮件的方法 (Delivery 发送,传输)
            Client.DeliveryMethod = SmtpDeliveryMethod.Network;
    后面
      

  5.   

    我现在把
    if (j > 0)
    {
    Attachment data = new Attachment(fileName, System.Net.Mime.MediaTypeNames.Application.Octet);//Add time stamp information for the file.
    System.Net.Mime.ContentDisposition disposition = data.ContentDisposition;
    disposition.CreationDate = System.IO.File.GetCreationTime(fileName);
    disposition.ModificationDate = System.IO.File.GetLastWriteTime(fileName);
    disposition.ReadDate = System.IO.File.GetLastAccessTime(fileName);
    // Add the file attachment to this e-mail message.
    Email.Attachments.Add(data);
    }
    注销了,发送邮件还是报错,为什么啊?
      

  6.   

    刷新页面,把文件名存session里。用的时候再取出来
      

  7.   

    disposition.CreationDate = System.IO.File.GetCreationTime(fileName);
    disposition.ModificationDate = System.IO.File.GetLastWriteTime(fileName);
    disposition.ReadDate = System.IO.File.GetLastAccessTime(fileName);
    这3个方法哪个是保存邮件名称的啊?