如何使用c#在asp.net中使用gmail地址向任何电子邮件地址发送电子邮件

时间:2012-12-24 18:42:07

标签: c# asp.net email

我正在尝试使用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)“

3 个答案:

答案 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);

    }