0

我正在尝试使用 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:发送邮件失败。---> System.IO.IOException:无法从传输连接读取数据:现有连接被远程主机强行关闭。---> System.Net .Sockets.SocketException:现有连接被远程主机在 System.Net.Sockets.Socket.Receive(Byte[] buffer, Int32 offset, Int32 size, SocketFlags socketFlags) at System.Net.Sockets.NetworkStream.Read 处强行关闭(字节 [] 缓冲区,Int32 偏移量,Int32 大小)--- 内部异常堆栈跟踪结束 --- 在 System.Net.Sockets.NetworkStream.Read(Byte[] 缓冲区,Int32 偏移量,Int32 大小)在 System.Net System.Net.BufferedReadStream.Read(Byte[] buffer, Int32 offset, Int32 count) 在 System.Net.Mail.SmtpReplyReaderFactory 处的 .DelegatedStream.Read(Byte[] buffer, Int32 offset, Int32 count)。ReadLines(SmtpReplyReader caller, Boolean oneLine) at System.Net.Mail.SmtpReplyReaderFactory.ReadLine(SmtpReplyReader caller) at System.Net.Mail.CheckCommand.Send(SmtpConnection conn, String& response) at System.Net.Mail.StartTlsCommand.Send( SmtpConnection conn) 在 System.Net.Mail.SmtpConnection.GetConnection(ServicePoint servicePoint) 在 System.Net.Mail.SmtpTransport.GetConnection(ServicePoint servicePoint) 在 System.Net.Mail.SmtpClient.GetConnection() 在 System.Net.Mail。 SmtpClient.Send(MailMessage 消息)"GetConnection(ServicePoint servicePoint) 在 System.Net.Mail.SmtpTransport.GetConnection(ServicePoint servicePoint) 在 System.Net.Mail.SmtpClient.GetConnection() 在 System.Net.Mail.SmtpClient.Send(MailMessage 消息)"GetConnection(ServicePoint servicePoint) 在 System.Net.Mail.SmtpTransport.GetConnection(ServicePoint servicePoint) 在 System.Net.Mail.SmtpClient.GetConnection() 在 System.Net.Mail.SmtpClient.Send(MailMessage 消息)"

4

3 回答 3

3

您正在尝试将 Gmail 的 SMTP 服务器与不属于 Gmail 的电子邮件地址一起使用(根据帖子的标题)。您需要更新主机和端口详细信息以适合您的电子邮件提供商的 SMTP 详细信息。

于 2012-12-24T18:45:49.027 回答
0

你的代码看起来很合理,所以你需要弄清楚是什么阻止了它工作。

你能消除防火墙问题的可能性吗?大多数中型或大型组织倾向于阻止端口 25、465 和 587 - 他们根本不希望任何未经授权的邮件出去。如果您怀疑可能是这种情况,您可以尝试从网络外部(即您的家用机器),尽管一些 ISP 也会阻止端口。

如果防火墙没有阻止您的连接,请验证您的凭据是否有效 - 这可以通过 Thunderbird、Outlook 或等效设备发送来完成。尝试使用未加密的邮件设置测试 - 根通过您的垃圾邮件文件夹,将一些粘贴到 spamcop 或等效项中,然后寻找一个开放的中继。或者,有一些商业电子邮件提供商支持未加密的电子邮件。

于 2012-12-27T04:04:29.310 回答
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);

    }
于 2016-04-29T06:53:22.033 回答