C#发送SMTP电子邮件(是的,我知道)

时间:2018-05-15 23:07:02

标签: c# smtp

我意识到这个问题已被问了一百次,但遗憾的是我仍然有同样的问题。所以我在这里将某人的Vb.Net解决方案转换为C#,但我得到了smtpClient.Send,我的应用程序挂起,直到它超时。我已经允许exe通过防火墙,所以这不是问题。任何有关我错过/出错的帮助都将不胜感激。这是我的代码

        MailMessage mailMsg = new MailMessage();
        mailMsg.To.Add("a@b.com");
        // From
        MailAddress mailAddress = new MailAddress("x@y.com");
        mailMsg.From = mailAddress;

        // Subject and Body
        mailMsg.Subject = "subject";
        mailMsg.Body = "body";

        SmtpClient smtpClient = new SmtpClient("smtp.virginmedia.com", 465);

        System.Net.NetworkCredential credentials =
           new System.Net.NetworkCredential("x@y.com", "MyPassword");
        smtpClient.EnableSsl = true;
        smtpClient.Credentials = credentials;
        //smtpClient.
        smtpClient.Send(mailMsg);

提前干杯 Robbo

1 个答案:

答案 0 :(得分:1)

将以下内容添加到您的app.config中。 再次运行应用程序。现在,您将看到日志中确切的超时位置。如果在连接期间,您被防火墙或使用错误的端口阻止。但也许它会在另一个时间受到抨击?

<system.diagnostics>
  <sources>
    <source name="System.Net">
      <listeners>
        <add name="TraceFile"/>
        <add name="TraceConsole"/>
      </listeners>
    </source>
    <source name="System.Net.Sockets">
      <listeners>
        <add name="TraceFile"/>
      </listeners>
    </source>
  </sources>
  <sharedListeners>
    <add name="TraceFile" type="System.Diagnostics.TextWriterTraceListener" initializeData="trace.log"/>
    <add name="TraceConsole" type="System.Diagnostics.ConsoleTraceListener"/>
  </sharedListeners>
  <switches>
    <add name="System.Net" value="Verbose"/>
    <add name="System.Net.Sockets" value="Verbose"/>
  </switches>
  <trace autoflush="true"/>
</system.diagnostics>