2017-01-06 2 views
0

Мне нужно отправить электронное письмо через веб-приложение, но адрес, на который отправляется электронное письмо, требует проверки подлинности SMTP. Код работает для почтовых ящиков, которые не нуждаются в аутентификации.System.Net.Mail.SmtpClient - у клиента нет разрешения на отправку в качестве этого отправителя

Я хотел бы передать учетные данные пользователей Windows (сайт использует проверку подлинности Windows) и думал, что это будет достигнуто с моим кодом, но, к сожалению, я получаю ошибки о том, что у клиента нет разрешения на отправку. Я предполагаю, что он использует учетные данные пользователя пула приложений, а не зарегистрированного пользователя.

Dim mailMessage As System.Net.Mail.MailMessage = New System.Net.Mail.MailMessage() 
mailMessage.IsBodyHtml = True 
Dim strBody As String = "<font size='2' font face='Tahoma'>" & _ 
"<br><br><b>Date: </b>" & Me.txtDate.Text 
mailMessage.From = New System.Net.Mail.MailAddress(fromAddress) 'Logged in user's email address 
' More code here to build the email body etc... 
' Then attempt to send it: 
Dim smtpClient As System.Net.Mail.SmtpClient = New System.Net.Mail.SmtpClient 
smtpClient.UseDefaultCredentials = True 
smtpClient.Send(mailMessage) 

Web.config содержит только имя сервера SMTP при system.net (mailsettings-> Smtp)

Как получить приложение, чтобы использовать учетные данные пользователя?

+0

WinForms? WPF? ASP.NET? –

+0

Извините, его asp.net! –

+0

Я мало знаю об ASP.NET, но, возможно, проблема возникает из-за того, что код backend выполняется на сервере, поэтому используются учетные данные учетной записи сервера? Или это должно быть так? –

ответ

1

Вы указали UseDefaultCredentials в Web.config? Если нет, вы должны сделать это, чтобы использовать их. Это позволит зарегистрированному в данный момент пользователю отправлять электронную почту через указанный SMTP-сервер. Обратите внимание, что веб-сайты обычно запускаются под отдельными учетными данными пользователя, а не с текущего пользователя на машине.

<system.net> 
    <mailSettings> 
    <smtp deliveryMethod="network"> 
     <network host="localhost" port="25" defaultCredentials="true" /> 
    </smtp> 
    </mailSettings> 
</system.net> 

Или укажите учетные данные в коде.

smtpClient.Credentials = new NetworkCredential("[email protected]", "abcd1234"); 

Если вы не работаете, вы просто не авторизованы для отправки почты на этом сервере.

Смотрите подробнее

https://msdn.microsoft.com/nl-nl/library/system.net.mail.smtpclient.usedefaultcredentials(v=vs.110).aspx

https://msdn.microsoft.com/nl-nl/library/w355a94k(v=vs.110).aspx

+0

Нет. Я не помещал это в файл web.config. Я дам эту попытку в понедельник. Выполняется ли это в теге ' '? Он должен отправлять как зарегистрированный пользователь, а не пользователь пула приложений. Недавно мы изменили наши серверы Exchange, чтобы требовать аутентификации при отправке писем по адресам групп. Все работает отлично для пользователей, которые отправляют электронную почту через Outlook, но, очевидно, в моем приложении это не работает. –

+0

Если это текущий пользователь, тогда он должен работать (если сервер Exchange это разрешает) – VDWWD

+0

Я не могу заставить это работать как я не будет знать пароль пользователя для создания нового экземпляра 'NetworkCredential'. Есть ли способ передать его из проверки подлинности Windows, а не указывать его вручную? –

Смежные вопросы