【问题标题】:Can I send emails without authenticating on the SMTP server?我可以在不通过 SMTP 服务器验证的情况下发送电子邮件吗?
【发布时间】:2012-09-11 12:35:22
【问题描述】:

我正在创建简单的电子邮件发送应用程序。在我的应用程序中,当我发送电子邮件时,我必须输入我的电子邮件地址或密码,但我不想使用密码,只想输入电子邮件

所以

我可以使用 c#/.net 应用程序在不使用密码的情况下发送电子邮件吗?

这是我的代码:

   try
    {
        // setup mail message
        MailMessage message = new MailMessage();
        message.From = new MailAddress(textBox1.Text);
        message.To.Add(new MailAddress(textBox2.Text));
        message.Subject = textBox3.Text;
        message.Body = richTextBox1.Text;

        // setup mail client
        SmtpClient mailClient = new SmtpClient("smtp.gmail.com");
        mailClient.Credentials = new NetworkCredential(textBox1.Text,"password");

        // send message
        mailClient.Send(message);

        MessageBox.Show("Sent");
    }
    catch(Exception)
    {
        MessageBox.Show("Error");
    }

【问题讨论】:

  • 您无法使用错误的凭据进行身份验证。换句话说,如果您有密码(而 gmail 需要密码),您将无法在不发送密码的情况下登录,因此您将无法发送任何内容。
  • 为什么不在第一次登录后保存身份验证详细信息?

标签: c# .net email smtp smtpclient


【解决方案1】:

我可以使用 c#/.net 应用程序在不使用密码的情况下发送电子邮件吗?

是的,如果您可以访问不需要身份验证的电子邮件网关,您可以这样做:

SmtpClient mailClient = new SmtpClient("your.emailgateway.com");
mailClient.Send(message);

也许您的公司或 ISP 可以为您提供一个?

【讨论】:

    【解决方案2】:

    一般来说,当然可以。在您的具体示例代码中,您使用的是不允许匿名发送的 GMail。

    来自their references

    smtp.gmail.com(使用身份验证)
    使用身份验证:是
    端口为 TLS/STARTTLS:587
    SSL 端口:465

    关于您的catch 子句的附加评论:

    在我看来,您严重滥用了异常的想法。更好的方法是:

    catch(Exception x)
    {
        var s = x.Message;
        if ( x.InnerException!=null )
        {
            s += Environment.NewLine + x.InnerException.Message;
        }
    
        MessageBox.Show(s);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-17
      • 2011-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-09
      相关资源
      最近更新 更多