问题描述
附代码///邮件发送处理///</summary>///<paramname="filePatch">附件路径</param>///<paramname="mailname">收件箱账号</param>///<paramname="zhuti">主题</param>///<returns></returns>publicstringMAIL(stringfilePatch,stringmailname,stringzhuti){SmtpClientsmtp=newSmtpClient();//实例化一个SmtpClientsmtp.DeliveryMethod=SmtpDeliveryMethod.Network;//将smtp的出站方式设为Networksmtp.Host="smtp.qq.com";//指定smtp服务器地址smtp.Port=587;//指定smtp服务器的端口,默认是25,如果采用默认端口,可省去//smtp.UseDefaultCredentials=true;//smtp.EnableSsl=true;//smtp服务器是否启用SSL加密//如果你的SMTP服务器不需要身份认证,则使用下面的方式,不过,目前基本没有不需要认证的了smtp.UseDefaultCredentials=true;//smtp.Timeout=50000000;//如果需要认证,则用下面的方式smtp.Credentials=newNetworkCredential("xxxxxxx@qq.com","gctdboapemaqjjhg");MailMessagemm=newMailMessage();//实例化一个邮件类mm.Priority=MailPriority.Normal;//邮件的优先级,分为Low,Normal,High,通常用Normal即可mm.From=newMailAddress("xxxxxxxxxxxx@qq.com","购电影",Encoding.GetEncoding(936));mm.To.Add(newMailAddress(mailname,"发送("+zhuti+")卡号信息",Encoding.GetEncoding(936)));//mm.To.Add(newMailAddress("h@163.com","接收者h",Encoding.GetEncoding(936)));mm.Subject=zhuti;//邮件标题mm.SubjectEncoding=Encoding.GetEncoding(936);//这里非常重要,如果你的邮件标题包含中文,这里一定要指定,否则对方收到的极有可能是乱码。//936是简体中文的pagecode,如果是英文标题,这句可以忽略不用mm.IsBodyHtml=true;//邮件正文是否是HTML格式mm.BodyEncoding=Encoding.GetEncoding(936);//邮件正文的编码,设置不正确,接收者会收到乱码mm.Body="<fontcolor='red'>卡号信息</font>";//邮件正文mm.Attachments.Add(newAttachment(filePatch));//添加附件,第二个参数,表示附件的文件类型,可以不用指定//可以添加多个附件//mm.Attachments.Add(newAttachment(@"d:b.doc"));try{smtp.Send(mm);mm.Dispose();return"1";}catch(Exceptionex){mm.Dispose();returnex.ToString();}}求解。。。。。。急
解决方案
解决方案二:
照你这个配置妥妥地发不了,我比较好奇你在测试环境里是怎么能发成功的smtp.Port=587;//指定smtp服务器的端口,默认是25,如果采用默认端口,可省去
把587改成465//smtp.EnableSsl=true;//smtp服务器是否启用SSL加密
把注释去掉,需要开启SSL
解决方案三:
我这个在smtp.Port=465;//指定smtp服务器的端口,默认是25,如果采用默认端口,可省去smtp.EnableSsl=true;//smtp服务器是否启用SSL加密;这样操作在我本地都不通过;只有smtp.Port=587;smtp.EnableSsl=true,在vs2010里就正常,可是放到服务器上就不成功啊
解决方案四:
看了一下QQ邮箱的设置,465和587都可以,具体没有说明区别,我测了一下,可能587不需要SSL,465需要SSL。你的程序放在服务器上的时候,是一直发送失败还是偶尔?在服务器上telnetsmtp.qq.com465,telnetsmtp.qq.com587看看这两个端口是不是都能通然后,试一下SSL+465/noSSL+587两个组合。发送失败的时候把异常信息记录下来,看一下具体是因为什么原因失败的
解决方案五:
百度了一下,465和587是加密方式不一样,一个是SSL,一个是TLS改成ssl+465,再继续测吧
解决方案六:
我是小白,问你一下,如何在服务器上测465和587是否能通
解决方案七:
如果端口=587smtp.EnableSsl=false,会提示SMTP服务器要求安全连接或客户端未通过身份验证。服务器响应为:MustissueaSTARTTLScommandfirst.设置成true,在vs2010没问题,放到正式环境就有问题了;而端口=465smtp.EnableSsl=true提示请求超时
解决方案八:
开始运行用cmd打开命令提示符pingsmtp.qq.com看结果telnetsmtp.qq.com465看结果
解决方案九:
别讨论那些跟问题无关的东西了,既然测试环境能过,说明邮件类没有大问题。关键是要搞清楚你的错误到底是什么错误,你追踪错误消息没?????也许是防火墙什么的隔离导致的,也许原因根本就不是什么技术问题导致的
解决方案十:
这个?。。。。。。。。
解决方案十一:
版权所有(c)2009MicrosoftCorporation。保留所有权利。C:UsersAdministrator>telnetsmtp.qq.com465'telnet'不是内部或外部命令,也不是可运行的程序或批处理文件。C:UsersAdministrator>pingsmtp.qq.com正在Pingsmtp.qq.com[163.177.72.176]具有32字节的数据来自163.177.72.176的回复:字节=32时间=58msTTL=52来自163.177.72.176的回复:字节=32时间=57msTTL=52来自163.177.72.176的回复:字节=32时间=57msTTL=52来自163.177.72.176的回复:字节=32时间=58msTTL=52163.177.72.176的Ping统计信息:数据包:已发送=4,已接收=4,丢失=0(0%丢失),往返行程的估计时间(以毫秒为单位):最短=57ms,最长=58ms,平均=57msC:UsersAdministrator>
解决方案十二:
是.net2.0项目
解决方案十三:
控制面板程序和功能启用或关闭windows功能勾上"Telnet客户端",然后确定再测一下telnetsmtp.qq.com465的结果
解决方案十四:
我的是windowserver2008r2输入telnetsmtp.qq.com465出现空白,而587出现220smtp.qq.comEsmtpQQMailServer
解决方案十五:
“不可以”是指什么?出错?还是对方没收到?有没有到邮箱中查看发信记录的变化?
解决方案:
引用13楼qq_24420983的回复:
我的是windowserver2008r2输入telnetsmtp.qq.com465出现空白,而587出现220smtp.qq.comEsmtpQQMailServer
这说明俩端口都没问题,问题有点诡异试一下SSL+587端口,看看正常还是失败,失败的话,看一下提示信息然后试一下noSSL+465,正常的话会提示要求安全连接
解决方案:
可以加你QQ吗?我的1577231764
解决方案:
ssl587的端口,把这个方法写成一般处理程序,放到我同事电脑的IIS里,我调用没问题,就是放在正式服务器里就出问题了,你看这是什么原因
解决方案:
用smtp.EnableSsl=false,端口=465会报异常是:操作超时
解决方案:
引用17楼qq_24420983的回复:
ssl587的端口,把这个方法写成一般处理程序,放到我同事电脑的IIS里,我调用没问题,就是放在正式服务器里就出问题了,你看这是什么原因
你的同事电脑中的web服务是不是启用了ssl?服务器上的iis是不是没有启用ssl?
解决方案:
前几天的遇到过类似的问题,原因是公司的网络的防火墙....因为同样的代码在家里是可以的发送邮件的
解决方案:
我这里有一段祖传代码。。#region发送邮件#region邮件属性privatestringuserName="";//电子邮箱用户名publicstringUserName{get{returnuserName;}set{userName=value;}}privatestringpassword="";//电子邮箱密码publicstringPassword{get{returnpassword;}set{password=value;}}privatestringfrom="";//发件者邮箱publicstringFrom{get{returnfrom;}set{from=value;}}privatestringmailTo="";//收件者邮箱privatestringsubject="";///<summary>///邮件主题///</summary>publicstringSubject{set{subject=value;}get{returnsubject;}}privatestringbody="";///<summary>///邮件内容///</summary>publicstringBody{set{body=value;}get{returnbody;}}privatestringsmtpServerName="smtp.qq.com";///<summary>///SMTP服务器名称///</summary>publicstringSMTPServerName{set{smtpServerName=value;}get{returnsmtpServerName;}}#endregion//发送邮件时候需要定义的属性///<summary>///初始化的时候就可以把所有属性加载进去EmailHelper///</summary>///<paramname="userName">发件者电子邮件用户名</param>///<paramname="password">发件者电子邮件密码</param>///<paramname="from">发件人电子邮箱</param>///<paramname="mailTo">收件人电子邮箱</param>///<paramname="subject">邮件主题</param>///<paramname="body">邮件内容</param>///<paramname="smtpServerName">例如smtp.163.com</param>publicstringEmailHelper(stringuserName,stringpassword,stringfrom,stringmailTo,stringsubject,stringbody,stringsmtpServerName){this.userName=userName;this.password=password;this.from=from;this.mailTo=mailTo;this.subject=subject;this.body=body;returnSend();}//邮件发送///<summary>///发送电子邮件///</summary>publicstringSend(){try{MailAddressfrom=newMailAddress(From);MailAddressto=newMailAddress(mailTo);System.Net.Mail.MailMessagemessage=newSystem.Net.Mail.MailMessage(from,to);message.Subject=Subject;message.Body=Body;SmtpClientclient=newSmtpClient(smtpServerName);client.Credentials=newNetworkCredential(userName,password);client.Send(message);//System.IO.File.WriteAllText("username.db",return"OK";}catch(Exceptione){//LogHelper.Error("邮件发送失败:n用户名:"+userName+"n密码:"+password+"n邮件内容:"+Body+"n错误信息:"+e.StackTrace);returne.Message.ToString();}}//发送邮件时调用的函数#endregion
解决方案:
我计算机名字改为英文。就Ok了