トップ回答者
【VSTO】Outlook 独自アドレス帳開発において

質問
-
お世話になっております。
Outlook2016アドインとして、独自のアドレス帳を開発しております。
社内(社員)と社外アドレスを別々のアドレス帳へ表示して利用したく、既存アドレス帳には、社員アドレス、
独自アドレス帳には社外アドレスを一覧して、選択するようにします。
基本的には、完成したのですが1点以下の内容が発生しております。
例えば、新規メールを作成し、宛先へ社内アドレスを設定した後、独自アドレス帳から社外アドレスを設定すると、
あらかじめ設定した社内アドレスに赤波下線が表示されます。
因みに、社内アドレス帳には、途中まで同名が存在します。例)山田太郎と山田太郎(携帯)です。
この状態で、リボンの名前グループにある”名前の確認”をクリックすると、どちらの山田太郎か?選択するように促されます。
初めに社内アドレスを設定した時のどちらの山田太郎だったか記憶されていない(?)ようです。
初めに指定したアドレスのままを維持したいのですが、どうしたら良いのでしょうか?
【C#】
※独自フォーム(AddrForm)MailItem(myMailItem)は取得済みです。
※独自フォームは基本的に既存アドレス帳と同じ仕様にしています。
private void AddrForm_Load(object sender, EventArgs e)
{
tx_To.Text = myMailItem.To; //メッセージフォームTOを独自フォームTOへセット
}private void bt_OK_Click(object sender, EventArgs e)
{
myMailItem.To = myMailItem.To + "; " + tx_TO.Text; //独自フォームで指定された外部アドレスをメッセージフォームTOへセット
this.Close();
}【環境】
VisualStudio2017 Enterprise、Outlook2016、Windows8.1
よろしくお願い致します。
回答
-
MailItem.Toにテキストで設定せずに、MailItem.Recipientsで追加してみては?
以下VBAですがVSTOでも処理は同じはず
Sub Test() Dim mail As MailItem On Error Resume Next Set mail = Application.ActiveInspector.CurrentItem If (Err.Number <> 0) Then Exit Sub End If On Error GoTo 0 mail.To = "" 'テストのため宛先をすべて消す mail.CC = "" mail.BCC = "" Dim al As AddressList For Each al In Application.Session.AddressLists For Each address In al.AddressEntries If (Left(address.Name, 5) = "山田 太郎") Then 'すべてのアドレス帳で山田 太郎を探してみる 'To,CC,BCCを使わずにRecipientで追加してみる Dim rec As Recipient Set rec = mail.Recipients.Add(address.Name) Set rec.AddressEntry = address rec.Type = OlMailRecipientType.olTo rec.Resolve End If Next Next End Sub
個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)
- 回答の候補に設定 立花楓Microsoft employee, Moderator 2017年10月17日 0:36
- 回答としてマーク Mitakana 2017年10月19日 2:33
すべての返信
-
MailItem.Toにテキストで設定せずに、MailItem.Recipientsで追加してみては?
以下VBAですがVSTOでも処理は同じはず
Sub Test() Dim mail As MailItem On Error Resume Next Set mail = Application.ActiveInspector.CurrentItem If (Err.Number <> 0) Then Exit Sub End If On Error GoTo 0 mail.To = "" 'テストのため宛先をすべて消す mail.CC = "" mail.BCC = "" Dim al As AddressList For Each al In Application.Session.AddressLists For Each address In al.AddressEntries If (Left(address.Name, 5) = "山田 太郎") Then 'すべてのアドレス帳で山田 太郎を探してみる 'To,CC,BCCを使わずにRecipientで追加してみる Dim rec As Recipient Set rec = mail.Recipients.Add(address.Name) Set rec.AddressEntry = address rec.Type = OlMailRecipientType.olTo rec.Resolve End If Next Next End Sub
個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)
- 回答の候補に設定 立花楓Microsoft employee, Moderator 2017年10月17日 0:36
- 回答としてマーク Mitakana 2017年10月19日 2:33
-
gekka様
頂いた内容で実装してみました。
独自アドレス帳から選択したアドレスや既に設定されていたアドレスが、
想定通りの動作(表示)を確認できました。ありがとうございました。感謝します。
ただ1点実装できなかったのが、今回の逆で既にメール宛先に設定されている場合、
Windowsフォームにて作成した自作の「独自アドレス帳フォーム」(既存アドレス帳と同様なレイアウト)を
開いたときも、そこにある宛先、CC、BCCフィールドに同様にセットしたかったのですが、
アドレスがテキストになってしまい、アドレス帳チェック?(Resolve)が設定できませんでした。
根本的に考え方が違うのかもしれません。
返信で個人の方への質問のようになってしまい、申し訳ございません。
- 編集済み Mitakana 2017年10月17日 9:55