从Windows中的系统配置获取SMTP服务器和主机

时间:2014-11-09 01:35:21

标签: c# .net windows email

在Windows中,您可以从控制面板配置邮件设置。我想知道的是存储的信息在哪里?我需要编写一个可以发送电子邮件的应用程序,默认情况下我想使用这些设置。我假设如果我使用SmtpClient的无参数构造函数,它会读取它们,但是当我运行以下代码时:

        var smtp = new SmtpClient();
        var host = smtp.Host;
        var port = smtp.Port;
        Console.WriteLine("{0}:{1}", host,port);

我将主机设为null(虽然端口是25)。如果我通过它发送消息,它会抛出一个异常,说" Host未指定"。

我在哪里可以获得此预配置数据?

2 个答案:

答案 0 :(得分:0)

您需要在检查其值之前先设置该属性,否则它将为null。但是,默认情况下,端口为25.这就是为什么你看到25为端口,即使没有指定。这是SmtpClient对象的Host属性的定义。


    public string Host { set; get; }
        Member of System.Net.Mail.SmtpClient

    Summary:
    Gets or sets the name or IP address of the host used for SMTP transactions.

    Returns:
    A System.Strin

g that contains the name or IP address of the computer to use for SMTP transactions.

试试这个......


    var smtp = new SmtpClient();
    smtp.Host = "localhost"; //your mail server host name or ip address
    var host = smtp.Host;
    var port = smtp.Port;
    Console.WriteLine("{0}:{1}", host,port);

答案 1 :(得分:0)

通常您需要预先设置SMTP服务器名称,并将此信息用作程序中配置的一部分。您可以让用户从Outlook设置中获取此信息。我假设你已经知道了。无论出于何种原因,您希望动态获取SMTP服务器名称,此活动可能会被视为黑客行为,并可能给用户带来安全问题。如果某些程序自动使用Outlook中预先配置的邮件服务器发送我们的一些电子邮件,您能成像吗?

据说,实现此目的的一种方法是在您的过程中使用第三方端口扫描程序来获取潜在SMTP服务器名称列表,并使用helo命令验证SMTP是否存在。这应该有助于确定哪个IP是SMTP服务器。