高分问邮件发送的重头问题!各种方法都试过了!~

manasheep 2006-09-01 06:04:16
这是第一个方法,使用System.Web.Mail,白天用得好好的,晚上就不能用了!我什么也没改动阿!

错误提示:

与服务器的传输连接失败。

说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

异常详细信息: System.Runtime.InteropServices.COMException: 与服务器的传输连接失败。


源错误:


行 547: //写入smtp服务器名字
行 548: SmtpMail.SmtpServer = SMTP服务器地址;
行 549: SmtpMail.Send(mail);
行 550: }
行 551:


源代码:

public static void 发送邮件(string 标题, string 目标地址, string 发送者地址, string 内容, string SMTP服务器地址, string 用户名, string 密码)
{
MailMessage mail = new MailMessage();
mail.To = 目标地址;
mail.From = 发送者地址;
mail.Subject = 标题;
//mail.IsBodyHtml = HTML格式;
mail.Body = 内容;
//以下内容为服务器认证语句
mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate", "1"); //basic authentication
//用户名
mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendusername", 用户名);
//邮箱密码
mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendpassword", 密码);
//写入smtp服务器名字
SmtpMail.SmtpServer = SMTP服务器地址;
SmtpMail.Send(mail);
}
...全文
566 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
manasheep 2006-09-02
  • 打赏
  • 举报
回复
谢谢你了哈,给100分,如果能帮告诉我一下我的第一个方法的问题就更好了: )
manasheep 2006-09-02
  • 打赏
  • 举报
回复
倒,和我的第一个方法一模一样~~为什么你这个就能发送呢~我的那个现在始终无法发送了~
ksoft_luo 2006-09-01
  • 打赏
  • 举报
回复
using System;
using System.Web.Mail;

namespace CJ555.Inc
{
/// <summary>
/// SendMail 的摘要说明。
/// </summary>
public class SendMail
{
private string _adminEmail;
private string _smtpServer = "localhost";
private string _password;
private string _userName;

public SendMail()
{
//
// TODO: 在此处添加构造函数逻辑
//
}

public string AdminEmail

{

get{return _adminEmail;}

set{_adminEmail = value;}

}



public string SmtpServer

{

get{return _smtpServer;}

set{_smtpServer = value;}

}



public string Password

{

get{return _password;}

set{_password = value;}

}



public string UserName

{

get{return _userName;}

set{_userName = value;}

}



public bool Send(string to, string from, string subject, string message)

{

try

{

MailMessage em = new MailMessage();

em.To = to;

em.From = from;

em.Subject = subject;

em.Body = message;



//Found out how to send authenticated email via System.Web.Mail at http://SystemWebMail.com (fact 3.8)

if(this.UserName != null && this.Password != null)

{

em.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate", "1"); //basic authentication

em.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendusername", this.UserName); //set your username here

em.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendpassword", this.Password); //set your password here

}



SmtpMail.SmtpServer = this.SmtpServer;

SmtpMail.Send(em);

return true;

}

catch

{

return false;

}

}


}
}
--------------------------------------------
以上是在我以前项目中发送邮件的一个类。你可以试一下。我用该类一直到现在都能正常发送邮件。如果你还不能发送邮件就需要检查一下你的SMTP服务器相关设置了

更多资料:http://www.34v.com
manasheep 2006-09-01
  • 打赏
  • 举报
回复
第三种方法的组件源代码请参看这里:http://www.lionsky.net/MyWebsite/article/list.aspx?id=430

尝试第四种方法,我参考的这里的文章:
http://wjmboss.blog.hexun.com/4175083_d.html
发送后未提示任何异常,但是也根本没接到邮件~
manasheep 2006-09-01
  • 打赏
  • 举报
回复
谢谢各位的过问,我继续描述一下情况,SMTP服务器地址使用的一直是126.com的,所以不会有问题,账号密码方面设置也无误,如果有错至少应该提示登录部分失败,而现在的提示都是连接不到服务器,第三个方法发送的邮件在126邮箱中打开看不到任何内容,但信头方面的信息均无误,如果下载到本地可以用Outlook打开并正常阅读,但内容的结尾处常常附带一点乱码,怀疑是Email的结构有问题,但不知如何解决。
C5662601 2006-09-01
  • 打赏
  • 举报
回复
xuexi
cansum396 2006-09-01
  • 打赏
  • 举报
回复
估计是smtp server有问题
yuchangmao 2006-09-01
  • 打赏
  • 举报
回复
Message.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate", "1" );
//basic authentication
Message.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendusername", txtUserName.Text );
// 设置smtp服务器登录账号(如您163.com的信箱账号)
Message.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendpassword", txtPassword.Text );
// 设置smtp服务器登录密码 (如您的163.com的信箱账号密码)

但是使用免费的Smtp服务器一定要注意一个问题,就是发送邮件的账号(即Message.From)必须和上面的Smtp服务器登录账号一致,否则将会导致找不到cdo对象的异常。

csShooter 2006-09-01
  • 打赏
  • 举报
回复
程序应该考虑对网络的容错处理!
csShooter 2006-09-01
  • 打赏
  • 举报
回复
邮件服务器连接没成功!!


dotnet_boy 2006-09-01
  • 打赏
  • 举报
回复
楼主:白天发的好好的,晚上就不能发了

个人感觉是服务或网络的问题
cctaiyang 2006-09-01
  • 打赏
  • 举报
回复
邮件服务开了吗?
manasheep 2006-09-01
  • 打赏
  • 举报
回复
请各位高手帮忙解答一下问题吧,为了在网站上发个邮件折腾死我了。。
manasheep 2006-09-01
  • 打赏
  • 举报
回复
这是第三个方法,使用ESmtpMail组件,发送没问题!但是无论TbBody里填什么内容,或是设为任何格式,收到的邮件中都不显示任何内容,空白一片,而且似乎暗送也无效。

using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
namespace lion_office.Data.Library.MailClass
{
public class ESmtp : System.Web.UI.Page
{
protected System.Web.UI.WebControls.TextBox tbTo;
protected System.Web.UI.WebControls.TextBox tbFrom;
protected System.Web.UI.WebControls.TextBox tbCc;
protected System.Web.UI.WebControls.TextBox tbBcc;
protected System.Web.UI.WebControls.TextBox tbSubject;
protected System.Web.UI.WebControls.DropDownList ddlPriority;
protected System.Web.UI.WebControls.DropDownList ddlBodyFormat;
protected System.Web.UI.WebControls.TextBox tbBody;
protected System.Web.UI.WebControls.TextBox tbToName;
protected System.Web.UI.WebControls.TextBox tbFromName;
protected System.Web.UI.WebControls.TextBox tbReplyTo;
protected System.Web.UI.WebControls.Label ShowMsg;
protected System.Web.UI.HtmlControls.HtmlInputFile myFile;
protected System.Web.UI.WebControls.Button btnSend;

private void Page_Load(object sender, System.EventArgs e)
{

}

#region Web Form Designer generated code
override protected void OnInit(EventArgs e)
{
//
// CODEGEN:该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}

/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.btnSend.Click += new System.EventHandler(this.btnSend_Click);
this.Load += new System.EventHandler(this.Page_Load);

}
#endregion

private void btnSend_Click(object sender, System.EventArgs e)
{



lion_office.Data.Library.MailClass.ESmtpMail ESM = new lion_office.Data.Library.MailClass.ESmtpMail();

//一个重要注意事项:许多SMTP服务器不只需要登陆验证,还对From作了验证
//(比如263),如果和登陆用的用户名不符也不能发信,这时的错误返回信息是;
//553 邮箱名不可用
//碰到这样的情况您可以将From属性设为您所用SMTP服务器上的邮件地址。
//然后将FromName和ReplyTo设为您想让收信人回复的地址就可以了
ESM.RecipientName=tbToName.Text;//设定收件人姓名
string[] str = tbTo.Text.Split(';');
//Response.Write(str.Length);
//Response.End();
ESM.RecipientMaxNum = 1;



if(myFile.PostedFile!=null)
{

if(myFile.PostedFile.ContentLength!=0)
{
ESM.AddAttachment(myFile.PostedFile.FileName);
}
}


ESM.AddRecipient(str);//设定收件人地址(必须填写)。
//ESM.AddRecipient(tbCc.Text);//再次使用AddRecipient就是抄送了,也可以直接传入一个字符串数组,设定一组收件人。


ESM.From=tbFrom.Text;//设定发件人地址(必须填写)
ESM.FromName=tbFromName.Text;//设定发件人姓名
//ESM.ReplyTo=tbReplyTo.Text;//设定回复邮件地址.

ESM.Priority=ddlPriority.SelectedItem.Value;//设定优先级,不过我实验着好像没啥用
ESM.Html=(ddlBodyFormat.SelectedItem.Value!="Text");//设定正文是否HTML格式。

ESM.Subject=tbSubject.Text;//设定邮件主题
ESM.Body=tbBody.Text;//设定邮件正文

ESM.MailDomain="smtp.126.com";//设定SMTP服务器地址
//也可将将SMTP信息一次设置完成。写成
//ESM.MailDomain="esmuser:esmpass@smtp.163.com:25";
ESM.MailServerUserName="mymail@126.com";//设定SMTP验证的用户名
ESM.MailServerPassWord="123456";//设定SMTP验证的密码
//关于设定SMTP密码:如果在此处不设置的话,也可以在发送时使用在Send()函数的参数中设定。

//发送Mail,我重载了3次Send函数,可满足不同喜好。
//1.如果所有的属性都已经设置完毕,可直接使用无参数Send()
//Send();

//2.如果尚未设置SMTP服务信息也可使用如下形式设置
//Send("esmuser:esmpass@smtp.163.com:25")
//或者省略某些部分Send("esmuser:esmpass@smtp.163.com")或Send("smtp.163.com")

//3.或者将全部信息都写在Send函数里,不过这样可读性太差了
//Send(string smtpserver,string from,string fromname,string to,string toname,bool html,string subject,string body)


//开始发送
if(ESM.Send())
{
ShowMsg.Text="发送成功";

}
else
{
ShowMsg.Text=ESM.ErrorMessage;//显示错误信息
//ShowMsg.Text=ESM.Logs; //或者显示出详细的服务器交互信息。
}

}
}
}
manasheep 2006-09-01
  • 打赏
  • 举报
回复
这是第二个方法,使用CDO组件,在Windows程序中完美运行,在Asp.net中不能用!

错误提示:

与服务器的传输连接失败。

说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

异常详细信息: System.Runtime.InteropServices.COMException: 与服务器的传输连接失败。


源错误:


行 598: //oMsg.BodyPart.Charset = "UTF-8";
行 599: //oMsg.HTMLBodyPart.Charset = "UTF-8";
行 600: oMsg.Send();
行 601: oMsg = null;
行 602: }


源代码:

public static void 发送邮件(string 标题, string 目标地址, string 发送者地址, string 内容, bool HTML格式,string[] 附件列表, string SMTP服务器地址, string 用户名, string 密码)
{
CDO.Message oMsg = new CDO.Message();
oMsg.From = 发送者地址;
oMsg.To = 目标地址;
oMsg.Subject = 标题;
if (HTML格式) oMsg.HTMLBody = 内容;
else oMsg.TextBody = 内容;

if (附件列表 != null)
foreach (string f in 附件列表)
{
if (Main.验证字符串有效性(f)) oMsg.AddAttachment(f, 用户名, 密码);
}

CDO.IConfiguration iConfg = oMsg.Configuration;
ADODB.Fields oFields = iConfg.Fields;

oFields["http://schemas.microsoft.com/cdo/configuration/sendusing"].Value = 2;
oFields["http://schemas.microsoft.com/cdo/configuration/sendemailaddress"].Value = 发送者地址; //sender mail
oFields["http://schemas.microsoft.com/cdo/configuration/smtpaccountname"].Value = 用户名; //email account
oFields["http://schemas.microsoft.com/cdo/configuration/sendusername"].Value = 用户名;
oFields["http://schemas.microsoft.com/cdo/configuration/sendpassword"].Value = 密码;
oFields["http://schemas.microsoft.com/cdo/configuration/smtpauthenticate"].Value = 1;
//value=0 代表Anonymous验证方式(不需要验证)
//value=1 代表Basic验证方式(使用basic (clear-text) authentication.
//The configuration sendusername/sendpassword or postusername/postpassword fields are used to specify credentials.)
//Value=2 代表NTLM验证方式(Secure Password Authentication in Microsoft Outlook Express)
oFields["http://schemas.microsoft.com/cdo/configuration/languagecode"].Value = 0x0804;
oFields["http://schemas.microsoft.com/cdo/configuration/smtpserver"].Value = SMTP服务器地址;
oFields.Update();
oMsg.BodyPart.Charset = "gb2312";
oMsg.HTMLBodyPart.Charset = "gb2312";
//oMsg.BodyPart.Charset = "UTF-8";
//oMsg.HTMLBodyPart.Charset = "UTF-8";
oMsg.Send();
oMsg = null;
}

62,041

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧