在C#的app.config文件中设置SMTP邮件客户端配置

9
我已将邮件设置放入app.config中,并成功地将它们导入到mailSettingsSectionGroup对象中。但是,我不知道如何使用这些设置发送邮件。
这是我目前的进展:
System.Configuration.Configuration config =     
ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);

MailSettingsSectionGroup mailSettings  = 
config.GetSectionGroup("system.net/mailSettings") as 
System.Net.Configuration.MailSettingsSectionGroup;

我需要怎么做才能使用mailSettings对象?

2个回答

21

System.Net.Mail.SmtpClient

具体来说,Send(...) 方法。 SmtpClient 会自动从您的应用程序/ web.config 文件中提取详细信息。 您无需执行任何操作即可使用配置,一切都是自动处理的。

编辑以添加SMTP Web.Config 示例:

<system.net>
    <mailSettings>
        <smtp from="foo@bar.com">
            <network host="yoursmtpserver.com" />
        </smtp>
    </mailSettings>
</system.net>

1
请提供一个 web.config 文件的示例或者指定 SmtpClient 将要读取的模式? - Ryan Gates
1
“from” 是如何自动获取的? - mynkow
所以我在“from”中指定了一个地址,但是当我在代码中使用另一个地址时,代码中的地址会覆盖配置文件中的地址。如果我在代码中没有指定任何内容(null、空字符串),则会抛出错误。 - Greg

5

我有一个自定义类:

    using System;
    using System.Configuration;
    using System.Net;
    using System.Net.Configuration;
    using System.Net.Mail;

    namespace MyNameSpace
    {
        internal static class SMTPMailer
        {
            public static void SendMail(string to, string subject, string body)
            {
                Configuration oConfig = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
                var mailSettings = oConfig.GetSectionGroup("system.net/mailSettings") as MailSettingsSectionGroup;

                if (mailSettings != null)
                {
                    int port = mailSettings.Smtp.Network.Port;
                    string from = mailSettings.Smtp.From;
                    string host = mailSettings.Smtp.Network.Host;
                    string pwd = mailSettings.Smtp.Network.Password;
                    string uid = mailSettings.Smtp.Network.UserName;

                    var message = new MailMessage
                        {
                            From = new MailAddress(@from)
                        };
                    message.To.Add(new MailAddress(to));
                    message.CC.Add(new MailAddress(from));
                    message.Subject = subject;
                    message.IsBodyHtml = true;
                    message.Body = body;

                    var client = new SmtpClient
                        {
                            Host = host,
                            Port = port,
                            Credentials = new NetworkCredential(uid, pwd),
                            EnableSsl = true
                        };

                    try
                    {
                        client.Send(message);
                    }
                    catch (Exception ex)
                    {
                    }
                }
            }
         }
     }

这个可以很好地从我的app.conf文件中获取。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接