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