我正在尝试使用c#通过asp.net中的应用程序发送电子邮件。我搜索了很多,并且大多发现以下代码在asp.net中使用c#发送电子邮件:
MailMessage objEmail = new MailMessage();
objEmail.From = new MailAddress(txtFrom.Text);
objEmail.To.Add(txtTo.Text);
objEmail.CC.Add(txtCC.Text);
objEmail.Bcc.Add(txtBCC.Text);
objEmail.Subject = txtSubject.Text;
try
{
SmtpClient mail = new SmtpClient();
mail.EnableSsl = true;
mail.DeliveryMethod = SmtpDeliveryMethod.Network;
mail.Credentials = new NetworkCredential(txtFrom.Text, txtPassword.Text);
mail.Timeout = 20000;
mail.UseDefaultCredentials = false;
mail.Host = "smtp.gmail.com";
mail.Port = 587;
mail.Send(objEmail);
Response.Write("Your Email has been sent sucessfully - Thank You");
}
catch (Exception exc)
{
Response.Write("Send failure due to : <br />" + exc.ToString());
}
但我经常收到以下错误:
“System.Net.Mail.SmtpException:发送邮件失败.---&gt; System.IO.IOException:无法从传输中读取数据 连接:远程强制关闭现有连接 主办。 ---&GT; System.Net.Sockets.SocketException:现有连接 被远程主机强行关闭了 System.Net.Sockets.Socket.Receive(Byte []缓冲区,Int32偏移量,Int32 size,SocketFlags socketFlags)at System.Net.Sockets.NetworkStream.Read(Byte []缓冲区,Int32偏移量, Int32 size)---内部异常堆栈跟踪结束--- at System.Net.Sockets.NetworkStream.Read(Byte []缓冲区,Int32偏移量, System32.DelegatedStream.Read(Byte []缓冲区,Int32的Int32大小) System.Net.BufferedReadStream.Read(Byte []的偏移量,Int32计数) 缓冲区,Int32偏移量,Int32计数)at System.Net.Mail.SmtpReplyReaderFactory.ReadLines(SmtpReplyReader caller,Boolean oneLine)at System.Net.Mail.SmtpReplyReaderFactory.ReadLine(SmtpReplyReader 调用者)在System.Net.Mail.CheckCommand.Send(SmtpConnection conn, 字符串和放大器;回应) System.Net.Mail.StartTlsCommand.Send(SmtpConnection conn)at System.Net.Mail.SmtpConnection.GetConnection(的ServicePoint servicePoint)at System.Net.Mail.SmtpTransport.GetConnection(ServicePoint servicePoint) 在System.Net.Mail.SmtpClient.GetConnection()处 System.Net.Mail.SmtpClient.Send(MailMessage message)“
答案 0 :(得分:3)
您尝试使用Gmail的SMTP服务器,其电子邮件地址不属于Gmail(根据帖子的标题)。您需要更新主机和端口详细信息以适合您的电子邮件提供商的SMTP详细信息。
答案 1 :(得分:0)
您的代码看起来很合理,因此您需要弄清楚阻止它工作的原因。
您能否消除防火墙问题的可能性?大多数中型或大型组织倾向于阻止端口25,465和587 - 他们根本不希望任何未经授权的邮件发送。如果您怀疑可能出现这种情况,您可以尝试从网络外部(即您的家庭计算机),尽管某些ISP也会阻止端口。
如果防火墙没有阻止您的连接,请验证您的凭据是否有效 - 这可以通过Thunderbird,Outlook或同等设备发送来完成。尝试使用未加密的邮件设置测试 - 通过垃圾邮件文件夹,将其粘贴到spamcop或等效邮件中,然后查找开放中继。或者,有一些商业电子邮件提供商支持未加密的电子邮件。
答案 2 :(得分:0)
你可以看看这个..简单代码及其适用于gmail帐户...
try
{
MailMessage msg = new MailMessage();
msg.From = new MailAddress(TextFRM.Text);
msg.To.Add(TextTO.Text);
msg.Subject = TextSUB.Text;
msg.Body = TextMSG.Text;
SmtpClient sc = new SmtpClient("smtp.gmail.com");
sc.Port = 25;
sc.Credentials = new NetworkCredential(TextFRM.Text, TextPSD.Text);
sc.EnableSsl = true;
sc.Send(msg);
Response.Write("Mail Send");
}
catch (Exception ex)
{
Response.Write(ex.Message);
}