2017-01-06 2 views
0

J'ai besoin d'envoyer un e-mail via une application Web, mais l'adresse que l'e-mail va requiert une authentification SMTP. Le code fonctionne pour les boîtes aux lettres qui n'ont pas besoin d'authentification. Je voudrais passer à travers les informations d'identification de l'utilisateur Windows (le site utilise l'authentification Windows) et pensé que cela serait réalisé avec mon code, mais malheureusement, je reçois des erreurs sur le client n'ayant pas la permission d'envoyer. Je suppose qu'il utilise les informations d'identification de l'utilisateur du pool d'applications plutôt que l'utilisateur connecté.System.Net.Mail.SmtpClient - Le client n'a pas l'autorisation d'envoyer en tant que cet expéditeur

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 ne contient que le nom du serveur SMTP sous system.net (mailsettings-> smtp)

Comment puis-je obtenir l'application à utiliser les informations d'identification de l'utilisateur?

+0

WinForms? WPF? ASP.NET? –

+0

Désolé, c'est asp.net! –

+0

Je ne sais pas beaucoup sur ASP.NET, mais peut-être le problème se produit en raison de ce que le code du serveur est exécuté sur le Serverside, ainsi les informations d'identification de compte du serveur est utilisé? Ou est-ce censé être comme ça? –

Répondre

1

Est-ce que vous spécifiez le UseDefaultCredentials dans le web.config? Sinon, vous devez le faire pour les utiliser. Cela permettra à l'utilisateur actuellement connecté d'envoyer des e-mails via le serveur SMTP spécifié. Notez que les sites Web s'exécutent généralement sous un identifiant d'utilisateur distinct, et non l'utilisateur actuellement connecté sur la machine.

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

Ou spécifiez les informations d'identification dans le code.

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

Si les deux travaillez-vous pas simplement ne sont pas autorisés à envoyer du courrier sur ce serveur.

Voir pour plus d'informations

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

Non je ne l'ai pas mis dans le web.config. Je vais essayer ça lundi. Est-ce que ça va dans la balise ''? Il doit envoyer en tant qu'utilisateur connecté au lieu d'un utilisateur du pool d'applications. Nous avons récemment changé nos serveurs Exchange pour exiger une authentification lors de l'envoi de courriels à des adresses de groupe. Tout fonctionne très bien pour les utilisateurs qui envoyant un courriel via Outlook, mais de toute évidence dans mon application, il ne fonctionne pas –

+0

Si elle est l'utilisateur actuel alors il devrait fonctionner (si le serveur Exchange permet) – VDWWD

+0

Je ne peux pas obtenir ce travail que je ne connaîtra pas le mot de passe de l'utilisateur pour créer une nouvelle instance de 'NetworkCredential'. Est-il possible de le passer de l'authentification Windows au lieu de le spécifier manuellement? –