一部の内部ユーザーにステータスメールを送信する簡単なアプリケーションがあります。
単純なアプリケーション構成ファイル(App.config)を使用して、対象のユーザーに関する電子メールアドレスと名前の情報を保存します。appSettingsセクションは単純なキーと値のペアのみをサポートしているように見えるため、現在は次のようになっています。
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="toName" value="Recipient Name" />
<add key="toAddr" value="some@email.com" />
<add key="toName2" value="Another Recipient Name" />
<add key="toAddr2" value="another@email.com" />
<add key="ccName" value="An Archive"/>
<add key="ccAddr" value="copies@email.com"/>
<add key="ccName2" value="Another Archive"/>
<add key="ccAddr2" value="morecopies@email.com"/>
</appSettings>
</configuration>
次に、各受信者をコードに個別に追加します。
現在、これは、受信者を追加または削除するたびに、新しい受信者を処理し、アプリケーションを再構築して再デプロイするためにコードを書き直す必要があることを意味します
次のようなカスタム構成エントリを保存できるようにしたいと思います。
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<recipients>
<recipient recType="to" recAddr="some@email.com" recName="Recipient Name" />
<recipient recType="to" recAddr="another@email.com" recName="Another Recipient Name" />
<recipient recType="cc" recAddr="copies@email.com" recName="An Archive"/>
<recipient recType="cc" recAddr="morecopies@email.com" recName="Another Archive"/>
</recipients>
</configuration>
だから私はそれらをループすることができます:
MailMessage message = new MailMessage();
foreach(recipient rec in recipients)
{
MailAddress mailAddress = new MailAddress(recipient["recAddr"],recipient["recName"]);
if(recipient["recType"] == "cc")
message.CC.Add(mailAddress);
else
message.To.Add(mailAddress);
}
これを達成する方法は?
回答: Regforのリンクの例を使用して、次のようなカスタムConfigurationElementsのコレクションを使用してカスタム構成セクションを作成できました。
public class RecipientElement : ConfigurationElement
{
[ConfigurationProperty("name", IsRequired = true, IsKey = true)]
public string Name
{
get
{
return (string)base["name"];
}
}
[ConfigurationProperty("mailAddr", IsRequired = true)]
public string Address
{
get
{
return (string)base["mailAddr"];
}
}
[ConfigurationProperty("isCC")]
public bool IsCC
{
get
{
return (bool)base["isCC"];
}
}
}
最後の構成セクションで:
<recipientSection>
<recipients>
<recipient name="Primary recipient" mailAddr="usermailbox@email.com" isCC="false" />
<recipient name="Archive" mailAddr="copies@email.com" isCC="true" />
</recipients>
</recipientSection>
コレクションをループするrecipients
と、SmtpClientが送信できるのと同じ数の受信者を追加できます:)
みんなありがとう