StrictlySocial
StrictlySocial

Reputation: 697

.NET SMTP Client - Client does not have permissions to send as this sender

I'm getting strange occurance on our servers when I am trying to send an email using SmtpClient class via an ASP MVC3 project. This is the code I am using.

try
{
    var client = new SmtpClient("MailServer");
    client.UseDefaultCredentials = true;

    MailMessage message = new MailMessage("[email protected]", "[email protected]", "Test Message", "Test Body");
    client.Send(message);
}
catch (Exception ex)
{
    // Do Nothing
}

I have deployed on three environments; on Windows 7 (using VS 2010 IIS) it sends the email fine, on the Windows 2003 IIS6 machine it sends the email fine, finally on the Windows 2008 R2 II7 server I get the following error:

Mailbox unavailable. The server response was: 5.7.1 Client does not have permissions to send as this sender using username 

Can anybody advise on what may be causing this. I have noticed that when I view User.Identity.Name, this is returning an empty string.

Upvotes: 21

Views: 71008

Answers (8)

oosaf
oosaf

Reputation: 1

One thing worked for me using Visual studio 2013 running packages. i removed the 'Use Windows Authentication' tag in the SMTP Connection Manager Editor.

Upvotes: 0

Manoz
Manoz

Reputation: 6597

For me it was using different credentials -

In network credentials I was using -

new NetworkCredential(smtpUser, smtpPassword)

and in fromAddress

 var fromAddress = new MailAddress("[email protected]", string.Empty);

Where when sending email where fromAddress is different than actual network credentials will lead this issue. See below -

 using (var message = new System.Net.Mail.MailMessage(fromAddress, toAddress)
                {
                    Subject = Keys.MailSubject,
                    Body = body,
                    IsBodyHtml = true
                })
                {
                    smtp.Send(message);

                }

The simple fix is to keep both the mails same as network credentials's one.

Upvotes: 1

Andy
Andy

Reputation: 424

Had the same issue - the credentials from ASP.Net were never going to be something that could send e-mail in my environment. So I figured out this path through the mess (which also includes the possibility that NTLM doesn't always work right and that I was putting the mail configuration info in web.config):

System.Net.Configuration.SmtpSection section = ConfigurationManager.GetSection("system.net/mailSettings/smtp") as System.Net.Configuration.SmtpSection;

// set up SMTP client
SmtpClient smtp = new SmtpClient();
System.Net.CredentialCache myCache = new System.Net.CredentialCache();
NetworkCredential myCred = new NetworkCredential(section.Network.UserName, section.Network.Password);
string host = section.Network.Host;
int port = section.Network.Port;

// do this because NTLM doesn't work in all environments....
if (myCred != null)
{
    myCache.Add(host, port, "Digest", myCred);
    myCache.Add(host, port, "Basic", myCred);
    myCache.Add(host, port, "Digest-MD5", myCred);
    myCache.Add(host, port, "Digest MD5", myCred);
    myCache.Add(host, port, "Plain", myCred);
    myCache.Add(host, port, "Cram-MD5", myCred);
    myCache.Add(host, port, "Cram MD5", myCred);
    myCache.Add(host, port, "Login", myCred);

    //myCache.Add(host, port, "NTLM", myCred);
}
smtp.Credentials = myCache;
smtp.UseDefaultCredentials = false;
//smtp.EnableSsl = true;

Depending on your configuration, you might need to uncomment the last line.

Upvotes: 0

Cyril Gandon
Cyril Gandon

Reputation: 17058

If you have try everything and it is still failing, one possibility is that the server accept only anonymous user. If you try to connect with credentials:

  • defaultCredentials="true"
  • defaultCredentials="false" userName="foo" password="false"

Then the server WILL return the error .NET SMTP Client - Client does not have permissions to send as this sender.

That's weird, but as a last resort, just try the simple:

  • defaultCredentials="false"

Upvotes: 1

a52
a52

Reputation: 366

I solve this problem removing authentication credentials from web.config

<system.net>
<mailSettings>
  <smtp from="[email protected]">
    <!--network host="EXCH-SERVER" port="25" userName="userName" password="password" defaultCredentials="false" /-->
    <network host="EXCH-SERVER" port="25" />
  </smtp>
</mailSettings>

Upvotes: 6

Tũi Wichet S
Tũi Wichet S

Reputation: 91

If you are using an exchange server and the logon account and sender email are different you will got the error "does not have permissions to send...". This is because of the account permissions. You must grant "send as" permission to the logon account.

Upvotes: 9

jdavies
jdavies

Reputation: 12894

It is likely that the mail server does not support sending anonymous emails and will require credentials to be specified which are registered on the mail server.

You can specify the credentials like so:

client.UseDefaultCredentials = false;
client.Credentials = new System.Net.NetworkCredential("username", "password");

Hope this helps.

Upvotes: 19

Coding Flow
Coding Flow

Reputation: 21881

What does User.Identity.IsAuthenticated return, if it returns false that is your problem. You are trying to send mail as an unauthenticated user.

Upvotes: 0

Related Questions