当前位置:编程学习 > C#/ASP.NET >>

ajax请求ashx发送电子邮件的问题【急】

ajax发送邮件 
在本地测试多次发送没问题。
放到服务器上第一次发送也没问题,可以发送成功,大于1次后就发送不成功。
除非关闭浏览器从新载入网页再发送就成功了!

使用jQuery.ajax发送异步,有参数
ashx默认不能访问Session, using了 System.Web.SessionState;  ashx就能使用到Session了,
发送邮件使用的是SmtpClient 同步发送方法Send。MailMessage 也Disposable了
很奇怪,有人能帮助我解决这个吗? --------------------编程问答--------------------

#region 发送邮件
    /// <summary>
    /// 发送邮件
    /// </summary>
    /// <param name="to">接收者</param>
    /// <param name="title">标题</param>
    /// <param name="content">内容-支持HTML</param>
    /// <param name="host">SMTP服务器</param>
    /// <param name="username">用户名</param>
    /// <param name="password">密码</param>
    /// <param name="port">SMTP端口</param>
    /// <param name="ssl">安全套接层协议</param>
    /// <returns></returns>
    public static bool SendEmail(string to, string title, string content, string host, string username, string password, int port, bool ssl)
    {
        bool bl;
        try
        {
            SmtpClient client = new SmtpClient();
            client.Host = host;
            client.Port = port;
            client.EnableSsl = ssl;
            client.UseDefaultCredentials = false;
            System.Net.NetworkCredential basicAuthenticationInfo = new System.Net.NetworkCredential(username, password);
            client.Credentials = basicAuthenticationInfo;
            client.DeliveryMethod = SmtpDeliveryMethod.Network;
            MailMessage message = new MailMessage(username, to, title, content);
            message.BodyEncoding = Encoding.UTF8;
            message.Priority = MailPriority.High;
            message.IsBodyHtml = true;
            client.Send(message);
            bl = true;
        }
        catch (SmtpException ex)
        {
            bl = false;
            throw ex;
        }
        return bl;
    }
--------------------编程问答-------------------- 应该加一个
finally{
client = null;
message=null;
} --------------------编程问答--------------------
发 ajax 部分的代码 --------------------编程问答--------------------

/// <summary>
    /// 获取xml的文件值取出邮箱名和密码并赋值给全局变量
    /// </summary>
    private void ReadXml()
    {
        xmldocument.Load(HttpContext.Current.Server.MapPath(@"~/App_Data/EmailManger.xml"));
        XmlNodeList nodelist = xmldocument.SelectSingleNode("Emailstore").ChildNodes;
        foreach (XmlNode xn in nodelist)
        {
            XmlElement xe = (XmlElement)xn;
            emailname = xe.GetAttribute("emailName");
            emailpwd = xe.GetAttribute("password");
            emailhost = xe.GetAttribute("Host");
            emailport = Int32.Parse(xe.GetAttribute("Port"));
            ssl =Convert.ToBoolean(xe.GetAttribute("Ssl"));
        }
    }

ashx获取request[""];调用发送方法
前台的ajax就不用贴了吧。就一个post方法

if (type != null && type == "sendemail")
        {
            string title = context.Request["title"];
            string content = context.Request["content"];
            string email = context.Request["_email"];
            ReadXml();
            if (global.SendEmail(email, title, content, emailhost, emailname, emailpwd, emailport,ssl))
            {
                context.Response.Write("1");
            }
        }
--------------------编程问答-------------------- 楼上各位,先谢谢你们贴代码。

请各位再看看我描述的问题,我的意思是,我代码是没问题的,和你们的是一样。

我在我本机测试的时候怎么测试都没问题。

上传到真实环境后单个会话同一个按钮就只能发送一次邮件,这就是我的问题所在。

还请各位帮助分析一下。

我用的万网的虚拟主机.万网的虚拟主机会不会劫持我发送的邮件?(可能有某种安全机制?) --------------------编程问答-------------------- webconfig里面需要改点东西吧! --------------------编程问答-------------------- 用的smtp服务器是一个吗?

看你的描述,感觉还是代码的问题。

本地调试用win2003+ IIS试一试。是不是vs web server和IIS行为不一样。

鉴于信息不是很多,意见仅供参考。 --------------------编程问答-------------------- 什么叫做“发送不成功”? --------------------编程问答-------------------- 给你个提醒吧,跟你纠结什么session有关。

你自己代码的bug。 --------------------编程问答-------------------- ajax被浏览器缓存了吧,请求的时候加个随机参数
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,