.NET为什么我不能覆盖我的web.config mailSettings?

时间:2009-10-02 01:46:33

标签: .net vb.net email smtp exchange-server

通常我的应用程序会发送带有通用系统地址的电子邮件。但在某些情况下,我希望以登录用户身份发送。

的web.config:

<?xml version="1.0"?>
<configuration>
    ...
    <appSettings>
        ...
        <add key="DefaultEmailAddress"
             value="noreply@example.com" />
    </appSettings>
    <system.net>
        <mailSettings>
            <smtp>
                <network host="servername"
                         port="25"
                         userName="noreply"
                         password="apple" />
            </smtp>
        </mailSettings>
    </system.net>
    ...
</configuration>

此代码无法覆盖web.config中的默认发件人:

Dim from As String = ConfigurationManager.AppSettings("DefaultEmailAddress")
Dim to As String = "sadams@example2.com"
Dim m As New Mail.MailMessage(from, to)
m.IsBodyHtml = True
m.Subject = "Test"
m.Body = "<p>This is a test.</p>"

Dim c As New System.Net.Mail.SmtpClient

If CurrentUser.HasExchangeCredentials Then
    Dim userName As String = CurrentUser.ExchangeUserName
    Dim password As String = CurrentUser.ExchangePassword
    Dim address As String = CurrentUser.EmailAddress
    c.UseDefaultCredentials = False
    c.Credentials = New System.Net.NetworkCredential(userName, password)
    m.Sender = New Mail.MailAddress(address)
End If

c.Send(m)

我的电子邮件已发送,但会以 noreply@example.com 的形式发送,但也不会显示在我的Outlook Sent文件夹中。

我不想 UseDefaultCredentials 。我想使用一个新的,不同的 NetworkCredential

我正在使用Microsoft Exchange。

2 个答案:

答案 0 :(得分:2)

我认为这回答了你的问题:

http://www.vbdotnetforums.com/vb-net-general-discussion/14895-system-net-mail-mailmessage-sender-vs-system-net-mail-mailmessage.html

Sender和From是分开的。更改发件人不会更改发件人地址。

在您的代码中将From Property设置为您的地址变量。

答案 1 :(得分:1)

在上面的代码中,我看不到你覆盖默认发件人的位置。您将“From”值设置为noreply@example.com:

Dim from As String = ConfigurationManager.AppSettings("DefaultEmailAddress")

你应该尝试类似的东西:

Dim from As String = CurrentUser.ExchangeUserName

这将使用该用户的电子邮件地址,而不是web.config文件中的值。