web-dev-qa-db-ja.com

.NET SMTPクライアント-クライアントには、この送信者として送信する権限がありません

ASP MVC3プロジェクトを介してSmtpClientクラスを使用してメールを送信しようとすると、サーバー上で奇妙な出来事が発生しています。これは私が使用しているコードです。

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
}

3つの環境に展開しました。 Windows 7(VS 2010 IISを使用)ではメールが正常に送信され、Windows 2003 IIS6マシンではメールが正常に送信され、最後にWindows 2008 R2 II7サーバーで次のエラーが表示されます。

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

誰がこれを引き起こしているのかアドバイスできますか。 User.Identity.Nameを表示すると、空の文字列が返されていることに気付きました。

20
StrictlySocial

メールサーバーは匿名メールの送信をサポートしていない可能性があり、メールサーバーに登録されている資格情報を指定する必要があります。

次のように資格情報を指定できます。

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

お役に立てれば。

16
jdavies

Exchangeサーバーを使用していて、ログオンアカウントと送信者の電子メールが異なる場合、「送信する権限がありません...」というエラーが表示されます。これは、アカウントのアクセス許可のためです。ログオンアカウントに「送信者」権限を付与する必要があります。

6
Tũi Wichet S

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>
5
a52

私にとっては、異なる資格情報を使用していました-

私が使用していたネットワーク資格情報で-

new NetworkCredential(smtpUser, smtpPassword)

fromFromAddress

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

FromAddressが実際のネットワーク資格情報と異なる電子メールを送信するときにこの問題が発生する場所。下記参照 -

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

                }

簡単な修正方法は、両方のメールをネットワーク認証情報のメールと同じにすることです。

1
Manoz

すべてを試しても失敗する場合は、サーバーが匿名ユーザーのみを受け入れる可能性があります。資格情報で接続しようとする場合:

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

次に、サーバーはエラー.NET SMTP Client - Client does not have permissions to send as this senderを返します。

それは奇妙ですが、最後の手段として、単純なものを試してください:

  • defaultCredentials="false"
1
Cyril Gandon

パッケージを実行しているVisual Studio 2013を使用して、1つのことがうまくいきました。 SMTP接続マネージャーエディターの[Windows認証を使用]タグを削除しました。

0
oosaf

同じ問題がありました-ASP.Netからの資格情報が、私の環境で電子メールを送信できるものになることはありませんでした。だから私は混乱を介してこのパスを見つけました(NTLMが常に正しく動作しない可能性や、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;

構成によっては、最後の行のコメントを解除する必要がある場合があります。

0
Andy

あなたの問題であるfalseを返す場合、User.Identity.IsAuthenticatedは何を返しますか。認証されていないユーザーとしてメールを送信しようとしています。

0
Ben Robinson