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
を表示すると、空の文字列が返されていることに気付きました。
メールサーバーは匿名メールの送信をサポートしていない可能性があり、メールサーバーに登録されている資格情報を指定する必要があります。
次のように資格情報を指定できます。
client.UseDefaultCredentials = false;
client.Credentials = new System.Net.NetworkCredential("username", "password");
お役に立てれば。
Exchangeサーバーを使用していて、ログオンアカウントと送信者の電子メールが異なる場合、「送信する権限がありません...」というエラーが表示されます。これは、アカウントのアクセス許可のためです。ログオンアカウントに「送信者」権限を付与する必要があります。
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>
私にとっては、異なる資格情報を使用していました-
私が使用していたネットワーク資格情報で-
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);
}
簡単な修正方法は、両方のメールをネットワーク認証情報のメールと同じにすることです。
すべてを試しても失敗する場合は、サーバーが匿名ユーザーのみを受け入れる可能性があります。資格情報で接続しようとする場合:
defaultCredentials="true"
defaultCredentials="false" userName="foo" password="false"
次に、サーバーはエラー.NET SMTP Client - Client does not have permissions to send as this sender
を返します。
それは奇妙ですが、最後の手段として、単純なものを試してください:
defaultCredentials="false"
パッケージを実行しているVisual Studio 2013を使用して、1つのことがうまくいきました。 SMTP接続マネージャーエディターの[Windows認証を使用]タグを削除しました。
同じ問題がありました-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;
構成によっては、最後の行のコメントを解除する必要がある場合があります。
あなたの問題であるfalseを返す場合、User.Identity.IsAuthenticatedは何を返しますか。認証されていないユーザーとしてメールを送信しようとしています。