2

SMTP 電子メールを送信する必要がある C# クラスを作成しています。この SO の質問で、メールを送信するために必要なものを提供するコードを見つけました(SO の質問)

便宜上、上記の質問に対する回答から変更したコードを次に示します。

using System.Net;
using System.Net.Mail;

var fromAddress = new MailAddress("from@gmail.com", "From Name");
var toAddress = new MailAddress("to@example.com", "To Name");
const string fromPassword = "fromPassword";
const string subject = "Subject";
const string body = "Body";

var smtp = new SmtpClient
           {
               Host = "smtp.gmail.com",
               Port = 587,
               EnableSsl = true,
               DeliveryMethod = SmtpDeliveryMethod.Network,
               UseDefaultCredentials = false,
               Credentials = new NetworkCredential(fromAddress.Address, fromPassword)
           };
using (var message = new MailMessage(fromAddress, toAddress)
                     {
                         Subject = subject,
                         Body = body
                     })
{
    smtp.Send(message);
}

私が抱えている問題は、その質問のコードでは、smtp パスワードをプレーンテキストの C# ソース ファイルに格納する必要があることです。問題の 1 つは、このコードがチーム ファウンデーション サービスにチェックインされるため、チーム全体が資格情報を知る必要があることです。問題 2 は、難読化は可能ですが、問題 1 は解決しないということです。

私が見つけた解決策に最も近いのは、インストール手順としてのアプリ構成の暗号化です。これは問題 1 を回避しませんが、必要に応じて実行できます。

この状況は本番アプリケーションで発生しますか? また、C# クラスをインスタンス化するために必要なパスワードを保存するためにどのようなベスト プラクティスが使用されていますか?

4

2 に答える 2

1

この問題は、ビルド サーバーである TeamCity を使用して解決します。ビルド システムには、少数の信頼できる個人のみが設定できる本番環境の秘密情報 (パスワード、API キーなど) が含まれています。私たちのビルド システムは、スクリプトやパスワード ビルド パラメーターを使用して、コンパイルの直前/直後に構成 (およびその他の機密) ファイルを変更する役割を果たします。

これにより、シークレットのステージング/テスト値をコミットできるようになりますが、本番ビルドは本番シークレットを取得することを知っておいてください。App/Web.Config 変換は URL の切り替え (dev/qa/stage/prod) を処理できるため、ソース管理に含めたくない部分にのみビルド サーバーを使用します。

于 2013-12-23T17:41:39.967 に答える
-1

プレーンテキストのみを受け入れます。つまり、

Credentials = new NetworkCredential(fromAddress.Address, "MY Password" )

プロジェクトをデプロイすると、誰もあなたのパスワードを見ることができなくなります。テキスト ファイルに保存する場合は、暗号化方法を使用して他のユーザーがパスワードを表示できないようにすることができますが、資格情報へのパラメーターとして解析する場合は、プレーン テキストとして解析する必要があります。それは私たちが専門的に行う通常の方法です。メールのパスワードを教えたくない場合は、テスト用に別のメール アカウントを作成し、その資格情報をそこに配置します。

于 2013-06-22T03:55:04.127 に答える