14

これは、「ローカルで機能し、サーバーでは機能しない」投稿の1つです。

メールを送信する簡単な連絡フォームがあります。サーバーで、次の例外が発生します。

 Security Exception
Description: The application attempted to perform an operation not allowed
by the security policy.  To grant this application the required permission
please contact your system administrator or change the application's trust
level in the configuration file.

Exception Details: System.Security.SecurityException: Request for the
permission of type 'System.Net.Mail.SmtpPermission, System, Version=4.0.0.0, 
Culture=neutral, PublicKeyToken=b77a5c561934e089' failed.

Source Error:
[No relevant source lines]

ホストは、WebサーバーからSMTPメッセージを送信するために機能するコードまたはSMTPクライアントを私に提供できませんでした。したがって、厳密なセキュリティポリシーでWebサーバーを満足させる別の送信方法を見つける必要があります。

ソースコードは次のとおりです。

private void SendMessage (string returnAddress, string textSubject, string messageText)
    {
        config config = new config();

        System.Net.Mail.MailMessage message = new System.Net.Mail.MailMessage();

        message.To.Add(config.toEmailAddress);
        message.Subject = "Website Contact Form Message: " + textSubject;
        message.From = new System.Net.Mail.MailAddress(returnAddress);
        message.Body = messageText;

        message.IsBodyHtml = false;

        System.Net.Mail.SmtpClient smtp = new System.Net.Mail.SmtpClient("smtp.naturalcarpetcompany.com");
        smtp.Credentials = new System.Net.NetworkCredential(config.fromEmailAddress, config.fromEmailPassword);
        smtp.Port = 587;

        try
        {
            smtp.Send(message);
        }
        catch (Exception ex)
        {
            Exception ex2 = ex;
            string errorMessage = string.Empty;
            while (ex2 != null)
            {
                errorMessage += ex2.ToString();
                ex2 = ex2.InnerException;
            }
            HttpContext.Current.Response.Write(errorMessage);
        }
    }
4

2 に答える 2

21

セキュリティレベルが低いと、SMTPポートを指定できません。デフォルトはポート25です。私のISPはポート587を指定していますが、ポート25を使用でき、正常に動作します。

于 2012-08-16T19:27:51.640 に答える
10

同様の問題が発生しました。Web.configファイルに次のコードを追加するだけでうまくいきました。

<configuration>
  <system.web>
    .....
    <trust level="Full" originUrl=""/>
  </system.web>
</configuration>

共有ホスティングサーバーでこの問題に直面していました。SMTPクライアントのオブジェクトを作成し、それにポート番号を割り当てようとしたときにエラーが発生していました。信頼レベルを上げることは私にとってかなりうまくいきました。私はそれが他の誰かにも役立つことを確認するために詳細を詳しく説明しました。本当に解決策に感謝します!コメントできなかったので、ここで原作者に感謝します。

于 2013-09-14T07:03:18.937 に答える