【问题标题】:How to send email in asp.net using c# to any email address using gmail address如何使用 c# 在 asp.net 中将电子邮件发送到使用 gmail 地址的任何电子邮件地址
【发布时间】:2012-12-11 01:47:34
【问题描述】:

我正在尝试使用 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[] 缓冲区,Int32 偏移量,Int32 大小,SocketFlags socketFlags)在 System.Net.Sockets.NetworkStream.Read(Byte[] 缓冲区,Int32 偏移量, Int32 大小)---内部异常堆栈跟踪结束---在 System.Net.Sockets.NetworkStream.Read(Byte[] 缓冲区,Int32 偏移量, Int32 大小)在 System.Net.DelegatedStream.Read(Byte[] 缓冲区,Int32 偏移量,Int32 计数)在 System.Net.BufferedReadStream.Read(Byte[] 缓冲区,Int32 偏移量,Int32 计数)在 System.Net.Mail.SmtpReplyReaderFactory.ReadLines(SmtpReplyReader 调用者,布尔oneLine)在 System.Net.Mail.SmtpReplyReaderFactory.ReadLine(SmtpReplyReader 调用者)在 System.Net.Mail.CheckCommand.Send(SmtpConnection conn, 字符串和响应)在 System.Net.Mail.StartTlsCommand.Send(SmtpConnection conn) 在 System.Net.Mail.SmtpConnection.GetConnection(服务点 服务点)在 System.Net.Mail.SmtpTransport.GetConnection(ServicePoint servicePoint) 在 System.Net.Mail.SmtpClient.GetConnection() 在 System.Net.Mail.SmtpClient.Send(MailMessage 消息)"

【问题讨论】:

标签: c# asp.net email


【解决方案1】:

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

【讨论】:

  • 我已经修改了我的问题以消除歧义。现在请查看帖子,我正在使用 gmail 地址发送电子邮件,但收到帖子中所述的错误。
  • 我看不出你的帖子有什么问题。可能是防火墙/环境问题。
  • 我曾尝试通过禁用防火墙来发送电子邮件,但这没有用。任何想法,我错过了什么关键点:(
【解决方案2】:

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

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

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

【讨论】:

  • 我的应用程序正在我的家用计算机上运行,​​我尝试通过禁用 Windows 防火墙来发送 eamil,但没有提供解决方案。我通过 gmail.com 直接访问了我的 gmail 帐户,其凭据很好。但是,当我尝试为我的 gmail 帐户配置 Outlook 时,该帐户未建立,并且在测试连接时显示以下错误:“登录到接收邮件服务器 (POP3):Outlook 无法连接到您的接收 (POP3) 电子邮件服务器。如果您继续收到此消息,请联系您的服务器管理员或 Internet 服务提供商 (ISP)。"
  • 发送测试电子邮件消息:无法发送消息。在您的帐户属性中验证电子邮件地址。服务器响应:530 5.7.0 必须先发出 STARTTLS 命令。 l5sm48012964wia.10
  • 您是否将 Outlook 配置为使用 TLS 发送?如果是这样,那么您似乎无法创建从您的机器到 Google 的安全连接。可能您的 ISP 阻止了连接,或者您的机器有其他问题阻止了安全连接。
【解决方案3】:

你可以看看这个 .. 简单的代码及其对 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);

    }

【讨论】:

    猜你喜欢
    • 2014-04-27
    • 1970-01-01
    • 2014-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-28
    • 2012-01-21
    • 1970-01-01
    相关资源
    最近更新 更多